Wiktionary
gdwiktionary
https://gd.wiktionary.org/wiki/Pr%C3%AComh-Dhuilleag
MediaWiki 1.47.0-wmf.12
case-sensitive
Meadhan
Sònraichte
Deasbaireachd
Cleachdaiche
Deasbaireachd a' chleachdaiche
Wiktionary
An deasbaireachd aig Wiktionary
Faidhle
Deasbaireachd an fhaidhle
MediaWiki
Deasbaireachd MediaWiki
Teamplaid
Deasbaireachd na teamplaid
Cobhair
Deasbaireachd na cobharach
Roinn-seòrsa
Deasbaireachd na roinn-seòrsa
TimedText
TimedText talk
Mòideal
Deasbaireachd mòideil
Event
Event talk
Prìomh-Dhuilleag
0
1625
86321
85305
2026-07-22T11:38:24Z
Altronic
4137
Update page
86321
wikitext
text/x-wiki
{| style="border: 0; background-color: #ffffff" cellpadding="0" cellspacing="10"
| style="width: 50%; vertical-align: top; border:1px solid #FFBC79; background-color: #ffffff" |
<div style="background-color:#FFE9D2; font-size:1px; height:8px; border-bottom:1px solid #FFBC79;"></div>
<div style="font: 13pt; font-weight:bold; padding:5px; border-bottom:1px solid #AAAAAA;">Fàilte gu Uicleir, am faclair saor.</div>
<div style="font-size:9pt; padding:5px">
Tha '''[[Sònraichte:Statistics|{{NUMBEROFARTICLES}}]]''' duilleagan deimhneidean anns an Uicleir seo.
</div>
|-
| width=48% style="border-bottom: 1px dashed #AAAAAA;" |
|-
| width=48% style="border-top: 1px dashed #AAAAAA;" |
|-
|Fàilte gu Uicleir, am faclair saor! 'S e faclair saor agus co-obrachail a th' ann, leis an amas a chruthachadh faclair a bhith a' mìneachadh a h-uile facal anns a h-uile cànan anns a' Ghàidhlig.
Ma tha Gàidhlig agaibhse, no tha fhios dhen cànan prògramachaidh lua agaibhse, cuidichibh sinn leis an fhaclair-sa!
''Nòta'': Tha sinn ag ùrachadh co-dhealbhachd nan duilleige agus na mòidealan aig an uicidh seo an-dràsta fhèin, mar sin dh'fhaodadh sibh tachairt ri mearachdan air feadh an ùine seo.
|}
{{/Stadastaireachd}}
{{CànanaichEile}}
b25khiv7ps51nb0kikg9b5j1i8ypv9h
86322
86321
2026-07-22T11:41:24Z
Altronic
4137
Dh’atharraich ìre an dìon aig “[[Prìomh-Dhuilleag]]” ([Deasaich=Na ceadaich ach rianadairean] (buan) [Gluais=Na ceadaich ach rianadairean] (buan))
86321
wikitext
text/x-wiki
{| style="border: 0; background-color: #ffffff" cellpadding="0" cellspacing="10"
| style="width: 50%; vertical-align: top; border:1px solid #FFBC79; background-color: #ffffff" |
<div style="background-color:#FFE9D2; font-size:1px; height:8px; border-bottom:1px solid #FFBC79;"></div>
<div style="font: 13pt; font-weight:bold; padding:5px; border-bottom:1px solid #AAAAAA;">Fàilte gu Uicleir, am faclair saor.</div>
<div style="font-size:9pt; padding:5px">
Tha '''[[Sònraichte:Statistics|{{NUMBEROFARTICLES}}]]''' duilleagan deimhneidean anns an Uicleir seo.
</div>
|-
| width=48% style="border-bottom: 1px dashed #AAAAAA;" |
|-
| width=48% style="border-top: 1px dashed #AAAAAA;" |
|-
|Fàilte gu Uicleir, am faclair saor! 'S e faclair saor agus co-obrachail a th' ann, leis an amas a chruthachadh faclair a bhith a' mìneachadh a h-uile facal anns a h-uile cànan anns a' Ghàidhlig.
Ma tha Gàidhlig agaibhse, no tha fhios dhen cànan prògramachaidh lua agaibhse, cuidichibh sinn leis an fhaclair-sa!
''Nòta'': Tha sinn ag ùrachadh co-dhealbhachd nan duilleige agus na mòidealan aig an uicidh seo an-dràsta fhèin, mar sin dh'fhaodadh sibh tachairt ri mearachdan air feadh an ùine seo.
|}
{{/Stadastaireachd}}
{{CànanaichEile}}
b25khiv7ps51nb0kikg9b5j1i8ypv9h
86345
86322
2026-07-23T00:20:56Z
Altronic
4137
86345
wikitext
text/x-wiki
{| style="border: 0; background-color: #ffffff" cellpadding="0" cellspacing="10"
| style="width: 50%; vertical-align: top; border:1px solid #FFBC79; background-color: #ffffff" |
<div style="background-color:#FFE9D2; font-size:1px; height:8px; border-bottom:1px solid #FFBC79;"></div>
<div style="font: 13pt; font-weight:bold; padding:5px; border-bottom:1px solid #AAAAAA;">Fàilte gu Uicleir, am faclair saor.</div>
<div style="font-size:9pt; padding:5px">
Tha '''[[Sònraichte:Statistics|{{NUMBEROFARTICLES}}]]''' duilleagan deimhneidean anns an Uicleir seo.
</div>
|-
| width=48% style="border-bottom: 1px dashed #AAAAAA;" |
|-
| width=48% style="border-top: 1px dashed #AAAAAA;" |
|-
|Fàilte gu Uicleir, am faclair saor! 'S e faclair saor agus co-obrachail a th' ann, leis an amas a chruthachadh faclair a bhith a' mìneachadh a h-uile facal anns a h-uile cànan anns a' Ghàidhlig.
Ma tha Gàidhlig agaibhse, no ma tha fhios dhen cànan prògramachaidh lua agaibhse, cuidichibh sinn leis an fhaclair-sa!
''An Aire'': Tha sinn ag ùrachadh co-dhealbhachd nan duilleige agus na mòidealan aig an uicidh seo an-dràsta fhèin, mar sin dh'fhaodadh sibh tachairt ri mearachdan air feadh an ùine seo.
|}
{{/Stadastaireachd}}
{{CànanaichEile}}
drliywh7gh0dsp3sgnqnesxab2r7s7j
Wiktionary:Doras na coimhearsnachd
4
2270
86408
86099
2026-07-23T11:08:09Z
Altronic
4137
Earrann ùr /* Importer rights */
86408
wikitext
text/x-wiki
__NEWSECTIONLINK__
==2006 Sitewide Updates==
===February===
* Automatic capitalization for ''all'' Wiktionaries had been turned off.
==2007 Sitewide Updates==
'''''I'm keeping this in English for the moment as a large number of new editors don't have Scots Gaelic, including myself'''''
===August===
* Temporary sysop status obtained
* Cleaned up spam / junk
* Rangeblocks for spambots
* Got BotMultichill and VolkovBot up and running here.
* Organised bot bits on Meta.
===September===
* Began MediaWiki changes, moving updates from gd.wikipedia
* [[User:Kathryn NicDhàna]] joined :)
* Set up meta-compliant standard interwiki bot policy, with the help of [[User:Pathoschild]]
* MediaWiki 'A' complete
* All the default javascript and css entries have now been added. Monobook skin up to date.
* ''More to follow ....''
==Bot policy==
Hello. To facilitate [[m:steward|steward]] granting of bot access, I'd like to implement the [[m:Bot policy|standard bot policy]] on this wiki. This will involve creating a redirect to this page from [[Project:Bot policy]], and adding a line at the top noting that it is used here. In particular, this policy allows automatic acceptance of known interlanguage linking bots (if this page says that is acceptable), which form the vast majority of such requests.
Please read the text at [[m:Bot policy]] before commenting. If you object, please say so; it will be implemented in one week if there is no objection, since it is particularly written to streamline bot requests on wikis with little or no community interested in bot access requests. <small>—[[m:user:Pathoschild/s|Pathoschild]] 17:35, 15 September 2007 (UTC)</small>
==Betawiki: better support for your language in MediaWiki ==
Dear community. I am writing to you to promote a special wiki called [http://nike.users.idler.fi/betawiki Betawiki]. This wiki facilitates the localisation (l10n) of the MediaWiki interface. You may have changed many messages here to use your language in the interface, but if you would log in to for example the English language Wiktionary, you would not be able to use the interface as well translated as here. Infact, of the 1798 messages in the core of MediaWiki, 0 messages have been translated. Betawiki also supports the translation of messages of about 80 extensions, with almost 1000 messages.
If you wish to contribute to better support of your language in MediaWiki, as well as for many MediaWiki extensions, please visit [http://nike.users.idler.fi/betawiki/Translating:Intro Betawiki], [http://nike.users.idler.fi/dev/?title=Special:Userlogin&type=signup&uselang=en create an account] and [http://nike.users.idler.fi/betawiki/Betawiki:Rights request translator priviledges]. You can see the current status of localisation of your language on [[meta:Localization_statistics|meta]] and do not forget to get in touch with others that may already be [http://nike.users.idler.fi/betawiki/Translating:Languages working on your language on Betawiki].
If you have any further questions, [http://nike.users.idler.fi/betawiki/User_talk:Siebrand please let me know on my talk page on Betawiki]. We will try and assist you as much as possible, for example by importing all messages from a local wiki for you to start with, if you so desire.
You can also find us on the Freenode [[w:en:Internet Relay Chat|IRC]] network in the channel #mediawiki-i18n where we would be happy to help you get started.
Thank you very much for your attention and I do hope to see some of you on [http://nike.users.idler.fi/betawiki/Etusivu Betawiki] soon! Cheers! [http://nike.users.idler.fi/betawiki/User:Siebrand Siebrand@Betawiki]
== Logo Vote ==
The [[m:Wiktionary/logo/refresh/voting|Wiktionary logo vote]] is set to start '''2009-12-07 00:01'''. Any translations must be done before then. The first round will continue until '''2009-12-31 23:59''' at which point the second round will last until '''2010-01-31 23:59'''. Other Wiktionaries still need to be notified about the vote, so please help post messages into other Wiktionaries. Thank you - [[User:Alison|<span style="color:#FF823D;font-family: comic sans ms">'''A<font color= "#FF7C0A">l<font color= "#FFB550">is</font>o</font>n'''</span>]] <sup>[[User talk:Alison|❤]]</sup> 08:53, 25 an t-Samhain 2009 (UTC)
==Wikimania Scholarships==
The call for applications for Wikimania Scholarships to attend Wikimania 2010 in Gdansk, Poland (July 9-11) is now open. The Wikimedia Foundation offers Scholarships to pay for selected individuals' round trip travel, accommodations, and registration at the conference.
To apply, visit the [[wm2010:Main Page|Wikimania 2010]] [[wm2010:Scholarships|scholarships information page]], click the secure link available there, and fill out the form to apply.
For additional information, please visit the Scholarships information and FAQ pages:
* [[wm2010:Scholarships|Scholarships]]
* [[wm2010:Scholarships/FAQ|Scholarships FAQ]]
Yours very truly,
[[m:User:Cary Bass|Cary Bass]]</br>
Volunteer Coordinator</br>
Wikimedia Foundation
== Call for image filter referendum ==
The Wikimedia Foundation, at the direction of the Board of Trustees, will be holding a vote to determine whether members of the community support the creation and usage of an opt-in personal image filter, which would allow readers to voluntarily screen particular types of images strictly for their own account.
Further details and educational materials will be available shortly. The referendum is scheduled for 12-27 August, 2011, and will be conducted on servers hosted by a neutral third party. Referendum details, officials, voting requirements, and supporting materials will be posted at [[Meta:Image filter referendum]] shortly.
Sorry for delivering you a message in English. Please help translate the pages on the referendum on Meta and join the [[mail:translators-l|translators mailing list]].
For the coordinating committee,<br />
[[m:User:Philippe (WMF)|Philippe (WMF)]]<br />
[[m:User:Cbrown1023|Cbrown1023]]<br/>
[[m:User:Risker|Risker]]</br>
[[m:User:Mardetanha|Mardetanha]]<br/>
[[m:User:PeterSymonds|PeterSymonds]]<br/>
[[m:User:Robertmharris|Robert Harris]]
<!-- EdwardsBot 0089 -->
== Terms of Use update ==
''I apologize that you are receiving this message in English. Please help translate it.''
Hello,
The Wikimedia Foundation is discussing changes to its Terms of Use. The discussion can be found at [[m:Talk:Terms of use|Talk:Terms of use]]. Everyone is invited to join in. Because the new version of [[m:Terms of use|Terms of use]] is not in final form, we are not able to present official translations of it. Volunteers are welcome to translate it, as German volunteers have done at [[:m:Terms of use/de]], but we ask that you note at the top that the translation is unofficial and may become outdated as the English version is changed. The translation request can be found at [[m:Translation requests/WMF/Terms of Use 2]] -- [[m:User:Mdennis (WMF)|Maggie Dennis, Community Liaison]] 00:48, 27 dhen Dàmhair 2011 (UTC)
<!-- EdwardsBot 0119 -->
== Open Call for 2012 Wikimedia Fellowship Applicants ==
[[File:Wikimedia_Foundation_RGB_logo_with_text.svg|80px|right]]
''I apologize that you are receiving this message in English. Please
help translate it.''
*Do you want to help attract new contributors to Wikimedia projects?
*Do you want to improve retention of our existing editors?
*Do you want to strengthen our community by diversifying its base and increasing the overall number of excellent participants around the world?
The Wikimedia Foundation is seeking Community Fellows and project ideas for the Community Fellowship Program. A Fellowship is a temporary position at the Wikimedia Foundation in order to work on a specific project or set of projects. Submissions for 2012 are encouraged to focus on the theme of improving editor retention and increasing participation in Wikimedia projects. If interested, please submit a project idea or apply to be a fellow by January 15, 2012. Please visit https://meta.wikimedia.org/wiki/Wikimedia_Fellowships for more information.
Thanks!
--[[m:User:Sbouterse (WMF)|Siko Bouterse, Head of Community Fellowships,
Wikimedia Foundation]] 13:00, 21 dhen Dùbhlachd 2011 (UTC)
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Fix here]].)</small>
<!-- EdwardsBot 0139 -->
== Announcing Wikipedia 1.19 beta ==
Wikimedia Foundation is getting ready to push out 1.19 to all the WMF-hosted wikis. As we finish wrapping up our code review, you can test the new version ''right now'' on [http://beta.wmflabs.org/ beta.wmflabs.org]. For more information, please read the [https://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/RELEASE-NOTES-1.19?view=markup release notes] or the [[mw:MediaWiki_1.19|start of the final announcement]].
The following are the areas that you will probably be most interested in:
* [https://bugzilla.wikimedia.org/show_bug.cgi?id=33711#c2 Faster loading of javascript files makes dependency tracking more important.]
* New common*.css files usable by skins instead of having to copy piles of generic styles from MonoBook or Vector's css.
* The default user signature now contains a talk link in addition to the user link.
* Searching blocked usernames in block log is now clearer.
* Better timezone recognition in user preferences.
* Improved diff readability for colorblind people.
* The interwiki links table can now be accessed also when the interwiki cache is used (used in the API and the Interwiki extension).
* More gender support (for instance in logs and user lists).
* Language converter improved, e.g. it now works depending on the page content language.
* Time and number-formatting magic words also now depend on the page content language.
* Bidirectional support further improved after 1.18.
Report any [http://labs.wikimedia.beta.wmflabs.org/wiki/Problem_reports problems] on the labs beta wiki and we'll work to address them before they software is released to the production wikis.
'''Note''' that this cluster does have SUL but it is not integrated with SUL in production, so you'll need to create another account. You should avoid using the same password as you use here. — [[m:Global message delivery|Global message delivery]] 00:10, 15 dhen Fhaoilleach 2012 (UTC)
<!-- EdwardsBot 0145 -->
== MediaWiki 1.19 ==
(Apologies if this message isn't in your language.) The Wikimedia Foundation is planning to upgrade MediaWiki (the software powering this wiki) to its latest version this month. You can help to test it before it is enabled, to avoid disruption and breakage. More information is available [[:mw:MediaWiki 1.19/Deployment announcement|in the full announcement]]. Thank you for your understanding.
[[:m:user:guillom|Guillaume Paumier]], via the [[:m:Global message delivery|Global message delivery system]] <small>([[:m:Distribution list/Global message delivery|wrong page? You can fix it.]])</small>. 15:01, 12 dhen Ghearrain 2012 (UTC)
<!-- EdwardsBot 0154 -->
== Update on IPv6 ==
[[File:Wikimedia_Foundation_RGB_logo_with_text.svg|80px|right]]
(Apologies if this message isn't in your language. Please consider translating it, as well as '''[[m:Special:MyLanguage/IPv6 initiative/2012 IPv6 Day announcement|the full version of this announcement on Meta]]''')
The Wikimedia Foundation is planning to do limited testing of IPv6 on June 2-3. If there are not too many problems, we may fully enable IPv6 on [http://www.worldipv6day.org/ World IPv6 day] (June 6), and keep it enabled.
What this means for your project:
*At least on June 2-3, 2012, you may see a small number of edits from IPv6 addresses, which are in the form "<code>2001:0db8:85a3:0000:0000:8a2e:0370:7334</code>". See e.g. [[w:en:IPv6 address]]. These addresses should behave like any other IP address: You can leave messages on their talk pages; you can track their contributions; you can block them. (See [[m:Special:MyLanguage/IPv6 initiative/2012 IPv6 Day announcement|the full version of this announcement]] for notes on range blocks.)
*In the mid term, some user scripts and tools will need to be adapted for IPv6.
*We suspect that IPv6 usage is going to be very low initially, meaning that abuse should be manageable, and we will assist in the monitoring of the situation.
Read [[m:Special:MyLanguage/IPv6 initiative/2012 IPv6 Day announcement|the full version of this announcement]] on how to test the behavior of IPv6 with various tools and how to leave bug reports, and to find a fuller analysis of the implications of the IPv6 migration.
--[[m:User:Eloquence|Erik Möller, VP of Engineering and Product Development, Wikimedia Foundation]] 00:58, 2 dhen Ògmhios 2012 (UTC)
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Fix here]].)</small>
<!-- EdwardsBot 0201 -->
== 2011 Picture of the Year competition ==
<small>[[:commons:Commons:Picture of the Year/2011/Translations/mk|{{#language:mk}}]] • [[:commons:Commons:Picture of the Year/2011/Translations/no|{{#language:no}}]] • [[:commons:Commons:Picture of the Year/2011/Translations/pl|{{#language:pl}}]]</small>
Dear Wikimedians,
Wikimedia Commons is happy to announce that the ''2011 Picture of the Year competition'' is now open. We are interested in your opinion as to which images qualify to be the ''Picture of the Year 2011''. Any user registered at Commons or a Wikimedia wiki SUL-related to Commons [//toolserver.org/~pathoschild/accounteligibility/?user=&wiki=&event=24 with more than 75 edits before 1 April 2012 (UTC)] is welcome to vote and, of course everyone is welcome to view!
Detailed information about the contest can be found [[:commons:Commons:Picture of the Year/2011/Introduction|at the introductory page]].
About 600 of the best of Wikimedia Common's photos, animations, movies and graphics were chosen –by the international Wikimedia Commons community– out of 12 million files during ''2011'' and are now called ''Featured Pictures''.
From professional animal and plant shots to breathtaking panoramas and skylines, restorations of historically relevant images, images portraying the world's best architecture, maps, emblems, diagrams created with the most modern technology, and impressive human portraits, Commons ''Features Pictures'' of all flavors.
For your convenience, we have sorted the images [[:commons:Commons:Picture of the Year/2011/Galleries|into topic categories]].
We regret that you receive this message in English; we intended to use banners to notify you in your native language but there was both, human and technical resistance.
See you on Commons!
--[[:commons:Commons:Picture of the Year/2011/Committee|Picture of the Year 2011 Committee]] 18:18, 5 dhen Ògmhios 2012 (UTC)
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Fix here]].)</small>
<!-- EdwardsBot 0205 -->
== Mobile view as default view coming soon ==
[[File:Wikimedia_Foundation_RGB_logo_with_text.svg|80px|right]]
''(Apologies if this message isn't in your language. Please consider translating it, as well as the [[m:Special:MyLanguage/Mobile Projects/Mobile Gateway/Mobile homepage formatting|instructions on Meta]])''
The mobile view of this project and others will soon become the default view on mobile devices (except tablets). Some language versions of these projects currently show no content on the mobile home page, and it is a good time to do a little formatting so users get a mobile-friendly view, or to add to existing mobile content if some already exists.
If you are an administrator, please consider helping with this change. There are [[m:Mobile Projects/Mobile Gateway/Mobile homepage formatting|instructions]] which are being translated. The proposed date of switching the default view is June 21.
To contact the mobile team, email <tt>mobile-feedback-l[[File:At_sign.svg|17px]]lists.wikimedia.org</tt>.
--[[m:User:Pchang|Phil Inje Chang, Product Manager, Mobile, Wikimedia Foundation]] 08:29, 16 dhen Ògmhios 2012 (UTC)
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Fix here]].)</small>
<!-- EdwardsBot 0214 -->
== Help decide about more than $10 million of Wikimedia donations in the coming year ==
[[File:Wikimedia_Foundation_RGB_logo_with_text.svg|80px|right]]
''(Apologies if this message isn't in your language. Please consider translating it)''
Hi,
As many of you are aware, the Wikimedia Board of Trustees recently initiated important changes in the way that money is being distributed within the Wikimedia movement. As part of this, a new community-led "[[m:Funds_Dissemination_Committee/Framework_for_the_Creation_and_Initial_Operation_of_the_FDC|Funds Dissemination Committee]]" (FDC) is currently being set up. Already in 2012-13, its recommendations will guide the decisions about the distribution of over 10 million US dollars among the Foundation, chapters and other [[m:Funds_Dissemination_Committee/Framework_for_the_Creation_and_Initial_Operation_of_the_FDC#Eligible_fund-seeking_entities|eligible entities]].
Now, seven capable, knowledgeable and trustworthy community members are sought to volunteer on the initial Funds Dissemination Committee. It is expected to take up its work in September. In addition, a community member is sought to be the [[m:Funds_Dissemination_Committee/Framework_for_the_Creation_and_Initial_Operation_of_the_FDC#FDC_Ombudsperson|Ombudsperson]] for the FDC process. If you are interested in joining the committee, read the [[m:Funds Dissemination Committee/Call for Volunteers|call for volunteers]]. Nominations are planned to close on August 15.
--[[m:User:ASengupta_(WMF)|Anasuya Sengupta]], Director of Global Learning and Grantmaking, Wikimedia Foundation 20:05, 19 dhen Iuchar 2012 (UTC)
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Fix here]].)</small>
<!-- EdwardsBot 0223 -->
== Request for Comment: Legal Fees Assistance Program ==
[[File:Wikimedia_Foundation_RGB_logo_with_text.svg|80px|right]]
''I apologize for addressing you in English. I would be grateful if you could translate this message into your language.''
The Wikimedia Foundation is conducting a [[:m:Request_for_comment/Legal_Fees_Assistance_Program|request for comment]] on a [[:m:Legal_and_Community_Advocacy/Legal_Fees_Assistance_Program|proposed program]] that could provide legal assistance to users in specific support roles who are named in a legal complaint as a defendant because of those roles. We wanted to be sure that your community was aware of this discussion and would have a chance to participate in [[:m:Request_for_comment/Legal_Fees_Assistance_Program|that discussion]].
If this page is not the best place to publicize this request for comment, please help spread the word to those who may be interested in participating. (If you'd like to help translating the "request for comment", program policy or other pages into your language and don't know how the translation system works, please come by my user talk page at [[:m:User talk:Mdennis (WMF)]]. I'll be happy to assist or to connect you with a volunteer who can assist.)
Thank you! --[[:m:User:Mdennis (WMF)|Mdennis (WMF)]]01:56, 6 dhen t-Sultain 2012 (UTC)
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Fix here]].)</small>
<!-- EdwardsBot 0245 -->
== Wikidata is getting close to a first roll-out ==
[[File:Wikimedia_Foundation_RGB_logo_with_text.svg|80px|right]]
(Apologies if this message isn't in your language.)
As some of you might already have heard Wikimedia Deutschland is working on a new Wikimedia project. It is called [[m:Wikidata]]. The goal of Wikidata is to become a central data repository for the Wikipedias, its sister projects and the world. In the future it will hold data like the number of inhabitants of a country, the date of birth of a famous person or the length of a river. These can then be used in all Wikimedia projects and outside of them.
The project is divided into three phases and "we are getting close to roll-out the first phase". The phases are:
# language links in the Wikipedias (making it possible to store the links between the language editions of an article just once in Wikidata instead of in each linked article)
# infoboxes (making it possible to store the data that is currently in infoboxes in one central place and share the data)
# lists (making it possible to create lists and similar things based on queries to Wikidata so they update automatically when new data is added or modified)
It'd be great if you could join us, test the [http://wikidata-test.wikimedia.de demo version], provide feedback and take part in the development of Wikidata. You can find all the relevant information including an [[m:Wikidata/FAQ|FAQ]] and sign-up links for our on-wiki newsletter on [[m:Wikidata|the Wikidata page on Meta]].
For further discussions please use [[m:Talk:Wikidata|this talk page]] (if you are uncomfortable writing in English you can also write in your native language there) or point [[m:User_talk:Lydia Pintscher (WMDE)|me]] to the place where your discussion is happening so I can answer there.
--[[m:User:Lydia Pintscher (WMDE)|Lydia Pintscher]] 13:19, 10 dhen t-Sultain 2012 (UTC)
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Fix here]].)</small>
<!-- EdwardsBot 0248 -->
== Upcoming software changes - please report any problems ==
[[File:Wikimedia_Foundation_RGB_logo_with_text.svg|80px|right]]
<div dir=ltr>
''(Apologies if this message isn't in your language. Please consider translating it)''
All Wikimedia wikis - including this one - will soon be upgraded with new and possibly disruptive code. This process starts today and finishes on October 24 (see the [[mw:MediaWiki_1.21/Roadmap|upgrade schedule]] & [[mw:MediaWiki 1.21/wmf2|code details]]).
Please watch for problems with:
* revision diffs
* templates
* CSS and JavaScript pages (like user scripts)
* bots
* PDF export
* images, video, and sound, especially scaling sizes
* the CologneBlue skin
If you notice any problems, please [[mw:How to report a bug|report problems]] at [[mw:Bugzilla|our defect tracker site]]. You can test for possible problems at [https://test2.wikipedia.org test2.wikipedia.org] and [https://mediawiki.org/ mediawiki.org], which have already been updated.
Thanks! With your help we can find problems fast and get them fixed faster.
[[mw:User:Sharihareswara (WMF)|Sumana Harihareswara, Wikimedia Foundation Engineering Community Manager]] ([[mw:User talk:Sharihareswara (WMF)|talk]]) 02:54, 16 dhen Dàmhair 2012 (UTC)
P.S.: For the regular, smaller MediaWiki updates every two weeks, please [[mw:MediaWiki_1.21/Roadmap|watch this schedule]].
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Fix here]].)</small>
</div>
<!-- EdwardsBot 0278 -->
== Fundraising localization: volunteers from outside the USA needed ==
''Please translate for your local community''
Hello All,
The Wikimedia Foundation's Fundraising team have begun our 'User Experience' project, with the goal of understanding the donation experience in different countries outside the USA and enhancing the localization of our donation pages. I am searching for volunteers to spend 30 minutes on a Skype chat with me, reviewing their own country's donation pages. It will be done on a 'usability' format (I will ask you to read the text and go through the donation flow) and will be asking your feedback in the meanwhile.
The only pre-requisite is for the volunteer to actually live in the country and to have access to at least one donation method that we offer for that country (mainly credit/debit card, but also real-time banking like IDEAL, E-wallets, etc...) so we can do a live test and see if the donation goes through. ''All volunteers will be reimbursed of the donations that eventually succeed'' (and they will be low amounts, like 1-2 dollars)
By helping us you are actually helping thousands of people to support our mission of free knowledge across the world. Please sing up and help us with our 'User Experience' project! :)
If you are interested (or know of anyone who could be) please email ppena@wikimedia.org. All countries needed (excepting USA)!
Thanks!<br />
[[wmf:User:Ppena|Pats Pena]]<br />
Global Fundraising Operations Manager, Wikimedia Foundation
Sent using [[m:Global message delivery|Global message delivery]], 16:59, 17 dhen Dàmhair 2012 (UTC)
<!-- EdwardsBot 0280 -->
== Localise your wiki logo ==
[[File:Wiktionary-logo.svg|thumb|The official localisable Wiktionary logo]]
Hello! It was noted that Wiktionary in this language has not yet adopted a localised/translated logo: it's really a pity for a dictionary project!<br />
We are trying to help Wiktionaries adopt a locally-adapted logo, by taking the technical difficulties on us. What we need from you is just the preferred translation of the name and motto, "Wiktionary" (if translated) and "The free dictionary": you can add them to [[m:User:Cbrown1023/Logos#Wiktionary|the logo list]], by editing it directly or commenting on the talk page; you can also add a note if you don't want the localised logo.<br />
Of course, you can also create the logo and make the necessary requests on [[m:Bugzilla|bugzilla]] yourself, if you prefer so.<br />
Feel free to translate this message and to move/copy/forward it where appropriate; you can also reply on [[m:User talk:Nemo_bis|my talk]]. Thanks, [[m:User:Nemo_bis|Nemo]] 15:32, 3 dhen t-Samhain 2012 (UTC)
<!-- EdwardsBot 0290 -->
== Localise your wiki logo ==
[[File:Wiktionary-logo.svg|thumb|The official localisable Wiktionary logo]]
Hello! It was noted that Wiktionary in this language has not yet adopted a localised/translated logo: it's really a pity for a dictionary project!<br />
We are trying to help Wiktionaries adopt a locally-adapted logo, by taking the technical difficulties on us. What we need from you is just the preferred translation of the name and motto, "Wiktionary" (if translated) and "The free dictionary": you can add them to [[m:User:Cbrown1023/Logos#Wiktionary|the logo list]], by editing it directly or commenting on the talk page; you can also add a note if you don't want the localised logo.<br />
Of course, you can also create the logo and make the necessary requests on [[m:Bugzilla|bugzilla]] yourself, if you prefer so.<br />
Feel free to translate this message and to move/copy/forward it where appropriate; you can also reply on [[m:User talk:Nemo_bis|my talk]]. Thanks, [[m:User:Nemo_bis|Nemo]] 15:56, 3 dhen t-Samhain 2012 (UTC)
<!-- EdwardsBot 0291 -->
:Hi! This post was before my time. I am currently the only consisten editor on this Wiktionary. I've updated your page with our translated Wiktionary name. I wish I'd seen this years ago because that partially customized logo has always bothered me. Cheers, [[Cleachdaiche:Kibi78704|Kibi78704]] ([[Deasbaireachd a' chleachdaiche:Kibi78704|an deasbaireachd]]) 19:57, 1 dhen Chèitean 2020 (UTC)
== Be a Wikimedia fundraising "User Experience" volunteer! ==
Thank you to everyone who volunteered last year on the Wikimedia fundraising 'User Experience' project. We have talked to many different people in different countries and their feedback has helped us immensely in restructuring our pages. If you haven't heard of it yet, the 'User Experience' project has the goal of understanding the donation experience in different countries (outside the USA) and enhancing the localization of our donation pages.
I am (still) searching for volunteers to spend some time on a Skype chat with me, reviewing their own country's donation pages. It will be done on a 'usability' format (I will ask you to read the text and go through the donation flow) and will be asking your feedback in the meanwhile.
The only pre-requisite is for the volunteer to actually live in the country and to have access to at least one donation method that we offer for that country (mainly credit/debit card, but also real time banking like IDEAL, E-wallets, etc...) so we can do a live test and see if the donation goes through. **All volunteers will be reimbursed of the donations that eventually succeed (and they will be very low amounts, like 1-2 dollars)**
By helping us you are actually helping thousands of people to support our mission of free knowledge across the world. If you are interested (or know of anyone who could be) please email ppena@wikimedia.org. All countries needed (excepting USA)!!
Thanks!
[[m:User:Ppena (WMF)|Pats Pena]]<br/>
Global Fundraising Operations Manager, Wikimedia Foundation
: Sent using [[m:Global message delivery|Global message delivery]], 20:53, 8 dhen Fhaoilleach 2013 (UTC)
<!-- EdwardsBot 331 -->
== Wikimedia sites to move to primary data center in Ashburn, Virginia. Read-only mode expected. ==
(Apologies if this message isn't in your language.) Next week, the Wikimedia Foundation will transition its main technical operations to a new data center in Ashburn, Virginia, USA. This is intended to improve the technical performance and reliability of all Wikimedia sites, including this wiki. There will be some times when the site will be in read-only mode, and there may be full outages; the current target windows for the migration are January 22nd, 23rd and 24th, 2013, from 17:00 to 01:00 UTC (see [http://www.timeanddate.com/worldclock/fixedtime.html?msg=Wikimedia+data+center+migration&iso=20130122T17&ah=8 other timezones] on timeanddate.com). More information is available [https://blog.wikimedia.org/2013/01/19/wikimedia-sites-move-to-primary-data-center-in-ashburn-virginia/ in the full announcement].
If you would like to stay informed of future technical upgrades, consider [[m:Tech/Ambassadors|becoming a Tech ambassador]] and [https://lists.wikimedia.org/mailman/listinfo/wikitech-ambassadors joining the ambassadors mailing list]. You will be able to help your fellow Wikimedians have a voice in technical discussions and be notified of important decisions.
Thank you for your help and your understanding.
[[:m:user:guillom|Guillaume Paumier]], via the [[:m:Global message delivery|Global message delivery system]] <small>([[:m:Distribution list/Global message delivery|wrong page? You can fix it.]])</small>. 15:17, 19 dhen Fhaoilleach 2013 (UTC)
<!-- EdwardsBot 0338 -->
== Picture of the Year voting round 1 open ==
Dear Wikimedians,
Wikimedia Commons is happy to announce that the 2012 Picture of the Year competition is now open. We're interested in your opinion as to which images qualify to be the Picture of the Year for 2012. Voting is open to established Wikimedia users who meet the following criteria:
:# Users must have an account, at any Wikimedia project, which was registered '''before Tue, 01 Jan 2013 00:00:00 +0000''' [UTC].
:# This user account must have more than '''75 edits''' on '''any single''' Wikimedia project '''before Tue, 01 Jan 2013 00:00:00 +0000''' [UTC]. Please check your account eligibility at the [//toolserver.org/~pathoschild/accounteligibility/?user=&wiki=&event=27 POTY 2012 Contest Eligibility tool].
:# Users must vote with an account meeting the above requirements either on Commons or another SUL-related Wikimedia project (for other Wikimedia projects, the account must be attached to the user's Commons account through [[meta:Help:Unified login|SUL]]).
Hundreds of images that have been rated Featured Pictures by the international Wikimedia Commons community in the past year are all entered in this competition. From professional animal and plant shots to breathtaking panoramas and skylines, restorations of historically relevant images, images portraying the world's best architecture, maps, emblems, diagrams created with the most modern technology, and impressive human portraits, Commons features pictures of all flavors.
For your convenience, we have sorted the images into topic categories. Two rounds of voting will be held: In the first round, you can vote for as many images as you like. The first round category winners and the top ten overall will then make it to the final. In the final round, when a limited number of images are left, you must decide on the one image that you want to become the Picture of the Year.
To see the candidate images just go to [[commons:Commons:Picture_of_the_Year/2012|the POTY 2012 page on Wikimedia Commons]].
Wikimedia Commons celebrates our featured images of 2012 with this contest. Your votes decide the Picture of the Year, so remember to vote in the first round by '''January 30, 2013'''.
Thanks,<br />
the Wikimedia Commons Picture of the Year committee<br />
<small>This message was delivered based on [[:m:Distribution list/Global message delivery]]. Translation fetched from: [[:commons:Commons:Picture of the Year/2012/Translations/Village Pump/en]] -- [[Cleachdaiche:Rillke|Rillke]] ([[Deasbaireachd a' chleachdaiche:Rillke|talk]]) 23:48, 22 dhen Fhaoilleach 2013 (UTC)</small>
== Help turn ideas into grants in the new IdeaLab ==
<div class="mw-content-ltr">
[[File:Wikimedia_Foundation_RGB_logo_with_text.svg|80px|right]]
''I apologize if this message is not in your language. Please help translate it.''
*Do you have an idea for a project to improve this community or website?
*Do you think you could complete your idea if only you had some funding?
*Do you want to help other people turn their ideas into project plans or grant proposals?
Please join us in the [[m:Grants:IdeaLab|IdeaLab]], an incubator for project ideas and Individual Engagement Grant proposals.
The Wikimedia Foundation is seeking new ideas and proposals for Individual Engagement Grants. These grants fund individuals or small groups to complete projects that help improve this community. If interested, please submit a completed proposal by February 15, 2013. Please visit https://meta.wikimedia.org/wiki/Grants:IEG for more information.
Thanks! --[[m:User:Sbouterse (WMF)|Siko Bouterse, Head of Individual Engagement Grants, Wikimedia Foundation]] 20:25, 30 dhen Fhaoilleach 2013 (UTC)
<small>Distributed via [[m:Global message delivery|Global message delivery]]. (Wrong page? [[m:Distribution list/Global message delivery|Correct it here]].)</small>
</div>
<!-- EdwardsBot 0344 -->
== Convert complex templates to Lua to make them faster and more powerful ==
<small>(Please consider translating this message for the benefit of your fellow Wikimedians)</small>
Greetings. As you might have seen on the [https://blog.wikimedia.org/2013/03/11/lua-templates-faster-more-flexible-pages/ Wikimedia tech blog] or the [http://lists.wikimedia.org/pipermail/wikitech-ambassadors/2013-March/000171.html tech ambassadors list], a new functionality called "Lua" is being enabled on all Wikimedia sites today. [[mw:Lua|Lua]] is a scripting language that enables you to write faster and more powerful MediaWiki templates.
If you have questions about how to convert existing templates to Lua (or how to create new ones), we'll be holding two support sessions on IRC next week: [http://www.timeanddate.com/worldclock/fixedtime.html?hour=02&min=00&sec=0&day=20&month=03&year=2013 one on Wednesday] (for Oceania, Asia & America) and [http://www.timeanddate.com/worldclock/fixedtime.html?hour=18&min=00&sec=0&day=22&month=03&year=2013 one on Friday] (for Europe, Africa & America); see [[m:IRC office hours]] for the details. If you can't make it, you can also get help at [[mw:Talk:Lua scripting]].
If you'd like to learn about this kind of events earlier in advance, consider becoming a [[m:Tech/Ambassadors|Tech ambassador]] by subscribing to the [https://lists.wikimedia.org/mailman/listinfo/wikitech-ambassadors mailing list]. You will also be able to help your fellow Wikimedians have a voice in technical discussions and be notified of important decisions.
[[:m:user:guillom|Guillaume Paumier]], via the [[:m:Global message delivery|Global message delivery system]]. 19:38, 13 dhen Mhàrt 2013 (UTC) <small>([[:m:Distribution list/Global message delivery|wrong page? You can fix it.]])</small>
<!-- EdwardsBot 0379 -->
== Proposal of a pronunciation recording tool ==
<div class="mw-content-ltr">
Hello, [[mw:User:Rahul21|Rahul21]], a developer, offers to develop a pronunciation recording tool for Wiktionary, helped by [[m:User:Mdale|Michael Dale]] as part of [[mw:Summer of Code 2013|GSoC]]. The tool would allow to record and add audio pronunciations to Wiktionary entries while browsing them (see [http://thread.gmane.org/gmane.org.wikimedia.wiktionary/1265 background discussion on Wiktionary-l]).
Please [[mw:User:Rahul21/Gsoc|read and comment the proposal]]!
Regards, [[m:User:Nemo_bis|Nemo]] 22:38, 9 dhen Ghiblean 2013 (UTC)
</div>
<!-- EdwardsBot 0402 -->
== [[m:Requests for comment/Activity levels of advanced administrative rights holders|Request for comment on inactive administrators]] ==
<small>(Please consider translating this message for the benefit of your fellow Wikimedians. Please also consider translating [[m:Requests for comment/Activity levels of advanced administrative rights holders/Summary|the proposal]].)</small>
<small>[[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message|Read this message in English]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/ast|Lleer esti mensaxe n'asturianu]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/bn|বাংলায় এই বার্তাটি পড়ুন]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/ca|Llegiu aquest missatge en català]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/da|Læs denne besked på dansk]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/de|Lies diese Nachricht auf Deutsch]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/egl|Leś cal mesag' chè in Emiliàn]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/es|Leer este mensaje en español]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/fi|Lue tämä viesti suomeksi]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/fr|Lire ce message en français]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/gl|Ler esta mensaxe en galego]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/hi|हिन्दी]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/hr|Pročitajte ovu poruku na hrvatskom]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/id|Baca pesan ini dalam Bahasa Indonesia]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/it|Leggi questo messaggio in italiano]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/kn|ಈ ಸಂದೇಶವನ್ನು ಕನ್ನಡದಲ್ಲಿ ಓದಿ]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/mt|Aqra dan il-messaġġ bil-Malti]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/nb|norsk (bokmål)]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/nl|Lees dit bericht in het Nederlands]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/pl|Przeczytaj tę wiadomość po polsku]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/ro|Citiți acest mesaj în română]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/ru|Прочитать это сообщение на русском]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/so|Farriintaan ku aqri Af-Soomaali]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/sr|Pročitaj ovu poruku na srpskom (Прочитај ову поруку на српском)]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/th|อ่านข้อความนี้ในภาษาไทย]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/uk|Прочитати це повідомлення українською мовою]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/vi|Đọc thông báo bằng tiếng Việt]] / [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message/zh|使用中文阅读本信息。]]</small>
Hello!
There is [[m:Requests for comment/Activity levels of advanced administrative rights holders|a new request for comment]] on Meta-Wiki concerning the removal of administrative rights from long-term inactive Wikimedians. Generally, this proposal from stewards would apply to wikis without an administrators' review process.
We are also compiling a [[m:Talk:Requests for comment/Activity levels of advanced administrative rights holders|list of projects]] with procedures for removing inactive administrators on the talk page of the request for comment. Feel free to add your project(s) to the list if you have a policy on administrator inactivity.
All input is appreciated. The discussion may close as soon as 21 May 2013 (2013-05-21), but this will be extended if needed.
Thanks, [[m:User:Billinghurst|Billinghurst]] <small>(thanks to all the [[m:Requests for comment/Activity levels of advanced administrative rights holders/Global message|translators]]!)</small> 04:41, 24 dhen Ghiblean 2013 (UTC)
:<small>Distributed via [[m:Global message delivery|Global message delivery]] (Wrong page? [[m:Distribution list/Global message delivery|You can fix it]].)</small>
<!-- EdwardsBot 0430 -->
== [en] Change to wiki account system and account renaming ==
<div class="mw-content-ltr">
Some accounts will soon be renamed due to a technical change that the developer team at Wikimedia are making. [[m:Single User Login finalisation announcement|More details on Meta]].
<small>(Distributed via [[m:global message delivery|global message delivery]] 03:37, 30 dhen Ghiblean 2013 (UTC). Wrong page? [[m:Distribution list/Global message delivery|Correct it here]].)</small>
</div>
<!-- EdwardsBot 0437 -->
== [en] Change to section edit links ==
<div class="mw-content-ltr">
The default position of the "edit" link in page section headers is going to change soon. The "edit" link will be positioned adjacent to the page header text rather than floating opposite it.
Section edit links will be to the immediate right of section titles, instead of on the far right. If you're an editor of one of the wikis which already implemented this change, nothing will substantially change for you; however, scripts and gadgets depending on the previous implementation of section edit links will have to be adjusted to continue working; however, nothing else should break even if they are not updated in time.
[[m:Change to section edit links|Detailed information and a timeline]] is available on meta.
Ideas to do this all the way to 2009 at least. It is often difficult to track which of several potential section edit links on the far right is associated with the correct section, and many readers and anonymous or new editors may even be failing to notice section edit links at all, since they read section titles, which are far away from the links.
<small>(Distributed via [[m:global message delivery|global message delivery]] 18:27, 30 dhen Ghiblean 2013 (UTC). Wrong page? [[m:Distribution list/Global message delivery|Correct it here]].)</small>
</div>
<!-- EdwardsBot 0438 -->
== Tech newsletter: Subscribe to receive the next editions ==
<div style="width:auto; padding: 1em; background:#fdf6e3;" class="plainlinks" ><big>Latest '''[[m:Tech/News|<span style="color:#268bd2;">Tech news</span>]]''' from the Wikimedia technical community.</big> ''Please inform other users about these changes.''</div>
<div style="width:auto; padding: 1em; border: 2px solid #fdf6e3;" class="plainlinks" >
;Recent software changes: ''(Not all changes will affect you.)''
* The latest version of MediaWiki (version [[mw:MediaWiki 1.22/wmf4|1.22/wmf4]]) was added to non-Wikipedia wikis on May 13, and to the English Wikipedia (with a Wikidata software update) on May 20. It will be updated on all other Wikipedia sites on May 22. [https://gerrit.wikimedia.org/r/gitweb?p=operations/mediawiki-config.git;a=commitdiff;h=ed976cf0c14fa3632fd10d9300bb646bfd6fe751;hp=c6c7bb1e5caaddf7325de9eef0e7bf85bcf5cc35] [http://lists.wikimedia.org/pipermail/wikitech-l/2013-May/069458.html]
* A software update will perhaps result in temporary issues with images. Please [[m:Tech/Ambassadors|report any problems]] you notice. [http://lists.wikimedia.org/pipermail/wikitech-l/2013-May/069458.html]
* MediaWiki recognizes links in twelve new [[:w:en:URI scheme|schemes]]. Users can now link to [[:w:en:SSH|SSH]], [[:w:en:XMPP|XMPP]] and [[:w:en:Bitcoin|Bitcoin]] directly from wikicode. [https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git;a=commitdiff;h=a89d623302b5027dbb2d06941a22372948757685]
* VisualEditor was added to [[bugzilla:48430|all content namespaces]] on mediawiki.org on May 20. [http://lists.wikimedia.org/pipermail/wikitech-l/2013-May/069458.html]
* A new extension ("TemplateData") was added to all Wikipedia sites on May 20. It will allow a future version of VisualEditor to [[bugzilla:44444|edit templates]]. [http://lists.wikimedia.org/pipermail/wikitech-l/2013-May/069458.html]
* New sites: [[:voy:el:|Greek Wikivoyage]] and [[:wikt:vec:|Venetian Wiktionary]] joined the Wikimedia family last week; the total number of project wikis is now 794. [https://gerrit.wikimedia.org/r/gitweb?p=operations/mediawiki-config.git;a=commit;h=5d7536b403730bb502580e21243f923c3b79da0e] [https://gerrit.wikimedia.org/r/gitweb?p=operations/mediawiki-config.git;a=commit;h=43c9eebdfc976333be5c890439ba1fae3bef46f7]
* The logo of 18 Wikipedias was changed to [[w:en:Wikipedia:Wikipedia_logos#The_May_2010_logo|version 2.0]] in a [http://lists.wikimedia.org/pipermail/wikimedia-l/2013-May/125999.html third group of updates]. [https://gerrit.wikimedia.org/r/gitweb?p=operations/mediawiki-config.git;a=commitdiff;h=4688adbe467440eea318eecf04839fdd9ffa0565]
* The [[:commons:Special:UploadWizard|UploadWizard]] on Commons now shows links to the old upload form in 55 languages ([[:bugzilla:33513|bug 33513]]). [https://gerrit.wikimedia.org/r/gitweb?p=operations/mediawiki-config.git;a=commit;h=4197fa18a22660296d0e5b84820d5ebb4cef46d4]
;Future software changes:
* The next version of MediaWiki (version 1.22/wmf5) will be added to Wikimedia sites starting on May 27. [http://lists.wikimedia.org/pipermail/wikitech-l/2013-May/069458.html]
* An updated version of [[mw:Echo (Notifications)|Notifications]], with new features and fewer bugs, will be added to the English Wikipedia on May 23. [http://lists.wikimedia.org/pipermail/wikitech-l/2013-May/069458.html]
* The [[m:Special:MyLanguage/Single User Login finalisation announcement|final version]] of the "single user login" (which allows people to use the same username on different Wikimedia wikis) is moved to August 2013. The software will [http://lists.wikimedia.org/pipermail/wikitech-ambassadors/2013-April/000217.html automatically rename] some usernames. [http://lists.wikimedia.org/pipermail/wikitech-ambassadors/2013-May/000233.html]
* A [[m:Special:MyLanguage/Flow|new discussion system]] for MediaWiki, called "Flow", is under development. Wikimedia designers need your help to inform other users, [http://unicorn.wmflabs.org/flow/ test the prototype] and discuss the interface. [http://lists.wikimedia.org/pipermail/wikitech-l/2013-May/069433.html].
* The Wikimedia Foundation is hiring people to act as links between software developers and users for VisualEditor. [http://lists.wikimedia.org/pipermail/wikitech-ambassadors/2013-May/000245.html]
</div>
<div style="font-size:90%; font-style:italic; background:#fdf6e3; padding:1em;">'''[[m:Tech/News|Tech news]]''' prepared by [[m:Tech/Ambassadors|tech ambassadors]] and posted by [[m:Global message delivery|Global message delivery]] • [[m:Tech/News#contribute|Contribute]] • [[m:Tech/News/2013/21|Translate]] • [[m:Tech|Get help]] • [[m:Talk:Tech/News|Give feedback]] • [[m:Global message delivery/Targets/Tech ambassadors|Unsubscribe]] • 20:35, 20 dhen Chèitean 2013 (UTC)
</div>
<div style="float:left; background:#eee8d5; border: .2em solid #dc322f; border-left: .7em solid #dc322f; padding: 1em; "><span style="color:#dc322f;font-weight:bold;">Important note:</span> This is the first edition of the [[m:Tech/News|Tech News]] weekly summaries, which help you monitor recent software changes likely to impact you and your fellow Wikimedians.
'''If you want to continue to receive the next issues every week''', please '''[[m:Global message delivery/Targets/Tech ambassadors|subscribe to the newsletter]]'''. You can subscribe your personal talk page and a community page like this one. The newsletter can be [[m:Tech/News/2013/21|translated into your language]].
You can also [[m:Tech/Ambassadors|become a tech ambassador]], [[m:Tech/News|help us write the next newsletter]] and [[m:Talk:Tech/News|tell us what to improve]]. Your feedback is greatly appreciated. [[m:user:guillom|guillom]] 20:35, 20 dhen Chèitean 2013 (UTC)</div>
<!-- EdwardsBot 0455 -->
== Trademark discussion ==
Hi, apologies for posting this in English, but I wanted to alert your community to a discussion on Meta about potential changes to the Wikimedia Trademark Policy. Please translate this statement if you can. We hope that you will all participate in the discussion; we also welcome translations of the legal team’s statement into as many languages as possible and encourage you to voice your thoughts there. Please see the [[:m:Trademark practices discussion|Trademark practices discussion (on Meta-Wiki)]] for more information. Thank you! --[[:m:User:Mdennis_(WMF)|Mdennis (WMF)]] ([[:m:User talk:Mdennis_(WMF)|talk]])
<!-- EdwardsBot 0473 -->
== [[:m:Requests_for_comment/X!'s_Edit_Counter|X!'s Edit Counter]] ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
<small>(Sorry for writing in English. You can [[:m:Special:MyLanguage/Requests_for_comment/X!%27s_Edit_Counter/Summary|translate the proposal]].)</small>
Should [[tools:~tparis/pcount|X!'s edit counter]] retain the opt-in requirement? Your input is strongly encouraged. [[:m:Requests_for_comment/X!'s_Edit_Counter|Voice your input here]].—[[:m:w:User:Cyberpower678|<span style="color:green;font-family:Neuropol">cyberpower]] [[:m:w:User talk:Cyberpower678|<sup style="color:purple;font-family:arnprior">Chat]]<sub style="margin-left:-4.4ex;color:purple;font-family:arnprior">Automation</sub> 04:28, 23 dhen Ògmhios 2013 (UTC)
:<small>Distributed via [[:m:Global message delivery|Global message delivery]]. (Wrong page? [[:m:Distribution list/Global message delivery|Fix here]].)</small>
</div>
<!-- EdwardsBot 0505 -->
== Universal Language Selector will be enabled on 2013-07-09 ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
On July 9, 2013, [[mw:Universal Language Selector|Universal Language Selector]] (ULS) will be enabled on this wiki. The ULS provides a flexible way to configure and deliver language settings like interface language, fonts, and input methods (keyboard mappings). Making it available here is the last phase of making ULS available on all Wikimedia wikis.
Please read the announcement on [[m:Announcement Universal Language Selector|Meta-Wiki]] for more information. [[m:User_talk:Siebrand|Siebrand]] 12:28, 4 dhen Iuchar 2013 (UTC) <small>(via [[m:Global message delivery|Global message delivery]]).</small>
</div>
<!-- EdwardsBot 0515 -->
== Pywikipedia is migrating to git ==
Hello, Sorry for English but It's very important for bot operators so I hope someone translates this.
[[mw:PWB|Pywikipedia]] is migrating to Git so after July 26, SVN checkouts won't be updated If you're using Pywikipedia you have to switch to git, otherwise you will use out-dated framework and your bot might not work properly. There is a [[mw:Manual:Pywikipediabot/Gerrit|manual]] for doing that and a [https://blog.wikimedia.org/2013/07/23/pywikipediabot-moving-to-git-on-july-26/ blog post] explaining about this change in non-technical language. If you have question feel free to ask in [[mw:Manual talk:Pywikipediabot/Gerrit]], [https://lists.wikimedia.org/mailman/listinfo/pywikipedia-l mailing list], or in the [irc://irc.freenode.net/#pywikipediabot IRC channel]. Best [[mw:User:Ladsgroup|Amir]] <small>(via [[m:Global message delivery|Global message delivery]]).</small> 13:14, 23 dhen Iuchar 2013 (UTC)
<!-- EdwardsBot 0534 -->
== HTTPS for users with an account ==
Greetings. Starting on August 21 (tomorrow), all users with an account will be using [[m:w:en:HTTPS|HTTPS]] to access Wikimedia sites. HTTPS brings better security and improves your privacy. More information is available at [[m:HTTPS]].
If HTTPS causes problems for you, tell us [https://bugzilla.wikimedia.org on bugzilla], [[m:IRC|on IRC]] (in the <code>#wikimedia-operations</code> channel) or [[m:Talk:HTTPS|on meta]]. If you can't use the other methods, you can also send an e-mail to <code>https@wikimedia.org</code>.
[[m:User:Greg (WMF)|Greg Grossmeier]] <small>(via the [[m:Global message delivery|Global message delivery]] system)</small>. 19:06, 20 An Lùnastal 2013 (UTC) <small>(wrong page? [[m:Distribution list/Global message delivery|You can fix it.]])</small>
<!-- EdwardsBot 0560 -->
== Iomraidhean (references) ==
Bu mhath leam iomraidean a chur sìos. Chì mi nach eil duilleag (no 'tab') fa lath ann airson iomraidhean. Mar sin, chuir mi an iomradh a bh'agam airson 'cabhlach' air an duilleag 'cabhlach'. Chan fhios 'am dè eile a dhèanainn. [[Cleachdaiche:Thisissusanbell|Thisissusanbell]] ([[Deasbaireachd a' chleachdaiche:Thisissusanbell|talk]]) 10:32, 18 dhen t-Sultain 2013 (UTC)
== [[:m:Community Logo/Request for consultation|Request for consultation on community logo]] ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
[[File:Wikimedia Community Logo.svg|thumb|Request for consultation on this community logo]]
First, I’d like to apologize for the English. If you can, please help to translate this for other members of your community.
The legal team at the Wikimedia Foundation would greatly appreciate your input on the best way to manage the "community logo" (pictured here) to best balance protection of the projects with community support. Accordingly, they have created a “request for consultation” on Meta where they set out briefly some of the issues to be considered and the options that they perceive. [[:m:Community Logo/Request for consultation|Your input would be invaluable]] in helping guide them in how best to serve our mission.
Thank you! --[[m:User:Mdennis|Mdennis]] ([[m:User talk:Mdennis|talk]]) <small>(via the [[m:Global message delivery|Global message delivery]] system)</small>. 02:28, 24 dhen t-Sultain 2013 (UTC) <small>(wrong page? [[m:Distribution list/Global message delivery|You can fix it.]])</small>
</div>
<!-- EdwardsBot 0590 -->
== [[mw:Echo|Notifications]] ==
[[File:Notifications-Flyout-Screenshot-08-10-2013-Cropped.png|thumb|300px|Notifications inform you of new activity that affects you -- and let you take quick action.]]
''(This message is in English, please translate as needed)''
Greetings!
[[mw:Echo|Notifications]] will inform users about new activity that affects them on this wiki in a unified way: for example, this new tool will let you know when you have new talk page messages, edit reverts, mentions or links -- and is designed to augment (rather than replace) the watchlist. The Wikimedia Foundation's editor engagement team developed this tool (code-named 'Echo') earlier this year, to help users contribute more productively to MediaWiki projects.
We're now getting ready to bring Notifications to almost all other Wikimedia sites, and are aiming for a 22 October deployment, as outlined in [[mw:Echo/Release_Plan_2013|this release plan]]. It is important that notifications is translated for all of the languages we serve.
There are three major points of translation needed to be either done or checked:
*[https://translatewiki.net/w/i.php?title=Special%3AMessageGroupStats&x=D&group=ext-echo#sortable:3=desc Echo on translatewiki for user interface] - you must have an account on translatewiki to translate
*[https://translatewiki.net/w/i.php?title=Special%3AMessageGroupStats&x=D&group=ext-thanks#sortable:3=desc Thanks on translatewiki for user interface] - you must have an account on translatewiki to translate
*[[mw:Help:Notifications|Notifications help on mediawiki.org]]. This page can be hosted after translation on mediawiki.org or we can localize it to this Wikipedia. You do not have to have an account to translate on mediawiki, but single-user login will create it for you there if you follow the link.
:*[[mw:Echo/Release Plan 2013#Checklist|Checklist]]
Please let us know if you have any questions, suggestions or comments about this new tool. For more information, visit [[mw:Echo_(Notifications)|this project hub]] and [[mw:Help:Notifications|this help page]]. [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 18:35, 4 dhen Dàmhair 2013 (UTC)
:<small>(via the [[m:Global message delivery|Global message delivery]] system) (wrong page? [[m:Distribution list/Global message delivery|You can fix it.]])</small>
<!-- EdwardsBot 0597 -->
== Speak up about the trademark registration of the Community logo. ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hi all,
Please join the consultation about the Community logo that represents Meta-Wiki: [[:m:Community Logo/Request for consultation]].
This community consultation was commenced on September 24. The following day, two individuals filed a legal opposition against the registration of the Community logo.
The question is whether the Wikimedia Foundation should seek a collective membership mark with respect to this logo or abandon its registration and protection of the trademark.
We want to make sure that everyone get a chance to speak up so that we can get clear direction from the community. We would therefore really appreciate the community's help in translating this announcement from English so that everyone is able to understand it.
Thanks,
[[m:User:Geoffbrigham|Geoff]] & [[m:User:YWelinder (WMF)|Yana]] 20:08, 8 dhen Dàmhair 2013 (UTC)
</div>
<!-- EdwardsBot 0601 -->
== Introducting Beta Features ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''(Apologies for writing in English. Please translate if necessary)''
We would like to let you know about [[mw:About_Beta_Features|Beta Features]], a new program from the Wikimedia Foundation that lets you try out new features before they are released for everyone.
Think of it as a digital laboratory where community members can preview upcoming software and give feedback to help improve them. This special preference page lets designers and engineers experiment with new features on a broad scale, but in a way that's not disruptive.
Beta Features is now ready for testing on [[mw:Special:Preferences#mw-prefsection-betafeatures|MediaWiki.org]]. It will also be released on Wikimedia Commons and MetaWiki this Thursday, 7 November. Based on test results, the plan is to release it on all wikis worldwide on 21 November, 2013.
Here are the first features you can test this week:
* [[mw:Multimedia/About_Media_Viewer|Media Viewer]] — view images in large size or full screen
* [[mw:VisualEditor/Beta_Features/Formulae|VisualEditor Formulæ]] (for wikis with [[mw:VisualEditor|VisualEditor]]) — edit algebra or equations on your pages
* [[mw:Typography_Update|Typography Refresh]] — make text more readable (coming Thursday)
Would you like to try out Beta Features now? After you log in on MediaWiki.org, a small 'Beta' link will appear next to your 'Preferences'. Click on it to see features you can test, check the ones you want, then click 'Save'. Learn more on the [[mw:About_Beta_Features|Beta Features page]].
After you've tested Beta Features, please let the developers know what you think on [[mw:Talk:About_Beta_Features|this discussion page]] -- or report any bugs [http://wmbug.com/new?product=MediaWiki%20extensions&component=BetaFeatures here on Bugzilla]. You're also welcome to join [[m:IRC_office_hours#Upcoming_office_hours|this IRC office hours chat]] on Friday, 8 November at 18:30 UTC.
Beta Features was developed by the Wikimedia Foundation's Design, Multimedia and VisualEditor teams. Along with other developers, they will be adding new features to this experimental program every few weeks. They are very grateful to all the community members who helped create this project — and look forward to many more productive collaborations in the future.
Enjoy, and don't forget to let developers know what you think! [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 19:56, 5 dhen t-Samhain 2013 (UTC)
:<small>Distributed via [[m:Global message delivery|Global message delivery]] (wrong page? [[m:Distribution list/Global message delivery|Correct it here]])</small>, 19:56, 5 dhen t-Samhain 2013 (UTC)
</div>
<!-- EdwardsBot 0622 -->
== Call for comments on draft trademark policy ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hi all,
The Wikimedia legal team invites you to participate in the development of the new Wikimedia trademark policy.
The [[:wmf:Trademark policy|current trademark policy]] was introduced in 2009 to protect the [[:wmf:Wikimedia trademarks|Wikimedia marks]]. We are now updating this policy to better balance permissive use of the marks with the legal requirements for preserving them for the community. The new draft trademark policy is ready for your review [[:m:Trademark policy|here]], and we encourage you to discuss it [[:m:Talk:Trademark policy|here]].
We would appreciate if someone would translate this message into your language so more members of your community can contribute to the conversation.
Thanks, <br />
[[:m:User:YWelinder (WMF)|Yana]] & [[:m:User:Geoffbrigham|Geoff]]
</div>
<!-- EdwardsBot 0657 -->
== Request for comment on Commons: Should Wikimedia support MP4 video? ==
''I apologize for this message being only in English. Please translate it if needed to help your community.''
The Wikimedia Foundation's [[mw:Multimedia|multimedia team]] seeks community guidance on a proposal to support the [[w:MP4|MP4 video format]]. This digital video standard is used widely around the world to record, edit and watch videos on mobile phones, desktop computers and home video devices. It is also known as [[w:MP4|H.264/MPEG-4 or AVC]].
Supporting the MP4 format would make it much easier for our users to view and contribute video on Wikipedia and Wikimedia projects -- and video files could be offered in dual formats on our sites, so we could continue to support current open formats (WebM and Ogg Theora).
However, MP4 is a patent-encumbered format, and using a proprietary format would be a departure from our current practice of only supporting open formats on our sites -- even though the licenses appear to have acceptable legal terms, with only a small fee required.
We would appreciate your guidance on whether or not to support MP4. Our Request for Comments presents views both in favor and against MP4 support, based on opinions we’ve heard in our discussions with community and team members.
[[commons:Commons:Requests for comment/MP4 Video|Please join this RfC -- and share your advice]].
All users are welcome to participate, whether you are active on Commons, Wikipedia, other Wikimedia project -- or any site that uses content from our free media repository.
You are also welcome to join tomorrow's [[m:IRC_office_hours#Upcoming_office_hours|Office hours chat on IRC]], this Thursday, January 16, at 19:00 UTC, if you would like to discuss this project with our team and other community members.
We look forward to a constructive discussion with you, so we can make a more informed decision together on this important topic. [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 06:47, 16 dhen Fhaoilleach 2014 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/MP4_notice_targets&oldid=7105580 -->
== Universal Language Selector will be enabled by default again on this wiki by 21 February 2014 ==
<div class="mw-content-ltr" lang="en" dir="ltr">
On January 21 2014 the MediaWiki extension [[mw:Universal Language Selector|Universal Language Selector]] (ULS) was [[mw:Universal Language Selector/Announcement Jan2014|disabled]] on this wiki. A new preference was added for logged-in users to turn on ULS. This was done to prevent slow loading of pages due to ULS webfonts, a behaviour that had been observed by the Wikimedia Technical Operations team on some wikis.
We are now ready to enable ULS again. The temporary preference to enable ULS will be removed. A [[commons:File:ULS-font-checkbox.png|new checkbox]] has been added to the Language Panel to enable/disable font delivery. This will be unchecked by default for this wiki, but can be selected at any time by the users to enable webfonts. This is an interim solution while we improve the feature of webfonts delivery.
You can read the [[mw:Universal Language Selector/Announcement Feb2014|announcement]] and the [[mw:Universal Language Selector/Upcoming Development Plan|development plan]] for more information. Apologies for writing this message only in English. Thank you. [[m:User_talk:Runab WMF|Runa]]
</div>
<!-- Message sent by User:Runab WMF@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/ULS_Reenable_2014&oldid=7490703 -->
== Amendment to the Terms of Use ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hello all,
Please join a discussion about a [[:m:Terms of use/Paid contributions amendment|proposed amendment]] to the [[wmf:Terms of Use|Wikimedia Terms of Use]] regarding undisclosed paid editing and we encourage you to voice your thoughts there. Please translate this statement if you can, and we welcome you to translate the proposed amendment and introduction. Please see [[:m:Terms of use/Paid contributions amendment|the discussion on Meta Wiki]] for more information. Thank you! [[:m:User:Slaporte (WMF)|Slaporte (WMF)]] 22:00, 21 dhen Ghearrain 2014 (UTC)
</div>
<!-- Message sent by User:Jalexander@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=7499312 -->
== Call for project ideas: funding is available for community experiments ==
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:IEG_key_blue.png|100px|right]]
''I apologize if this message is not in your language. Please help translate it.''
Do you have an idea for a project that could improve your community? [[m:Grants:IEG|Individual Engagement Grants]] from the Wikimedia Foundation help support individuals and small teams to organize experiments for 6 months. You can get funding to try out your idea for online community organizing, outreach, tool-building, or research to help make {{SITENAME}} better. In March, we’re looking for new project proposals.
Examples of past Individual Engagement Grant projects:
*[[m:Grants:IEG/Build_an_effective_method_of_publicity_in_PRChina|Organizing social media for Chinese Wikipedia]] ($350 for materials)
*[[m:Grants:IEG/Visual_editor-_gadgets_compatibility|Improving gadgets for Visual Editor]] ($4500 for developers)
*[[m:Grants:IEG/The_Wikipedia_Library|Coordinating access to reliable sources for Wikipedians]] ($7500 for project management, consultants and materials)
*[[m:Grants:IEG/Elaborate_Wikisource_strategic_vision|Building community and strategy for Wikisource]] (€10000 for organizing and travel)
'''[[m:Grants:IEG#ieg-applying|Proposals]] are due by 31 March 2014.''' There are a number of ways to [[m:Grants:IEG|get involved]]!
Hope to have your participation,
--[[m:User:Sbouterse (WMF)|Siko Bouterse, Head of Individual
Engagement Grants, Wikimedia Foundation]] 19:44, 28 dhen Ghearrain 2014 (UTC)
</div>
<!-- Message sent by User:AKoval (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=IEG/MassMessageList&oldid=7675744 -->
== Proposed optional changes to Terms of Use amendment ==
<div lang="en" dir="ltr" class="mw-content-ltr">Hello all, in response to some community comments in the discussion on the amendment to the Terms of Use on undisclosed paid editing, we have prepared two optional changes. Please [[m:Terms_of_use/Paid_contributions_amendment#Optional_changes|read about these optional changes on Meta wiki]] and share your comments. If you can (and this is a non english project), please translate this announcement. Thanks! [[m:User:Slaporte (WMF)|Slaporte (WMF)]] 21:56, 13 dhen Mhàrt 2014 (UTC) </div>
<!-- Message sent by User:Jalexander@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=7592057 -->
== Changes to the default site typography coming soon ==
<div lang="en" dir="ltr" class="mw-content-ltr">
This week, the typography on Wikimedia sites will be updated for all readers and editors who use the default "Vector" skin. This change will involve new serif fonts for some headings, small tweaks to body content fonts, text size, text color, and spacing between elements. The schedule is:
* '''April 1st''': non-Wikipedia projects will see this change live
* '''April 3rd''': Wikipedias will see this change live
This change is very similar to the "Typography Update" Beta Feature that has been available on Wikimedia projects since November 2013. After several rounds of testing and with feedback from the community, this Beta Feature will be disabled and successful aspects enabled in the default site appearance. Users who are logged in may still choose to use another skin, or alter their [[Special:MyPage/vector.css|personal CSS]], if they prefer a different appearance. Local [[MediaWiki:Common.css|common CSS]] styles will also apply as normal, for issues with local styles and scripts that impact all users.
For more information:
* [[mw:Typography refresh|Summary of changes and FAQ]]
* [[mw:Talk:Typography refresh|Discussion page]] for feedback or questions
* [https://blog.wikimedia.org/2014/03/27/typography-refresh/ Post] on blog.wikimedia.org
-- [[m:User:Steven (WMF)|Steven Walling]] (Product Manager) on behalf of the Wikimedia Foundation's [[mw:Design|User Experience Design]] team
</div>
<!-- Message sent by User:Steven (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=7990801 -->
== Pronunciation Recording ==
[[File:Visual workflow draft for pronunciation recording gadget for Wiktionary users final en.webm|thumb|upright=2|Visual workflow draft for pronunciation recording gadget; If you have trouble watching this video here, watch it on [https://vimeo.com/89049570 vimeo]. A more extensive/explanative version [[:File:Visual workflow draft for pronunciation recording gadget for non-Wiktionary users final en.webm|is available]].]]
Dear Wiktionary community!
;About me: My name is Rainer Rillke, and I have been volunteering at [[:commons:User:Rillke|Wikimedia Commons]] for 3 years now, gathering experience around media files. I've been always interested in how things work and how one could improve them.
;The idea: One idea that appeared last Summer was allowing the recording of small chunks of speech, uploading that to Wikimedia Commons in the background and including this into a Wiktionary entry without having the hassle doing everything by hand or installing additional software. That idea led to the foundation of MediaWiki extension ''PronunciationRecording'' during the Google Summer of Code. However, this was not completed; instead development is stale for over 5 months now.
;My proposal: To make this going to work, so Wiktionary has an immediate benefit of this feature, I would like to provide the work done so far as a gadget and add some more work in regard to usability. You can see my plan at [[:m:Grants:IEG/Finish Pronunciation Recording]]. And more importantly, you can give me a hand, if you are interested [[:m:Grants:IEG/Finish Pronunciation Recording#Discussion|by writing your comments]].
Thanks and kind regards --[[Cleachdaiche:Rillke|Rillke]] ([[Deasbaireachd a' chleachdaiche:Rillke|talk]]) 17:25, 7 dhen Ghiblean 2014 (UTC)
<small>This message was delivered based on [[:commons:User:Rillke/gmd/prg]]. Translation fetched from: [[:commons:User:Rillke/prg/en]] -- ''[[User:Rillke|Rillke]]''<sup>[[User talk:Rillke|(q?)]]</sup> 17:42, 26 January 2013 (UTC)</small>
== Using only [[commons:Special:MyLanguage/Commons:Upload Wizard|UploadWizard]] for uploads ==
[[Image:Commons-logo.svg|right|220px|alt=Wikimedia Commons logo]]
<div lang="en" dir="ltr" class="mw-content-ltr">
Hello! It was noted that on this wiki you have [[Special:Statistics|less than 10 local files]]. Presumably, you therefore don't have interest nor energies to have [[commons:Category:Licensing templates|hundreds templates]] with the [[mw:Multimedia/Media Viewer/Template compatibility|now required HTML]], even less a local [[m:EDP|EDP]]. However, this means that users here will experience a mostly broken and/or [[wmf:Resolution:Licensing policy|illegal]] uploading.
I propose to
* '''have [[Special:Upload|local upload]] [[commons:Commons:Turning off local uploads|restricted]]''' to the "{{int:group-sysop}}" group (for emergency uploads) and
* the '''sidebar point to [[commons:Special:UploadWizard]]''',
so that you can avoid local maintenance and all users can have a functioning, easy upload interface [[translatewiki:Special:Translate/ext-uploadwizard|in their own language]]. All registered users can upload on Commons and [[Special:ListFiles|existing files]] will not be affected.
I'll get this done in one week from now.
# If you disagree with the proposal, just [[m:User:Nemo bis/Unused local uploads|remove your wiki from the list]].
# To make the UploadWizard even better, please tell your experience and ideas on [[commons:Commons:Upload Wizard feedback]].
[[m:User:Nemo_bis|Nemo]] 20:38, 19 dhen Chèitean 2014 (UTC)
</div>
<!-- Message sent by User:Nemo bis@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=User_talk:Nemo_bis/Unused_local_uploads&oldid=8578536 -->
== Media Viewer ==
<br>
<div lang="en" dir="ltr" class="mw-content-ltr">
Greetings, my apologies for writing in English.
I wanted to let you know that [[mw:Multimedia/About Media Viewer|Media Viewer]] will be released to this wiki in the coming weeks. Media Viewer allows readers of Wikimedia projects to have an enhanced view of files without having to visit the file page, but with more detail than a thumbnail. You can try Media Viewer out now by turning it on in your [[Special:Preferences#mw-prefsection-betafeatures|Beta Features]]. If you do not enjoy Media Viewer or if it interferes with your work after it is turned on you will be able to disable Media Viewer as well in your [[Special:Preferences#mw-prefsection-rendering|preferences]]. I invite you to [[mw:Talk:Multimedia/About Media Viewer|share what you think]] about Media Viewer and how it can be made better in the future.
Thank you for your time. - [[m:User:Keegan (WMF)|Keegan (WMF)]] 21:29, 23 dhen Chèitean 2014 (UTC)
<small>--This message was sent using [[m:MassMessage|MassMessage]]. Was there an error? [[m:Talk:MassMessage|Report it!]]</small>
</div>
</br>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/MassMessage/Multimedia/Media_Viewer&oldid=8631315 -->
== Media Viewer is now live on this wiki ==
<br>
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:Media_Viewer_Desktop_-_Large_Image_Opaque_Info.png|thumb|Media Viewer lets you see images in larger size]]
Greetings— and sorry for writing in English, please translate if it will help your community,
The Wikimedia Foundation's [[mw:Multimedia|Multimedia team]] is happy to announce that [[mw:Multimedia/About Media Viewer|Media Viewer]] was just released on this site today.
Media Viewer displays images in larger size when you click on their thumbnails, to provide a better viewing experience. Users can now view images faster and more clearly, without having to jump to separate pages — and its user interface is more intuitive, offering easy access to full-resolution images and information, with links to the file repository for editing. The tool has been tested extensively across all Wikimedia wikis over the past six months as a [[Special:Preferences#mw-prefsection-betafeatures|Beta Feature]] and has been [[mw:Multimedia/Media_Viewer/Release_Plan#Timeline|released]] to the largest Wikipedias, all language Wikisources, and the English Wikivoyage already.
If you do not like this feature, you can easily turn it off by clicking on "Disable Media Viewer" at the bottom of the screen, pulling up the information panel (or in your [[Special:Preferences#mw-prefsection-rendering|your preferences]]) whether you have an account or not. Learn more [[mw:Help:Multimedia/Media_Viewer#How_can_I_turn_off_this_feature.3F|in this Media Viewer Help page]].
Please let us know if you have any questions or comments about Media Viewer. You are invited to [[mw:Talk:Multimedia/About_Media_Viewer|share your feedback in this discussion on MediaWiki.org]] in any language, to help improve this feature. You are also welcome to [https://www.surveymonkey.com/s/media-viewer-1-all?c=announce-all take this quick survey in English], [https://www.surveymonkey.com/s/media-viewer-1-fr en français], [https://www.surveymonkey.com/s/media-viewer-1-es o español].
We hope you enjoy Media Viewer. Many thanks to all the community members who helped make it possible. - [[mw:User:Fabrice Florin (WMF)|Fabrice Florin (WMF)]] ([[m:User talk:Fabrice Florin (WMF)|talk]]) 21:54, 19 dhen Ògmhios 2014 (UTC)
<small>--This message was sent using [[m:MassMessage|MassMessage]]. Was there an error? [[m:Talk:MassMessage|Report it!]]</small>
</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/MassMessage/Multimedia/Media_Viewer&oldid=8631315 -->
== Letter petitioning WMF to reverse recent decisions ==
The Wikimedia Foundation recently created a new feature, "superprotect" status. The purpose is to prevent pages from being edited by elected administrators -- but permitting WMF staff to edit them. It has been put to use in only one case: to protect the deployment of the Media Viewer software on German Wikipedia, in defiance of a clear decision of that community to disable the feature by default, unless users decide to enable it.
If you oppose these actions, please add your name to this letter. If you know non-Wikimedians who support our vision for the free sharing of knowledge, and would like to add their names to the list, please ask them to sign an identical version of the letter on change.org.
* [[:m:Letter to Wikimedia Foundation: Superprotect and Media Viewer|Letter to Wikimedia Foundation: Superprotect and Media Viewer]]
* [http://www.change.org/p/lila-tretikov-remove-new-superprotect-status-and-permit-wikipedia-communities-to-enact-current-software-decisions-uninhibited Letter on change.org]
-- [[:m:User:JurgenNL|JurgenNL]] ([[:m:User talk:JurgenNL|talk]]) 17:35, 21 An Lùnastal 2014 (UTC)
<!-- Message sent by User:JurgenNL@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=9313374 -->
== Process ideas for software development ==
<div class=”mw-content-ltr”>
’’My apologies for writing in English.’’
Hello,
I am notifying you that a brainstorming session has been [[:m:Community Engagement (Product)/Process ideas|started on Meta]] to help the Wikimedia Foundation increase and better affect community participation in software development across all wiki projects. Basically, how can you be more involved in helping to create features on Wikimedia projects? We are inviting all interested users to voice their ideas on how communities can be more involved and informed in the product development process at the Wikimedia Foundation. It would be very appreciated if you could translate this message to help inform your local communities as well.
I and the rest of [[:m:Community Engagement (Product)|my team]] welcome you to participate. We hope to see you on Meta.
Kind regards,
-- [[m:User:Rdicerb (WMF)|Rdicerb (WMF)]] [[m:User talk:Rdicerb (WMF)|talk]] 22:15, 21 An Lùnastal 2014 (UTC)
<small>--This message was sent using [[m:MassMessage|MassMessage]]. Was there an error? [[m:Talk:MassMessage|Report it!]]</small>
</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=9313374 -->
== Grants to improve your project ==
:''Apologies for English. Please help translate this message.''
Greetings! The [[:m:Grants:IEG|Individual Engagement Grants program]] is accepting proposals for funding new experiments from September 1st to 30th. Your idea could improve Wikimedia projects with a new tool or gadget, a better process to support community-building on your wiki, research on an important issue, or something else we haven't thought of yet.
Whether you need $200 or $30,000 USD, Individual Engagement Grants can cover your own project development time in addition to hiring others to help you.
*'''[[:m:Grants:IEG#ieg-apply|Submit your proposal]]'''
*'''Get help''': In [[:m:Grants:IdeaLab|IdeaLab]] or an upcoming [[:m:Grants:IdeaLab/Events#Upcoming_events|Hangout session]] [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 16:51, 2 dhen t-Sultain 2014 (UTC)
<!-- Message sent by User:PEarley (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=User:PEarley_(WMF)/Sandbox&oldid=9730503 -->
== Meta RfCs on two new global groups ==
<div lang="en" dir="ltr" class="mw-content-ltr">Hello all,
There are currently requests for comment open on meta to create two new global groups. The first is a group for members of the OTRS permissions queue, which would grant them autopatrolled rights on all wikis except those who opt-out. That proposal can be found at [[m:Requests for comment/Creation of a global OTRS-permissions user group]]. The second is a group for Wikimedia Commons admins and OTRS agents to view deleted file pages through the 'viewdeletedfile' right on all wikis except those who opt-out. The second proposal can be found at [[m:Requests for comment/Global file deletion review]].
We would like to hear what you think on both proposals. Both are in English; if you wanted to translate them into your native language that would also be appreciated.
It is possible for individual projects to opt-out, so that users in those groups do not have any additional rights on those projects. To do this please start a local discussion, and if there is consensus you can request to opt-out of either or both at [[m:Stewards' noticeboard]].
Thanks and regards, [[m:User:Ajraddatz|Ajraddatz]] ([[m:User talk:Ajraddatz|talk]]) 18:04, 26 dhen Dàmhair 2014 (UTC)</div>
<!-- Message sent by User:Ajraddatz@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=10024331 -->
== Global AbuseFilter ==
<div lang="en" dir="ltr" class="mw-content-ltr">Hello,
[[mw:Special:MyLanguage/Extension:AbuseFilter|AbuseFilter]] is a MediaWiki extension used to detect likely abusive behavior patterns, like pattern vandalism and spam. In 2013, [[m:Special:Mylanguage/Global AbuseFilter|Global AbuseFilters]] were enabled on a limited set of wikis including Meta-Wiki, MediaWiki.org, Wikispecies and (in early 2014) all the "[https://noc.wikimedia.org/conf/highlight.php?file=small.dblist small wikis]". Recently, global abuse filters were enabled on "[https://noc.wikimedia.org/conf/highlight.php?file=medium.dblist medium sized wikis]" as well. These filters are currently managed by stewards on Meta-Wiki and have shown to be very effective in preventing mass spam attacks across Wikimedia projects. However, there is currently no policy on how the global AbuseFilters will be managed although there are proposals. There is an ongoing [[m:Requests for comment/Global AbuseFilter|request for comment]] on policy governing the use of the global AbuseFilters. In the meantime, specific wikis can opt out of using the global AbuseFilter. These wikis can simply add a request to [[m:Global AbuseFilter/Opt-out wikis|this list]] on Meta-Wiki. More details can be found on [[m:Special:Mylanguage/Global AbuseFilter/2014 announcement|this page]] at Meta-Wiki. If you have any questions, feel free to ask on [[m:Talk:Global AbuseFilter|m:Talk:Global AbuseFilter]].
Thanks,
[[m:User:PiRSquared17|PiRSquared17]], [[m:User:Glaisher|Glaisher]]</div> — 17:34, 14 dhen t-Samhain 2014 (UTC)
<!-- Message sent by User:Glaisher@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Global_AbuseFilter/2014_announcement_distribution_list&oldid=10495115 -->
== [Global proposal] m.{{SITENAME}}.org: {{int:group-all}} {{int:right-edit}} ==
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:Mediawiki-mobile-smartphone.png|thumb|MediaWiki mobile]]
Hi, this message is to let you know that, on domains like {{CONTENTLANGUAGE}}.'''m'''.wikipedia.org, '''unregistered users cannot edit'''. At the Wikimedia Forum, where global configuration changes are normally discussed, a few dozens users [[m:Wikimedia Forum#Proposal: restore normal editing permissions on all mobile sites|propose to restore normal editing permissions on all mobile sites]]. Please read and comment!
Thanks and sorry for writing in English, [[m:User:Nemo_bis|Nemo]] 22:32, 1 dhen Mhàrt 2015 (UTC)
</div>
<!-- Message sent by User:Nemo bis@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=11428885 -->
== Inspire Campaign: Improving diversity, improving content ==
This March, we’re organizing an Inspire Campaign to encourage and support new ideas for improving gender diversity on Wikimedia projects. Less than 20% of Wikimedia contributors are women, and many important topics are still missing in our content. We invite all Wikimedians to participate. If you have an idea that could help address this problem, please get involved today! The campaign runs until March 31.
All proposals are welcome - research projects, technical solutions, community organizing and outreach initiatives, or something completely new! Funding is available from the Wikimedia Foundation for projects that need financial support. Constructive, positive feedback on ideas is appreciated, and collaboration is encouraged - your skills and experience may help bring someone else’s project to life. Join us at the Inspire Campaign and help this project better represent the world’s knowledge!
:*[[:m:Grants:IdeaLab/Inspire|Inspire Campaign main page]]
''(Sorry for the English - please translate this message!)'' [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 20:01, 4 dhen Mhàrt 2015 (UTC)
<!-- Message sent by User:PEarley (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=User:PEarley_(WMF)/Inspire_Mass_Message&oldid=11457822 -->
== SUL finalization update ==
<div class="mw-content-ltr">
Hi all,apologies for writing in English, please read [[m:Single_User_Login_finalisation_announcement/Schema_announcement|this page]] for important information and an update involving [[m:Help:Unified login|SUL finalization]], scheduled to take place in one month. Thanks. [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 19:45, 13 dhen Mhàrt 2015 (UTC)
</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/Everyone_but_meta_and_de&oldid=11538208 -->
== Cleaned [[:Category:Candidates for speedy deletion]] ==
Hi. I have deleted everything tagged for speedy deletion ([[Teamplaid:delete]]) on this wiki. I hope that no wrong deletion happened. If so please contact me at my userpage at [[m:User talk:MarcoAurelio|meta]] and I'll restore the content. There was a lot of pages listed for deletion so I have flooded Recent Changes a bit (sorry). Please don't let the category grow too much. Ask us on [[m:SRM]] when there's a number of pages to delete or, if there are community members interested in administrating the project, please apply for adminship locally and request at [[m:SRP]] administrator permissions. Thanks. --[[Cleachdaiche:MarcoAurelio|MarcoAurelio]] ([[Deasbaireachd a' chleachdaiche:MarcoAurelio|an deasbaireachd]]) 10:04, 26 dhen Mhàrt 2015 (UTC)
== Adminship for Kibi78704 ==
I would like to obtain admin credentials to be better able to serve and maintain Uiclair. Please see the discussion at [[meta:Steward_requests/Miscellaneous#gd.wiktionary]]. [[Cleachdaiche:Kibi78704|Kibi78704]] ([[Deasbaireachd a' chleachdaiche:Kibi78704|an deasbaireachd]]) 16:26, 28 dhen Mhàrt 2015 (UTC)
::Support [[Cleachdaiche:Gunmhoine|Gunmhoine]] ([[Deasbaireachd a' chleachdaiche:Gunmhoine|an deasbaireachd]]) 23:13, 28 dhen Mhàrt 2015 (UTC)
::Support. [[Cleachdaiche:JAn Dudík|JAn Dudík]] ([[Deasbaireachd a' chleachdaiche:JAn Dudík|an deasbaireachd]]) 12:32, 2 dhen Ghiblean 2015 (UTC)
I have posted this at [[m:SRP#Kibi78704@gd.wiktionary]]. [[User:Kibi78704|Kibi78704]] please confirm there that you're still interested in order to assign you the permissions. Another steward will judge the result and implement it. [[Cleachdaiche:MarcoAurelio|MarcoAurelio]] ([[Deasbaireachd a' chleachdaiche:MarcoAurelio|an deasbaireachd]]) 21:37, 5 dhen Ghiblean 2015 (UTC)
== Adminship for Gunmhoine ==
I would also like to obtain admin credentials to be better able to serve and maintain Uiclair. Please see the discussion at [[meta:Steward_requests/Miscellaneous#gd.wiktionary]].
[[Cleachdaiche:Gunmhoine|Gunmhoine]] ([[Deasbaireachd a' chleachdaiche:Gunmhoine|an deasbaireachd]]) 18:01, 28 dhen Mhàrt 2015 (UTC)
:{{Support}} I support [[wikt:gd:User:Gunmhoine|Gunmhoine]]'s rfa. [[Cleachdaiche:Kibi78704|Kibi78704]] ([[Deasbaireachd a' chleachdaiche:Kibi78704|an deasbaireachd]]) 00:15, 29 dhen Mhàrt 2015 (UTC)
:Support. [[Cleachdaiche:JAn Dudík|JAn Dudík]] ([[Deasbaireachd a' chleachdaiche:JAn Dudík|an deasbaireachd]]) 12:32, 2 dhen Ghiblean 2015 (UTC)
I have posted this at [[m:SRP#Gunmhoine@gd.wiktionary]]. [[User:Gunmhoine|Gunmhoine]] please confirm there that you're still interested so we can assign you the rights. Best regards. [[Cleachdaiche:MarcoAurelio|MarcoAurelio]] ([[Deasbaireachd a' chleachdaiche:MarcoAurelio|an deasbaireachd]]) 21:38, 5 dhen Ghiblean 2015 (UTC)
== Stewards confirmation rules ==
Hello, I made [[:m:Requests_for_comment/Confirmation_of_stewards|a proposal on Meta]] to change the rules for the steward confirmations. Currently consensus to remove is required for a steward to lose his status, however I think it's fairer to the community if every steward needed the consensus to keep. As this is an issue that affects all WMF wikis, I'm sending this notification to let people know & be able to participate. Best regards, --<small>[[User:MF-Warburg|MF-W]]</small> 16:12, 10 dhen Ghiblean 2015 (UTC)
<!-- Message sent by User:MF-Warburg@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=11737694 -->
== [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/Call for candidates|Nominations are being accepted for 2015 Wikimedia Foundation elections]] ==
''This is a message from the [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]]. [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/Accepting nominations|Translations]] are available.''
[[File:Wikimedia Foundation logo - vertical (2012-2016).svg|100px|right]]
Greetings,
I am pleased to announce that nominations are now being accepted for the 2015 Wikimedia Foundation Elections. This year the Board and the FDC Staff are looking for a diverse set of candidates from regions and projects that are traditionally under-represented on the board and in the movement as well as candidates with experience in technology, product or finance. To this end they have [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/Call for candidates|published letters]] describing what they think is needed and, recognizing that those who know the community the best are the community themselves, the election committee is [[m:Special:MyLanguage/Wikimedia Foundation elections 2015|accepting nominations]] for community members you think should run and will reach out to those nominated to provide them with information about the job and the election process.
This year, elections are being held for the following roles:
''Board of Trustees''<br/>
The Board of Trustees is the decision-making body that is ultimately responsible for the long term sustainability of the Foundation, so we value wide input into its selection. There are three positions being filled. More information about this role can be found at [[m:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015|the board elections page]].
''Funds Dissemination Committee (FDC)''<br/>
The Funds Dissemination Committee (FDC) makes recommendations about how to allocate Wikimedia movement funds to eligible entities. There are five positions being filled. More information about this role can be found at [[m:Special:MyLanguage/Wikimedia Foundation elections/FDC elections/2015|the FDC elections page]].
''Funds Dissemination Committee (FDC) Ombud''<br/>
The FDC Ombud receives complaints and feedback about the FDC process, investigates complaints at the request of the Board of Trustees, and summarizes the investigations and feedback for the Board of Trustees on an annual basis. One position is being filled. More information about this role can be found at [[m:Special:MyLanguage/Wikimedia Foundation elections/FDC Ombudsperson elections/2015|the FDC Ombudsperson elections page]].
The candidacy submission phase lasts from 00:00 UTC April 20 to 23:59 UTC May 5 for the Board and from 00:00 UTCApril 20 to 23:59 UTC April 30 for the FDC and FDC Ombudsperson. This year, we are accepting both self-nominations and nominations of others. More information on this election and the nomination process can be found on [[m:Special:MyLanguage/Wikimedia Foundation elections 2015|the 2015 Wikimedia elections page on Meta-Wiki]].
Please feel free to post a note about the election on your project's village pump. Any questions related to the election can be posted on the talk page on Meta, or sent to the election committee's mailing list, board-elections -at- wikimedia.org
On behalf of the Elections Committee,<br/>
-Gregory Varnum ([[m:User:Varnent|User:Varnent]])<br/>
Coordinator, [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]]
''Posted by the [[m:User:MediaWiki message delivery|MediaWiki message delivery]] on behalf of the [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]], 05:03, 21 April 2015 (UTC) • [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/Accepting nominations|Translate]] • [[m:Talk:Wikimedia Foundation elections 2015|Get help]]
<!-- Message sent by User:Varnent@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=11918510 -->
== [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/FDC voting has begun|Wikimedia Foundation Funds Dissemination Committee elections 2015]] ==
[[File:Wikimedia Foundation RGB logo with text.svg|right|75px|link=m:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/FDC voting has begun]]
''This is a message from the [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]]. [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/FDC voting has begun|Translations]] are available.''
[[m:Special:SecurePoll/vote/336|Voting has begun]] for [[m:Wikimedia Foundation elections 2015#Requirements|eligible voters]] in the 2015 elections for the ''[[m:Special:MyLanguage/Wikimedia Foundation elections/FDC elections/2015|Funds Dissemination Committee]]'' (FDC) and ''[[m:Special:MyLanguage/Wikimedia Foundation elections/FDC Ombudsperson elections/2015|FDC Ombudsperson]]''. Questions and discussion with the candidates for the ''[[m:Special:MyLanguage/Wikimedia Foundation elections/FDC elections/2015/Questions|Funds Dissemination Committee]]'' (FDC) and ''[[m:Special:MyLanguage/Wikimedia Foundation elections/FDC Ombudsperson elections/2015/Questions|FDC Ombudsperson]]'' will continue during the voting. Nominations for the ''[[m:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015|Board of Trustees]]'' will be accepted until 23:59 UTC May 5.
The ''[[m:Special:MyLanguage/Grants:APG/Funds Dissemination Committee|Funds Dissemination Committee]]'' (FDC) makes recommendations about how to allocate Wikimedia movement funds to eligible entities. There are five positions on the committee being filled.
The ''[[m:Special:MyLanguage/Grants:APG/Funds Dissemination Committee/Ombudsperson role, expectations, and selection process|FDC Ombudsperson]]'' receives complaints and feedback about the FDC process, investigates complaints at the request of the [[m:Special:MyLanguage/Wikimedia Foundation Board of Trustees|Board of Trustees]], and summarizes the investigations and feedback for the Board of Trustees on an annual basis. One position is being filled.
The voting phase lasts from 00:00 UTC May 3 to 23:59 UTC May 10. '''[[m:Special:SecurePoll/vote/336|Click here to vote]].''' Questions and discussion with the candidates will continue during that time. '''[[m:Special:MyLanguage/Wikimedia Foundation elections/FDC elections/2015/Questions|Click here to ask the FDC candidates a question]]. [[m:Special:MyLanguage/Wikimedia Foundation elections/FDC Ombudsperson elections/2015/Questions|Click here to ask the FDC Ombudsperson candidates a question]].''' More information on the candidates and the elections can be found on the [[m:Special:MyLanguage/Wikimedia Foundation elections/FDC elections/2015|2015 FDC election page]], the [[m:Special:MyLanguage/Wikimedia Foundation elections/FDC Ombudsperson elections/2015|2015 FDC Ombudsperson election page]], and the [[m:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015|2015 Board election page]] on Meta-Wiki.
On behalf of the Elections Committee,<br/>
-Gregory Varnum ([[m:User:Varnent|User:Varnent]])<br/>
Volunteer Coordinator, [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]]
''Posted by the [[m:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] 03:45, 4 May 2015 (UTC) • [[m:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/FDC voting has begun|Translate]] • [[m:Talk:Wikimedia Foundation elections 2015|Get help]]
<!-- Message sent by User:Varnent@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=12082785 -->
== [https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/339?setlang=gd Wikimedia Foundation Board of Trustees elections 2015] ==
[[File:Wikimedia Foundation logo - vertical (2012-2016).svg|right|100px|link=metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/Board voting has begun]]
''This is a message from the [[metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]]. [[metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/Board voting has begun|Translations]] are available.''
[https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/339?setlang=gd Voting has begun] for [[metawiki:Wikimedia Foundation elections 2015#Requirements|eligible voters]] in the 2015 elections for the ''[[metawiki:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015|Wikimedia Foundation Board of Trustees]]''. Questions and discussion with the candidates for the ''[[metawiki:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015/Questions|Board]]'' will continue during the voting.
The ''[[metawiki:Wikimedia Foundation Board of Trustees|Wikimedia Foundation Board of Trustees]]'' is the ultimate governing authority of the Wikimedia Foundation, a 501(c)(3) non-profit organization registered in the United States. The Wikimedia Foundation manages many diverse projects such as Wikipedia and Commons.
The voting phase lasts from 00:00 UTC May 17 to 23:59 UTC May 31. '''[https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/339?setlang=gd Click here to vote].''' More information on the candidates and the elections can be found on the [[metawiki:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015|2015 ''Board'' election page]] on Meta-Wiki.
On behalf of the Elections Committee,<br/>
-Gregory Varnum ([[metawiki:User:Varnent|User:Varnent]])<br/>
Volunteer Coordinator, [[metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]]
''Posted by the [[metawiki:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] 17:20, 17 May 2015 (UTC) • [[metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/Board voting has begun|Translate]] • [[metawiki:Talk:Wikimedia Foundation elections 2015|Get help]]
<!-- Message sent by User:Varnent@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=12206621 -->
== [https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/339?setlang=gd Wikimedia Foundation Board of Trustees elections 2015] ==
[[File:Wikimedia Foundation logo - vertical (2012-2016).svg|right|100px|link=metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/Board voting has begun]]
''This is a message from the [[metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]]. [[metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/Board voting has begun|Translations]] are available.''
[https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/339?setlang=gd Voting has begun] for [[metawiki:Wikimedia Foundation elections 2015#Requirements|eligible voters]] in the 2015 elections for the ''[[metawiki:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015|Wikimedia Foundation Board of Trustees]]''. Questions and discussion with the candidates for the ''[[metawiki:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015/Questions|Board]]'' will continue during the voting.
The ''[[metawiki:Wikimedia Foundation Board of Trustees|Wikimedia Foundation Board of Trustees]]'' is the ultimate governing authority of the Wikimedia Foundation, a 501(c)(3) non-profit organization registered in the United States. The Wikimedia Foundation manages many diverse projects such as Wikipedia and Commons.
The voting phase lasts from 00:00 UTC May 17 to 23:59 UTC May 31. '''[https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/339?setlang=gd Click here to vote].''' More information on the candidates and the elections can be found on the [[metawiki:Special:MyLanguage/Wikimedia Foundation elections/Board elections/2015|2015 ''Board'' election page]] on Meta-Wiki.
On behalf of the Elections Committee,<br/>
-Gregory Varnum ([[metawiki:User:Varnent|User:Varnent]])<br/>
Volunteer Coordinator, [[metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/Committee|2015 Wikimedia Foundation Elections Committee]]
''Posted by the [[metawiki:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] 17:20, 17 May 2015 (UTC) • [[metawiki:Special:MyLanguage/Wikimedia Foundation elections 2015/MassMessages/Board voting has begun|Translate]] • [[metawiki:Talk:Wikimedia Foundation elections 2015|Get help]]
<!-- Message sent by User:Varnent@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=12206621 -->
== Pywikibot compat will no longer be supported - Please migrate to pywikibot core ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<small>Sorry for English, I hope someone translates this.</small><br />
[[mw:Special:MyLanguage/Manual:Pywikibot|Pywikibot]] (then "Pywikipediabot") was started back in 2002. In 2007 a new branch (formerly known as "rewrite", now called "core") was started from scratch using the MediaWiki API. The developers of Pywikibot have decided to stop supporting the compat version of Pywikibot due to bad performance and architectural errors that make it hard to update, compared to core. If you are using pywikibot compat it is likely your code will break due to upcoming MediaWiki API changes (e.g. [[phab:T101524|T101524]]). It is highly recommended you migrate to the core framework. There is a [[mw:Manual:Pywikibot/Compat deprecation|migration guide]], and please [[mw:Special:MyLanguage/Manual:Pywikibot/Communication|contact us]] if you have any problem.
There is an upcoming MediaWiki API breaking change that compat will not be updated for. If your bot's name is in [https://lists.wikimedia.org/pipermail/wikitech-l/2015-June/081931.html this list], your bot will most likely break.
Thank you,<br />
The Pywikibot development team, 19:30, 5 June 2015 (UTC)
</div>
<!-- Message sent by User:Ladsgroup@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=12271740 -->
== Pywikibot compat will no longer be supported - Please migrate to pywikibot core ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<small>Sorry for English, I hope someone translates this.</small><br />
[[mw:Special:MyLanguage/Manual:Pywikibot|Pywikibot]] (then "Pywikipediabot") was started back in 2002. In 2007 a new branch (formerly known as "rewrite", now called "core") was started from scratch using the MediaWiki API. The developers of Pywikibot have decided to stop supporting the compat version of Pywikibot due to bad performance and architectural errors that make it hard to update, compared to core. If you are using pywikibot compat it is likely your code will break due to upcoming MediaWiki API changes (e.g. [[phab:T101524|T101524]]). It is highly recommended you migrate to the core framework. There is a [[mw:Manual:Pywikibot/Compat deprecation|migration guide]], and please [[mw:Special:MyLanguage/Manual:Pywikibot/Communication|contact us]] if you have any problem.
There is an upcoming MediaWiki API breaking change that compat will not be updated for. If your bot's name is in [https://lists.wikimedia.org/pipermail/wikitech-l/2015-June/081931.html this list], your bot will most likely break.
Thank you,<br />
The Pywikibot development team, 19:30, 5 June 2015 (UTC)
</div>
<!-- Message sent by User:Ladsgroup@metawiki using the list at http://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=12271740 -->
== HTTPS ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Apologies for writing in English.
Hi everyone.
Over the last few years, the Wikimedia Foundation has [http://blog.wikimedia.org/2013/08/01/future-https-wikimedia-projects/ been working] towards enabling [[m:Special:MyLanguage/HTTPS|HTTPS]] by default for all users, including unregistered ones, for better privacy and security for both readers and editors. This has taken a long time, as there were different aspects to take into account. Our servers haven't been ready to handle it. The Wikimedia Foundation has had to balance sometimes conflicting goals.
[https://blog.wikimedia.org/2015/06/12/securing-wikimedia-sites-with-https/ Forced HTTPS] has just been implemented on all Wikimedia projects. Some of you might already be aware of this, as a few Wikipedia language versions were converted to HTTPS last week and the then affected communities were notified.
Most of Wikimedia editors shouldn't be affected at all. If you edit as registered user, you've probably already had to log in through HTTPS. We'll keep an eye on this to make sure everything is working as it should. Do get in touch with [[:m:HTTPS#Help!|us]] if you have any problems after this change or contact me if you have any other questions.
/[[:m:User:Johan (WMF)|Johan (WMF)]]
</div> 22:01, 19 dhen Ògmhios 2015 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/HTTPS_global_message_delivery&oldid=12471979 -->
== HTTPS ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Apologies for writing in English.
Hi everyone.
Over the last few years, the Wikimedia Foundation has [http://blog.wikimedia.org/2013/08/01/future-https-wikimedia-projects/ been working] towards enabling [[m:Special:MyLanguage/HTTPS|HTTPS]] by default for all users, including unregistered ones, for better privacy and security for both readers and editors. This has taken a long time, as there were different aspects to take into account. Our servers haven't been ready to handle it. The Wikimedia Foundation has had to balance sometimes conflicting goals.
[https://blog.wikimedia.org/2015/06/12/securing-wikimedia-sites-with-https/ Forced HTTPS] has just been implemented on all Wikimedia projects. Some of you might already be aware of this, as a few Wikipedia language versions were converted to HTTPS last week and the then affected communities were notified.
Most of Wikimedia editors shouldn't be affected at all. If you edit as registered user, you've probably already had to log in through HTTPS. We'll keep an eye on this to make sure everything is working as it should. Do get in touch with [[:m:HTTPS#Help!|us]] if you have any problems after this change or contact me if you have any other questions.
/[[:m:User:Johan (WMF)|Johan (WMF)]]
</div> 23:27, 19 dhen Ògmhios 2015 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/HTTPS_global_message_delivery&oldid=12471979 -->
== Proposal to create PNG thumbnails of static GIF images ==
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:(R)-3-phenyl-cyclohanone.gif|255px|thumb|The thumbnail of this gif is of really bad quality.]]
[[File:(R)-3-phenyl-cyclohanone.png|255px|thumb|How a PNG thumb of this GIF would look like]]
There is a [[w:c:Commons:Village_pump/Proposals#Create_PNG_thumbnails_of_static_GIF_images|proposal]] at the Commons Village Pump requesting feedback about the thumbnails of static GIF images: It states that static GIF files should have their thumbnails created in PNG. The advantages of PNG over GIF would be visible especially with GIF images using an alpha channel. (compare the thumbnails on the side)
This change would affect all wikis, so if you support/oppose or want to give general feedback/concerns, please post them to the [[w:c:Commons:Village_pump/Proposals#Create_PNG_thumbnails_of_static_GIF_images|proposal page]]. Thank you. --[[w:c:User:McZusatz|McZusatz]] ([[w:c:User talk:McZusatz|talk]]) & [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 05:07, 24 dhen Iuchar 2015 (UTC)
</div>
<!-- Message sent by User:-revi@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=12485605 -->
== What does a Healthy Community look like to you? ==
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:Community Health Cover art News portal.png|300px|right]]
Hi, <br>
The Community Engagement department at the Wikimedia Foundation has launched a new learning campaign. The WMF wants to record community impressions about what makes a healthy online community.
Share your views and/or create a drawing and take a chance to win a Wikimania 2016 scholarship!
Join the WMF as we begin a conversation about Community Health. Contribute a drawing or answer the questions [[meta:Grants:Evaluation/Community Health learning campaign|on the campaign's page.]]
=== Why get involved? ===
'''The world is changing. The way we relate to knowledge is transforming.''' As the next billion people come online, the Wikimedia movement is working to bring more users on the wiki projects. The way we interact and collaborate online are key to building sustainable projects. How accessible are Wikimedia projects to newcomers today? Are we helping each other learn?
<br/>
Share your views on this matter that affects us all!
<br>
'''We invite everyone to take part in this learning campaign. Wikimedia Foundation will distribute one Wikimania Scholarship 2016 among those participants who are eligible.'''
=== More information ===
* All participants must have a registered user of at least one month antiquity on any Wikimedia project before the starting date of the campaign.
* <span style="border-bottom:1px dotted"> All eligible contributions must be done until '''August 23, 2015 at <nowiki>23:59</nowiki> UTC''' </span>
* <big> Wiki link: '''[[meta:Grants:Evaluation/Community Health learning campaign|Community Health learning campaign]]''' </big>
* URL https://meta.wikimedia.org/wiki/Grants:Evaluation/Community_Health_learning_campaign
* Contact: [[meta:user:MCruz (WMF)|María Cruz]] / Twitter: {{@}}WikiEval #CommunityHealth / email: eval{{@}}wikimedia{{Dot}}org
<br>
Happy editing!
<br>
<br>
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 23:42, 31 dhen Iuchar 2015 (UTC)
</div>
<!-- Message sent by User:MCruz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=12909005 -->
== What does a Healthy Community look like to you? ==
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:Community Health Cover art News portal.png|300px|right]]
Hi, <br>
The Community Engagement department at the Wikimedia Foundation has launched a new learning campaign. The WMF wants to record community impressions about what makes a healthy online community.
Share your views and/or create a drawing and take a chance to win a Wikimania 2016 scholarship!
Join the WMF as we begin a conversation about Community Health. Contribute a drawing or answer the questions [[meta:Grants:Evaluation/Community Health learning campaign|on the campaign's page.]]
=== Why get involved? ===
'''The world is changing. The way we relate to knowledge is transforming.''' As the next billion people come online, the Wikimedia movement is working to bring more users on the wiki projects. The way we interact and collaborate online are key to building sustainable projects. How accessible are Wikimedia projects to newcomers today? Are we helping each other learn?
<br/>
Share your views on this matter that affects us all!
<br>
'''We invite everyone to take part in this learning campaign. Wikimedia Foundation will distribute one Wikimania Scholarship 2016 among those participants who are eligible.'''
=== More information ===
* All participants must have a registered user of at least one month antiquity on any Wikimedia project before the starting date of the campaign.
* <span style="border-bottom:1px dotted"> All eligible contributions must be done until '''August 23, 2015 at <nowiki>23:59</nowiki> UTC''' </span>
* <big> Wiki link: '''[[meta:Grants:Evaluation/Community Health learning campaign|Community Health learning campaign]]''' </big>
* URL https://meta.wikimedia.org/wiki/Grants:Evaluation/Community_Health_learning_campaign
* Contact: [[meta:user:MCruz (WMF)|María Cruz]] / Twitter: {{@}}WikiEval #CommunityHealth / email: eval{{@}}wikimedia{{Dot}}org
<br>
Happy editing!
<br>
<br>
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 01:08, 1 An Lùnastal 2015 (UTC)
</div>
<!-- Message sent by User:MCruz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=12909005 -->
== How can we improve Wikimedia grants to support you better? ==
''My apologies for posting this message in English. Please help translate it if you can.''
Hello,
The Wikimedia Foundation would like your feedback about how we can '''[[m:Grants:IdeaLab/Reimagining WMF grants|reimagine Wikimedia Foundation grants]]''', to better support people and ideas in your Wikimedia project. Ways to participate:
*Respond to questions on [[m:Grants talk:IdeaLab/Reimagining WMF grants|the discussion page of the idea]].
*Join a [[m:Grants:IdeaLab/Events#Upcoming_events|small group conversation]].
*Learn more about [[m:Grants:IdeaLab/Reimagining WMF grants/Consultation|this consultation]].
Feedback is welcome in any language.
With thanks,
[[m:User:I JethroBT (WMF)|I JethroBT (WMF)]], [[m:Community Resources|Community Resources]], Wikimedia Foundation.
([[m:Grants:IdeaLab/Reimagining WMF grants/ProjectTargets|''Opt-out Instructions'']]) <small>This message was sent by [[m:User:I JethroBT (WMF)|I JethroBT (WMF)]] through [[m:User:MediaWiki message delivery|MediaWiki message delivery]].</small> 00:12, 19 An Lùnastal 2015 (UTC)
== Introducing the Wikimedia public policy site ==
Hi all,
We are excited to introduce a new Wikimedia Public Policy site. The site includes resources and position statements on access, copyright, censorship, intermediary liability, and privacy. The site explains how good public policy supports the Wikimedia projects, editors, and mission.
Visit the public policy portal: https://policy.wikimedia.org/
Please help translate the [[m:Public policy|statements on Meta Wiki]]. You can [http://blog.wikimedia.org/2015/09/02/new-wikimedia-public-policy-site/ read more on the Wikimedia blog].
Thanks,
[[m:User:YWelinder (WMF)|Yana]] and [[m:User:Slaporte (WMF)|Stephen]] ([[m:User talk:Slaporte (WMF)|Talk]]) 18:12, 2 dhen t-Sultain 2015 (UTC)
''(Sent with the [[m:MassMessage#Global_message_delivery|Global message delivery system]])''
<!-- Message sent by User:Slaporte (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Slaporte_(WMF)/Announcing_public_policy_site&oldid=13439030 -->
== Introducing the Wikimedia public policy site ==
Hi all,
We are excited to introduce a new Wikimedia Public Policy site. The site includes resources and position statements on access, copyright, censorship, intermediary liability, and privacy. The site explains how good public policy supports the Wikimedia projects, editors, and mission.
Visit the public policy portal: https://policy.wikimedia.org/
Please help translate the [[m:Public policy|statements on Meta Wiki]]. You can [http://blog.wikimedia.org/2015/09/02/new-wikimedia-public-policy-site/ read more on the Wikimedia blog].
Thanks,
[[m:User:YWelinder (WMF)|Yana]] and [[m:User:Slaporte (WMF)|Stephen]] ([[m:User talk:Slaporte (WMF)|Talk]]) 19:16, 2 dhen t-Sultain 2015 (UTC)
''(Sent with the [[m:MassMessage#Global_message_delivery|Global message delivery system]])''
<!-- Message sent by User:Slaporte (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Slaporte_(WMF)/Announcing_public_policy_site&oldid=13439030 -->
== Open call for Individual Engagement Grants ==
''My apologies for posting this message in English. Please help translate it if you can.''
Greetings! The '''[[m:IEG|Individual Engagement Grants program]] is accepting proposals''' until September 29th to fund new tools, community-building processes, and other experimental ideas that enhance the work of Wikimedia volunteers. Whether you need a small or large amount of funds (up to $30,000 USD), Individual Engagement Grants can support you and your team’s project development time in addition to project expenses such as materials, travel, and rental space.
*[[m:Grants:IEG#ieg-apply|'''Submit''' a grant request]]
*[[m:Grants:IdeaLab|'''Get help''' with your proposal in IdeaLab]] or [[m:Grants:IdeaLab/Events#Upcoming_events|an upcoming Hangout session]]
*[[m:Grants:IEG#ieg-engaging|'''Learn from examples''' of completed Individual Engagement Grants]]
Thanks,
[[m:User:I JethroBT (WMF)|I JethroBT (WMF)]], [[m:Community Resources|Community Resources]], Wikimedia Foundation. 20:52, 4 dhen t-Sultain 2015 (UTC)
([[m:User:I JethroBT (WMF)/IEG 2015 Targets|''Opt-out Instructions'']]) <small>This message was sent by [[m:User:I JethroBT (WMF)|I JethroBT (WMF)]] ([[m:User talk:I JethroBT (WMF)|talk]]) through [[m:User:MediaWiki message delivery|MediaWiki message delivery]].</small>
<!-- Message sent by User:I JethroBT (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:I_JethroBT_(WMF)/IEG_2015_Targets&oldid=13476366 -->
== Open call for Individual Engagement Grants ==
''My apologies for posting this message in English. Please help translate it if you can.''
Greetings! The '''[[m:IEG|Individual Engagement Grants program]] is accepting proposals''' until September 29th to fund new tools, community-building processes, and other experimental ideas that enhance the work of Wikimedia volunteers. Whether you need a small or large amount of funds (up to $30,000 USD), Individual Engagement Grants can support you and your team’s project development time in addition to project expenses such as materials, travel, and rental space.
*[[m:Grants:IEG#ieg-apply|'''Submit''' a grant request]]
*[[m:Grants:IdeaLab|'''Get help''' with your proposal in IdeaLab]] or [[m:Grants:IdeaLab/Events#Upcoming_events|an upcoming Hangout session]]
*[[m:Grants:IEG#ieg-engaging|'''Learn from examples''' of completed Individual Engagement Grants]]
Thanks,
[[m:User:I JethroBT (WMF)|I JethroBT (WMF)]], [[m:Community Resources|Community Resources]], Wikimedia Foundation. 21:53, 4 dhen t-Sultain 2015 (UTC)
([[m:User:I JethroBT (WMF)/IEG 2015 Targets|''Opt-out Instructions'']]) <small>This message was sent by [[m:User:I JethroBT (WMF)|I JethroBT (WMF)]] ([[m:User talk:I JethroBT (WMF)|talk]]) through [[m:User:MediaWiki message delivery|MediaWiki message delivery]].</small>
<!-- Message sent by User:I JethroBT (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:I_JethroBT_(WMF)/IEG_2015_Targets&oldid=13476366 -->
== Only one week left for Individual Engagement Grant proposals! ==
(Apologies for using English below, please help translate if you are able.)
'''There is still one week left to submit [[m:IEG|Individual Engagement Grant]] (IEG) proposals''' before the September 29th deadline. If you have ideas for new tools, community-building processes, and other experimental projects that enhance the work of Wikimedia volunteers, start your proposal today! Please encourage others who have great ideas to apply as well. Support is available if you want help turning your idea into a grant request.
*[[m:Grants:IEG#ieg-apply|'''Submit''' a grant request]]
*[[m:Grants:IdeaLab|'''Get help''' with your proposal in IdeaLab]]
*[[m:Grants:IEG#ieg-engaging|'''Learn from examples''' of completed Individual Engagement Grants]]
[[m:User:I JethroBT (WMF)|I JethroBT (WMF)]], [[m:Community Resources|Community Resources]] 21:01, 22 dhen t-Sultain 2015 (UTC)
<!-- Message sent by User:I JethroBT (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:I_JethroBT_(WMF)/IEG_2015_Targets&oldid=13754911 -->
== Reimagining WMF grants report ==
''(My apologies for using English here, please help translate if you are able.)''
Last month, we asked for community feedback on [[m:Grants:IdeaLab/Reimagining WMF grants| a proposal to change the structure of WMF grant programs]]. Thanks to the 200+ people who participated! '''[[m:Grants:IdeaLab/Reimagining_WMF_grants/Outcomes|
A report]]''' on what we learned and changed based on this consultation is now available.
Come read about the findings and next steps as WMF’s Community Resources team begins to implement changes based on your feedback. Your questions and comments are welcome on [[m:Grants talk:IdeaLab/Reimagining WMF grants/Outcomes|the outcomes discussion page]].
With thanks, [[m:User:I JethroBT (WMF)|I JethroBT (WMF)]] 16:56, 28 dhen t-Sultain 2015 (UTC)
<!-- Message sent by User:I JethroBT (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Grants:IdeaLab/Reimagining_WMF_grants/ProjectTargets&oldid=13850666 -->
== Community Wishlist Survey ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hi everyone! Apologies for posting in English. Translations are very welcome.
The [[:m:Community Tech|Community Tech team]] at the Wikimedia Foundation is focused on building improved curation and moderation tools for experienced Wikimedia contributors. We're now starting a '''[[:m:2015 Community Wishlist Survey|Community Wishlist Survey]]''' to find the most useful projects that we can work on.
For phase 1 of the survey, we're inviting all active contributors to submit brief proposals, explaining the project that you'd like us to work on, and why it's important. Phase 1 will last for 2 weeks. In phase 2, we'll ask you to vote on the proposals. Afterwards, we'll analyze the top 10 proposals and create a prioritized wishlist.
While most of this process will be conducted in English, we're inviting people from any Wikimedia wiki to submit proposals. We'll also invite volunteer translators to help translate proposals into English.
Your proposal should include: the problem that you want to solve, who would benefit, and a proposed solution, if you have one. You can submit your proposal on the Community Wishlist Survey page, using the entry field and the big blue button. We will be accepting proposals for 2 weeks, ending on November 23.
We're looking forward to hearing your ideas!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">Community Tech Team via [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 21:57, 9 dhen t-Samhain 2015 (UTC)</div>
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/Target_lists/Global_distribution&oldid=14554458 -->
== Wikimania 2016 scholarships ambassadors needed ==
<div lang="en" dir="ltr" class="mw-content-ltr">
Hello! [[wm2016:|Wikimania 2016]] scholarships will soon be open; by the end of the week we'll form the committee and we need your help, see [[wm2016:Special:MyLanguage/Scholarship committee|Scholarship committee]] for details.
If you want to carefully review nearly a thousand applications in January, you might be a perfect committee member. Otherwise, you can '''volunteer as "ambassador"''': you will observe all the committee activities, ensure that people from your language or project manage to apply for a scholarship, translate '''scholarship applications written in your language''' to English and so on. Ambassadors are allowed to ask for a scholarship, unlike committee members.
[[wm2016:Scholarship committee|Wikimania 2016 scholarships subteam]] 10:47, 10 dhen t-Samhain 2015 (UTC)
</div>
<!-- Message sent by User:Nemo bis@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=14347818 -->
== Harassment consultation ==
{{int:Please-translate}}
The Community Advocacy team the Wikimedia Foundation has opened a consultation on the topic of '''harassment''' on [[m:Harassment consultation 2015|Meta]]. The consultation period is intended to run for one month from today, November 16, and end on December 17. Please share your thoughts there on harassment-related issues facing our communities and potential solutions. (Note: this consultation is not intended to evaluate specific cases of harassment, but rather to discuss the problem of harassment itself.)
::*[[m:Harassment consultation 2015|Harassment consultation 2015]]
:Regards, [[m:Community Advocacy|Community Advocacy, Wikimedia Foundation]]
<!-- Message sent by User:PEarley (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:PEarley_(WMF)/Inspire_Mass_Message&oldid=14684364 -->
[[af:Wiktionary:Community Portal]]
[[chr:Wiktionary:Community portal]]
[[fj:actualités]]
[[ku:Wîkîferheng:Koma Wîkîferhengê]]
[[kw:Wiktionary:Porth an gemmynieth]]
[[li:In 't nuujs]]
[[ln:Wiktionary:Community Portal]]
[[lo:Wiktionary:Community Portal]]
[[lt:Vikižodynas:Bendruomenės portalas]]
[[mi:Wiktionary:Tomokanga hapori]]
[[mr:विक्शनरी:Community Portal]]
[[ms:Wiktionary:Portal Masyarakat]]
[[my:Wiktionary:Community portal]]
[[nah:Wiktionary:Calīxcuātl tocalpōl]]
[[nl:WikiWoordenboek:Hulp]]
[[nn:Wiktionary:Spørsmål og svar]]
[[oc:Wikiccionari:Community Portal]]
[[om:Wiktionary:Community Portal]]
[[or:ଉଇକିଅଭିଧାନ:ଆଲୋଚନା ସଭା]]
[[pa:Wiktionary:ਸੱਥ]]
[[pl:Wikisłownik:Pomoc]]
[[ps:ويکيسيند:Community Portal]]
[[pt:Wikcionário:Portal comunitário]]
[[sa:Wiktionary:Community Portal]]
[[scn:Wikizziunariu:Porta dâ cumunitati]]
[[sh:Wiktionary:Pijaca-Пијаца]]
[[si:වික්ෂනරි:ප්රජා ද්වාරය]]
[[ss:Wiktionary:Likhefi leinthanethi]]
[[st:Wiktionary:Community Portal]]
[[sv:Wiktionary:Deltagarportalen]]
[[sw:Wiktionary:Community Portal]]
[[ta:விக்சனரி:சமுதாய வலைவாசல்]]
[[te:విక్షనరీ:Community Portal]]
[[th:วิกิพจนานุกรม:ศาลาประชาคม]]
[[ti:Wiktionary:Community Portal]]
[[tk:Wikisözlük:Community Portal]]
[[tn:Wiktionary:Community Portal]]
[[ts:Wiktionary:Community Portal]]
[[tt:Wiktionary:Җәмгыять үзәге]]
[[uk:Вікісловник:Портал спільноти]]
[[ur:وکی لغت:باب برادری]]
[[vo:Vükivödabuk:Komotanefaleyan]]
[[yi:װיקיװערטערבוך:קאַװע־הױז]]
== [[m:Special:MyLanguage/Free Bassel/MassMessages/2015 Free Bassel banner straw poll|Your input requested on the proposed #FreeBassel banner campaign]] ==
''This is a message regarding the [[:m:Special:MyLanguage/Free Bassel/Banner|proposed 2015 Free Bassel banner]]. [[m:Special:MyLanguage/Free Bassel/MassMessages/2015 Free Bassel banner straw poll|Translations]] are available.''
Hi everyone,
This is to inform all Wikimedia contributors that a [[:m:Special:MyLanguage/Free Bassel/Banner/Straw poll|straw poll seeking your involvement]] has just been started on Meta-Wiki.
As some of your might be aware, a small group of Wikimedia volunteers have proposed a banner campaign informing Wikipedia readers about the urgent situation of our fellow Wikipedian, open source software developer and Creative Commons activist, [[:w:Bassel Khartabil|Bassel Khartabil]]. An exemplary [[:m:Special:MyLanguage/Free Bassel/Banner|banner]] and an [[:m:Special:MyLanguage/Free Bassel/Banner|explanatory page]] have now been prepared, and translated into about half a dozen languages by volunteer translators.
We are seeking [[:m:Special:MyLanguage/Free Bassel/Banner/Straw poll|your involvement to decide]] if the global Wikimedia community approves starting a banner campaign asking Wikipedia readers to call on the Syrian government to release Bassel from prison. We understand that a campaign like this would be unprecedented in Wikipedia's history, which is why we're seeking the widest possible consensus among the community.
Given Bassel's urgent situation and the resulting tight schedule, we ask everyone to [[:m:Special:MyLanguage/Free Bassel/Banner/Straw poll|get involved with the poll and the discussion]] to the widest possible extent, and to promote it among your communities as soon as possible.
(Apologies for writing in English; please kindly [[m:Special:MyLanguage/Free Bassel/MassMessages/2015 Free Bassel banner straw poll|translate]] this message into your own language.)
Thank you for your participation!
''Posted by the [[:m:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] 21:47, 25 November 2015 (UTC) • [[m:Special:MyLanguage/Free Bassel/MassMessages/2015 Free Bassel banner straw poll|Translate]] • [[:m:Talk:Free Bassel/Banner|Get help]]
<!-- Message sent by User:Varnent@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=14758733 -->
== Community Wishlist Survey ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hi everyone! Apologies for posting this in English. Translations are very welcome.
We're beginning the second part of the Community Tech team's '''[[:m:2015 Community Wishlist Survey/Voting|Community Wishlist Survey]]''', and we're inviting all active contributors to vote on the proposals that have been submitted.
Thanks to you and other Wikimedia contributors, 111 proposals were submitted to the team. We've split the proposals into categories, and now it's time to vote! You can vote for any proposal listed on the pages, using the <nowiki>{{Support}}</nowiki> tag. Feel free to add comments pro or con, but only support votes will be counted. The voting period will be 2 weeks, ending on December 14.
The proposals with the most support votes will be the team's top priority backlog to investigate and address. Thank you for participating, and we're looking forward to hearing what you think!
Community Tech via
</div> [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 14:38, 1 dhen Dùbhlachd 2015 (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/Global_distribution&oldid=14913494 -->
== Community Wishlist Survey ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hi everyone! Apologies for posting this in English. Translations are very welcome.
We're beginning the second part of the Community Tech team's '''[[:m:2015 Community Wishlist Survey/Voting|Community Wishlist Survey]]''', and we're inviting all active contributors to vote on the proposals that have been submitted.
Thanks to you and other Wikimedia contributors, 111 proposals were submitted to the team. We've split the proposals into categories, and now it's time to vote! You can vote for any proposal listed on the pages, using the <nowiki>{{Support}}</nowiki> tag. Feel free to add comments pro or con, but only support votes will be counted. The voting period will be 2 weeks, ending on December 14.
The proposals with the most support votes will be the team's top priority backlog to investigate and address. Thank you for participating, and we're looking forward to hearing what you think!
Community Tech via
</div> [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 07:04, 4 dhen Dùbhlachd 2015 (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/Global_distribution&oldid=14913494 -->
== [[m:Special:MyLanguage/Wikipedia 15|Get involved in Wikipedia 15!]] ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''This is a message from the [[m:Special:MyLanguage/Wikimedia Foundation|Wikimedia Foundation]]. [[m:Special:MyLanguage/Wikipedia 15/MassMessages/Get involved|Translations]] are available.''
[[File:International-Space-Station wordmark blue.svg|right|200px]]
As many of you know, January 15 is Wikipedia’s 15th Birthday!
People around the world are getting involved in the celebration and have started adding their [[m:Special:MyLanguage/Wikipedia 15/Events|events on Meta Page]]. While we are celebrating Wikipedia's birthday, we hope that all projects and affiliates will be able to utilize this celebration to raise awareness of our community's efforts.
Haven’t started planning? Don’t worry, there’s lots of ways to get involved. Here are some ideas:
* '''[[m:Special:MyLanguage/Wikipedia 15/Events|Join/host an event]]'''. We already have more than 80, and hope to have many more.
* '''[[m:Special:MyLanguage/Wikipedia 15/Media|Talk to local press]]'''. In the past 15 years, Wikipedia has accomplished extraordinary things. We’ve made a [[m:Special:MyLanguage/Wikipedia 15/15 years|handy summary]] of milestones and encourage you to add your own. More resources, including a [[m:Special:MyLanguage/Wikipedia 15/Media#releases|press release template]] and [[m:Special:MyLanguage/Communications/Movement Communications Skills|resources on working with the media]], are also available.
* '''[[m:Special:MyLanguage/Wikipedia 15/Material|Design a Wikipedia 15 logo]]'''. In place of a single icon for Wikipedia 15, we’re making dozens. Add your own with something fun and representative of your community. Just use the visual guide so they share a common sensibility.
* '''[[m:Special:MyLanguage/Wikipedia 15/Events/Package#birthdaywish|Share a message on social media]]'''. Tell the world what Wikipedia means to you, and add #wikipedia15 to the post. We might re-tweet or share your message!
Everything is linked on the [[m:Special:MyLanguage/Wikipedia 15|Wikipedia 15 Meta page]]. You’ll find a set of ten data visualization works that you can show at your events, and a [[c:Category:Wikipedia15 Mark|list of all the Wikipedia 15 logos]] that community members have already designed.
If you have any questions, please contact [[m:User:ZMcCune (WMF)|Zachary McCune]] or [[m:User:JSutherland (WMF)|Joe Sutherland]].
Thanks and Happy nearly Wikipedia 15!<br />
-The Wikimedia Foundation Communications team
''Posted by the [[m:User:MediaWiki message delivery|MediaWiki message delivery]], 20:58, 18 dhen Dùbhlachd 2015 (UTC) • [[m:Wikipedia 15/MassMessages/Get involved|{{int:please-translate}}]] • [[m:Talk:Wikipedia 15|{{int:help}}]]
</div>
<!-- Message sent by User:GVarnum-WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=15158198 -->
== Wikimania 2016 Scholarships - Deadline soon! ==
:{{int:Please-translate}}
A reminder - applications for scholarships for Wikimania 2016 in Esino Lario, Italy, are closing soon! Please get your applications in by January 9th. To apply, visit the page below:
:*[https://wikimania2016.wikimedia.org/wiki/Scholarships Wikimania 2016 Scholarships]
[[User:PEarley (WMF)|Patrick Earley (WMF)]] via [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 01:50, 5 dhen Fhaoilleach 2016 (UTC)
<!-- Message sent by User:PEarley (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:PEarley_(WMF)/Mass_Message_-_large&oldid=15209973 -->
== 2016 WMF Strategy consultation ==
:{{int:Please-translate}}
Hello, all.
The Wikimedia Foundation (WMF) has launched a consultation to help create and prioritize WMF strategy beginning July 2016 and for the 12 to 24 months thereafter. This consultation will be open, on Meta, from 18 January to 26 February, after which the Foundation will also use these ideas to help inform its Annual Plan. (More on our timeline can be found on that Meta page.)
Your input is welcome (and greatly desired) at the Meta discussion, [[:m:2016 Strategy/Community consultation|2016 Strategy/Community consultation]].
Apologies for English, where this is posted on a non-English project. We thought it was more important to get the consultation translated as much as possible, and good headway has been made there in some languages. There is still much to do, however! We created [[:m:2016 Strategy/Translations]] to try to help coordinate what needs translation and what progress is being made. :)
If you have questions, please reach out to me on my talk page or on the strategy consultation's talk page or by email to mdennis@wikimedia.org.
I hope you'll join us! [[:m:User:Mdennis (WMF)|Maggie Dennis]] via [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 19:06, 18 dhen Fhaoilleach 2016 (UTC)
<!-- Message sent by User:Mdennis (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:PEarley_(WMF)/Mass_Message_-_large&oldid=15253743 -->
== Open Call for Individual Engagement Grants ==
[[File:IEG barnstar 2.png|right|100px]]
{{int:Please-translate}}:
Greetings! The '''[[m:Special:MyLanguage/IEG|Individual Engagement Grants (IEG) program]] is accepting proposals''' until April 12th to fund new tools, research, outreach efforts, and other experiments that enhance the work of Wikimedia volunteers.
Whether you need a small or large amount of funds (up to $30,000 USD), IEGs can support you and your team’s project development time in addition to project expenses such as materials, travel, and rental space.
*[[m:Special:MyLanguage/Grants:IEG#ieg-apply|'''Submit''' a grant request]] or [[m:Special:MyLanguage/Grants:IdeaLab|'''draft''' your proposal]] in IdeaLab
*[[m:Special:MyLanguage/Grants:IdeaLab/Events#Upcoming_events|'''Get help''' with your proposal]] in an upcoming Hangout session
*[[m:Special:MyLanguage/Grants:IEG#ieg-engaging|'''Learn from examples''' of completed Individual Engagement Grants]]
With thanks, [[m:User:I JethroBT (WMF)|I JethroBT (WMF)]] 17:47, 31 dhen Mhàrt 2016 (UTC)
<!-- Message sent by User:I JethroBT (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:I_JethroBT_(WMF)/IEG_2015_Targets&oldid=15490024 -->
== Server switch 2016 ==
<div lang="en" dir="ltr" class="mw-content-ltr">
The [[foundation:|Wikimedia Foundation]] will be testing its newest data center in Dallas.
This will make sure Wikipedia and the other Wikimedia wikis can stay online even after a disaster.
To make sure everything is working, the Wikimedia Technology department needs to conduct a planned test. This test will show whether they can reliably switch from one data center to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
They will switch all traffic to the new data center on '''Tuesday, 19 April'''.<br/>
On '''Thursday, 21 April''', they will switch back to the primary data center.
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop during those two switches.
We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for approximately 15 to 30 minutes on Tuesday, 19 April and Thursday, 21 April, starting at 14:00 UTC (15:00 BST, 16:00 CEST, 10:00 EDT, 07:00 PDT).
If you try to edit or save during these times, you will see an error message.
We hope that no edits will be lost during these minutes, but we can't guarantee it.
If you see the error message, then please wait until everything is back to normal.
Then you should be able to save your edit.
But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped.
Red links might not be updated as quickly as normal.
If you create an article that is already linked somewhere else, the link will stay red longer than usual.
Some long-running scripts will have to be stopped.
*There will be a code freeze for the week of 18 April.
No non-essential code deployments will take place.
This test was originally planned to take place on March 22.
April 19th and 21st are the new dates.
You can [[wikitech:Switch Datacenter#Schedule for Q3 FY2015-2016 rollout|read the schedule at wikitech.wikimedia.org]].
They will post any changes on that schedule.
There will be more notifications about this.
'''Please share this information with your community.''' /[[m:User:Whatamidoing (WMF)|User:Whatamidoing (WMF)]] ([[m:User talk:Whatamidoing (WMF)|talk]]) 21:08, 17 dhen Ghiblean 2016 (UTC)
</div>
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Tech/Server_switch_2016/Delivery_list&oldid=15533827 -->
== Compact Links coming soon to this wiki ==
{{int:Please-translate}}
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:Compact-language-links-list.png|thumb|Screenshot of Compact Language Links interlanguage list]]
Hello, I wanted to give a heads up about an upcoming feature for this wiki which you may seen already in the [[:m:Tech/News/2016/25|Tech News]]. [[:mw:Universal_Language_Selector/Compact_Language_Links|Compact Language Links]] has been available as a beta-feature on all Wikimedia wikis since 2014. With compact language links enabled, users are shown a much shorter list of languages on the interlanguage link section of an article (see image). This will be enabled as a feature in the soon for all users, which can be turned on or off using a preference setting. We look forward to your feedback and please do let us know if you have any questions. Details about Compact Language Links can be read in the [[:mw:Universal_Language_Selector/Compact_Language_Links|project documentation]].
Due to the large scale enablement of this feature, we have had to use [[:m:Global_message_delivery|MassMessage]] for this announcement and as a result it is only written in English. We will really appreciate if this message can be translated for other users of this wiki. The main announcement can also be translated on [[:mw:Universal_Language_Selector/Compact_Language_Links/Announcement_draft_June_2016|this page]]. Thank you. On behalf of the Wikimedia Language team: [[:mw:User:Runab_WMF|Runa Bhattacharjee (WMF)]] ([[mw:User talk:Runab_WMF|talk]])-13:06, 29 dhen Ògmhios 2016 (UTC)
</div>
<!-- Message sent by User:Runab WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/ULS_Compact_Links/1_July&oldid=15730563 -->
== Compact Language Links enabled in this wiki today ==
{{int:Please-translate}}
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:Compact-language-links-list.png|thumb|Screenshot of Compact Language Links interlanguage list]]
[[:mw:Universal_Language_Selector/Compact_Language_Links|Compact Language Links]] has been available as a beta-feature on all Wikimedia wikis since 2014. With compact language links enabled, users are shown a much shorter list of languages on the interlanguage link section of an article (see image). Based on several factors, this shorter list of languages is expected to be more relevant for them and valuable for finding similar content in a language known to them. More information about compact language links can be found in [[:mw:Universal_Language_Selector/Compact_Language_Links|the documentation]].
From today onwards, compact language links has been enabled as the default listing of interlanguage links on this wiki. However, using the button at the bottom, you will be able to see a longer list of all the languages the article has been written in. The setting for this compact list can be changed by using the checkbox under ''User Preferences -> Appearance -> Languages''
The compact language links feature has been tested extensively by the Wikimedia Language team, which developed it. However, in case there are any problems or other feedback please let us know on the [[:mw:Talk:Universal_Language_Selector/Compact_Language_Links|project talk page]]. It is to be noted that on some wikis the presence of an existing older gadget that was used for a similar purpose may cause an interference for compact language list. We would like to bring this to the attention of the admins of this wiki. Full details are on [[phab:T131455|this phabricator ticket]] (in English).
Due to the large scale enablement of this feature, we have had to use [[:m:Global_message_delivery|MassMessage]] for this announcement and as a result it is only written in English. We will really appreciate if this message can be translated for other users of this wiki. Thank you. On behalf of the Wikimedia Language team: [[:mw:User:Runab_WMF|Runa Bhattacharjee (WMF)]] ([[mw:User talk:Runab_WMF|talk]])-03:05, 1 dhen Iuchar 2016 (UTC)
</div>
<!-- Message sent by User:Runab WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/ULS_Compact_Links/1_July&oldid=15735887 -->
== Open call for Project Grants ==
[[File:IEG barnstar 2.png|right|100px]]
{{int:Please-translate}}:
:Greetings! The '''[[m:Special:MyLanguage/Grants:Project|Project Grants program]] is accepting proposals''' from July 1st to August 2nd to fund new tools, research, offline outreach (including editathon series, workshops, etc), online organizing (including contests), and other experiments that enhance the work of Wikimedia volunteers.
:Whether you need a small or large amount of funds, Project Grants can support you and your team’s project development time in addition to project expenses such as materials, travel, and rental space.
:*[[m:Special:MyLanguage/Grants:Project/Apply|'''Submit''' a grant request]] or [[m:Special:MyLanguage/Grants:IdeaLab|'''draft''' your proposal]] in IdeaLab
:*[[m:Special:MyLanguage/Grants:IdeaLab/Events#Upcoming_events|'''Get help with your proposal''']] in an upcoming Hangout session
:*'''Learn from examples''' of completed [[m:Special:MyLanguage/Grants:IEG#ieg-engaging|Individual Engagement Grants]] or [[m:Special:MyLanguage/Grants:PEG/Requests#Grants_funded_by_the_WMF_in_FY_2015.E2.80.9316|Project and Event Grants]]
:Also accepting candidates to [[m:Special:MyLanguage/Grants:Project/Quarterly/Committee|join the Project Grants Committee through July 15.]]
:With thanks, [[m:User:I JethroBT (WMF)|I JethroBT (WMF)]] 15:25, 5 dhen Iuchar 2016 (UTC)
<!-- Message sent by User:I JethroBT (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:I_JethroBT_(WMF)/IEG_2015_Targets&oldid=15504704 -->
== Save/Publish ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
The [[:mw:Editing|Editing]] team is planning to change the name of the [https://translatewiki.net/w/i.php?title=Special:Translations&namespace=8&message=Savearticle “<bdi>{{int:Savearticle}}</bdi>”] button to [https://translatewiki.net/w/i.php?title=Special:Translations&namespace=8&message=Publishpage “'''<bdi>{{int:Publishpage}}</bdi>'''”] and [https://translatewiki.net/w/i.php?title=Special:Translations&namespace=8&message=Publishchanges “'''<bdi>{{int:Publishchanges}}</bdi>'''”]. “<bdi>{{int:Publishpage}}</bdi>” will be used when you create a new page. “<bdi>{{int:Publishchanges}}</bdi>” will be used when you change an existing page. The names will be consistent in all editing environments.[https://phabricator.wikimedia.org/T131132][https://phabricator.wikimedia.org/T139033]
This change will probably happen during the week of 30 August 2016. The change will be announced in [[:m:Special:MyLanguage/Tech/News|Tech News]] when it happens.
If you are fluent in a language other than English, please check the status of translations at translatewiki.net for [https://translatewiki.net/w/i.php?title=Special:Translations&namespace=8&message=Publishpage “'''<bdi>{{int:Publishpage}}</bdi>'''”] and [https://translatewiki.net/w/i.php?title=Special:Translations&namespace=8&message=Publishchanges “'''<bdi>{{int:Publishchanges}}</bdi>'''”].
The main reason for this change is to avoid confusion for new editors. Repeated user research studies with new editors have shown that some new editors believed that [https://translatewiki.net/w/i.php?title=Special:Translations&namespace=8&message=Savearticle “<bdi>{{int:Savearticle}}</bdi>”] would save a private copy of a new page in their accounts, rather than permanently publishing their changes on the web. It is important for this part of the user interface to be clear, since it is difficult to remove public information after it is published. We believe that the confusion caused by the “<bdi>{{int:Savearticle}}</bdi>” button increases the workload for experienced editors, who have to clean up the information that people unintentionally disclose, and report it to the functionaries and stewards to suppress it. Clarifying what the button does will reduce this problem.
Beyond that, the goal is to make all the wikis and languages more consistent, and some wikis made this change many years ago. The [[:m:Legal|Legal team]] at the Wikimedia Foundation supports this change. Making the edit interface easier to understand will make it easier to handle licensing and privacy questions that may arise.
Any help pages or other basic documentation about how to edit pages will also need to be updated, on-wiki and elsewhere. On wiki pages, you can use the wikitext codes <code><nowiki>{{int:Publishpage}}</nowiki></code> and <code><nowiki>{{int:Publishchanges}}</nowiki></code> to display the new labels in the user's preferred language. For the language settings in [[Special:Preferences|your account preferences]], these wikitext codes produce “<bdi>{{int:Publishpage}}</bdi>” and “<bdi>{{int:Publishchanges}}</bdi>”.
Please share this news with community members who teach new editors and with others who may be interested.
</div> [[m:User:Whatamidoing (WMF)|Whatamidoing (WMF)]] ([[m:User talk:Whatamidoing (WMF)|talk]]) 18:02, 9 An Lùnastal 2016 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=15790914 -->
== RevisionSlider ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
From September 13th on, [[mw:Special:MyLanguage/Extension:RevisionSlider|RevisionSlider]] will be available as a [[mw:Special:MyLanguage/Beta Features|beta feature]] in your wiki. The RevisionSlider adds a slider view to the diff page, so that you can easily move between revisions. The feature fulfills a wish from the [[m:WMDE Technical Wishes|German Community’s Technical Wishlist]]. Everyone is invited to test the feature and we hope that it will serve you well in your work! </div> [[user:Birgit Müller (WMDE)|Birgit Müller (WMDE)]] 15:08, 12 dhen t-Sultain 2016 (UTC)
<!-- Message sent by User:Birgit Müller (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_2&oldid=15903627 -->
== Wikidata for Wiktionary: let’s get ready for lexicographical data! ==
Hello all,
Sorry for writing this message in English, please feel free to translate it in your own language below.
The Wikidata development team will start working on integrating lexicographical data in the knowledge base soon and we want to make sure we do this together with you.
Wikidata is a constantly evolving project and after four years of existence, we start with implementing support for Wiktionary editors and content, by allowing you to store and improve lexicographical data, in addition to the concepts already maintained by thousands of editors on Wikidata.
We have been working on this idea for almost three years and improving it with a lot of inputs from community members to understand Wiktionary processes.
Starting this project, we hope that the editors will be able to collaborate across Wiktionaries more easily. We expect to increase the number of editors and visibility of languages, and we want to provide the groundwork for new tools for editors.
Our development plan contains several phases in order to build the structure to include lexicographical data:
* creating automatic interwiki links on Wiktionary,
* creating new entity types for lexemes, senses, and forms on Wikidata,
* providing data access to Wikidata from Wiktionary
* improving the display of lexicographical information on Wikidata.
During the next months, we will do our best to provide you the technical structure to store lexicographical data on Wikidata and use it on Wiktionary. Don’t hesitate to discuss this within your local community, and give us feedback about your needs and the particularities of your languages.
Information about supporting lexicographical entities on Wikidata is available [[d:Special:MyLanguage/Wikidata:Wiktionary|on this page]]. You can find an [https://upload.wikimedia.org/wikipedia/commons/6/60/Wikidata_for_Wiktionary_announcement.pdf overview of the project], [[d:Special:MyLanguage/Wikidata:Wiktionary/Development/Proposals/2015-05|the detail of the development plan]], answers to [[d:Special:MyLanguage/Wikidata:Wiktionary/FAQ|frequently asked questions]], and [[d:Special:MyLanguage/Wikidata:Wiktionary/How to help|a list]] of people ready to help us. If you want to have general discussions and questions about the project, please use [[d:Wikidata talk:Wiktionary|the general talk page]], as we won’t be able to follow all the talk pages on Wiktionaries. If you don’t feel comfortable with English, you can write in your own language and hopefully someone will volunteer to translate.
Bests regards, [[:d:User:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] ([[:d:User talk:Lea Lacroix (WMDE)|talk]])
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Lea_Lacroix_(WMDE)/Distribution_list&oldid=15905971 -->
== Grants to improve your project ==
''{{int:Please-translate}}:''
Greetings! The [[:m:Grants:Project|Project Grants program]] is currently accepting proposals for funding. There is just over a week left to submit before the October 11 deadline. If you have ideas for software, offline outreach, research, online community organizing, or other projects that enhance the work of Wikimedia volunteers, start your proposal today! Please encourage others who have great ideas to apply as well. Support is available if you want help turning your idea into a grant request.
*'''[[:m:Grants:Project/Apply|Submit a grant request]]'''
*'''Get help''': In [[:m:Grants:IdeaLab|IdeaLab]] or an upcoming [[:m:Grants:Project#Upcoming_events|Hangout session]]
*'''Learn from examples''' of completed [[:m:Grants:IEG#ieg-engaging|Individual Engagement Grants]] or [[:m:Grants:PEG/Requests#Grants_funded_by_the_WMF_in_FY_2015.E2.80.9316|Project and Event Grants]]
[[m:User:I JethroBT (WMF)|I JethroBT (WMF)]] ([[m:User talk:I JethroBT (WMF)|talk]]) 20:11, 30 dhen t-Sultain 2016 (UTC)
<!-- Message sent by User:I JethroBT (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:I_JethroBT_(WMF)/IEG_2015_Targets&oldid=15939807 -->
== Creative Commons 4.0 ==
Hello! I'm writing from the Wikimedia Foundation to invite you to give your feedback on a proposed move from CC BY-SA 3.0 to a CC BY-SA 4.0 license across all Wikimedia projects. The consultation will run from October 5 to November 8, and we hope to receive a wide range of viewpoints and opinions. Please, if you are interested, [[meta:Special:MyLanguage/Terms of use/Creative Commons 4.0|take part in the discussion on Meta-Wiki]].
''Apologies that this message is only in English. [[meta:Special:MyLanguage/Terms of use/Creative Commons 4.0/MassMessage|This message can be read and translated in more languages here]].'' [[User:JSutherland (WMF)|Joe Sutherland]] ([[User talk:JSutherland (WMF)|talk]]) 01:35, 6 dhen Dàmhair 2016 (UTC)
<!-- Message sent by User:JSutherland (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:JSutherland_(WMF)/MassMessage/1&oldid=15962252 -->
== Password reset ==
''I apologise that this message is in English. [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Security%2FPassword+reset&language=&action=page&filter= {{int:Centralnotice-shared-help-translate}}]''
We are having a problem with attackers taking over wiki accounts with privileged user rights (for example, admins, bureaucrats, oversighters, checkusers). It appears that this may be because of weak or reused passwords.
Community members are working along with members of multiple teams at the Wikimedia Foundation to address this issue.
In the meantime, we ask that everyone takes a look at the passwords they have chosen for their wiki accounts. If you know that you've chosen a weak password, or if you've chosen a password that you are using somewhere else, please change those passwords.
Select strong passwords – eight or more characters long, and containing letters, numbers, and punctuation. [[m:User:JSutherland (WMF)|Joe Sutherland]] ([[m:User talk:JSutherland (WMF)|{{int:Talkpagelinktext}}]]) / [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 23:59, 13 dhen t-Samhain 2016 (UTC)
<!-- Message sent by User:JSutherland (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:JSutherland_(WMF)/MassMessage/1&oldid=16060701 -->
== Adding to the above section (Password reset) ==
Please accept my apologies - that first line should read "[https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Security%2FPassword+reset&language=&action=page&filter= Help with translations!]". [[m:User:JSutherland (WMF)|Joe Sutherland (WMF)]] ([[m:User talk:JSutherland (WMF)|talk]]) / [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 00:11, 14 dhen t-Samhain 2016 (UTC)
<!-- Message sent by User:JSutherland (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:JSutherland_(WMF)/MassMessage/1&oldid=16060701 -->
== New way to edit wikitext ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
'''Summary''': There's a new opt-in Beta Feature of a [[:mw:2017 wikitext editor|wikitext mode for the visual editor]]. Please [[Special:Preferences#mw-prefsection-betafeatures|go try it out]].
We in the Wikimedia Foundation's Editing department are responsible for making editing better for all our editors, new and experienced alike. We've been slowly improving [[:mw:VisualEditor|the visual editor]] based on feedback, user tests, and feature requests. However, that doesn't work for all our user needs: whether you need to edit a wikitext talk page, create a template, or fix some broken reference syntax, sometimes you need to use wikitext, and many experienced editors prefer it.
Consequently, we've planned a "wikitext mode" for the visual editor for a long time. It provides as much of the visual editor's features as possible, for those times that you need or want wikitext. It has the same user interface as the visual editor, including the same toolbar across the top with the same buttons. It provides access to the [[:mw:citoid|citoid service]] for formatting citations, integrated search options for inserting images, and the ability to add new templates in a simple dialog. Like in the visual editor, if you paste in formatted text copied from another page, then formatting (such as bolding) will automatically be converted into wikitext.
All wikis now have access to this mode as a [[:mw:Beta Features|Beta Feature]]. When enabled, it replaces your existing [[:mw:Editor|wikitext editor]] everywhere. If you don't like it, you can reverse this at any time by turning off the Beta Feature in your preferences. We don't want to surprise anyone, so it's strictly an ''opt-in-only'' Beta Feature. It won't switch on automatically for anyone, even if you have previously checked the box to "{{Int:Betafeatures-auto-enroll}}".
The new wikitext edit mode is based on the visual editor, so it requires JavaScript (as does the [[:mw:Extension:WikiEditor|current wikitext editor]]). It doesn't work with gadgets that have only been designed for the older one (and ''vice versa''), so some users will miss gadgets they find important. We're happy to [[:mw:VisualEditor/Gadgets|work with gadget authors to help them update their code to work]] with both editors. We're not planning to get rid of the current main wikitext editor on desktop in the foreseeable future. We're also not going to remove the existing ability to edit plain wikitext without JavaScript. Finally, though it should go without saying, if you prefer to continue using the current wikitext editor, then you may so do.
This is an early version, and we'd love to know what you think so we can make it better. Please leave feedback about the new mode [[:mw:2017 wikitext editor/Feedback|on the feedback page]]. You may write comments in any language. Thank you.
</div> [[:mw:User:Jdforrester (WMF)|James Forrester]] (Product Manager, Editing department, Wikimedia Foundation) --19:32, 14 dhen Dùbhlachd 2016 (UTC)
<!-- Message sent by User:Elitre (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=15942009 -->
== Review of initial updates on Wikimedia movement strategy process ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''Note: Apologies for cross-posting and sending in English. [[m:Strategy/Wikimedia movement/2017/Updates/Initial announcements review|Message is available for translation on Meta-Wiki]].''
The Wikimedia movement is beginning a movement-wide strategy discussion, a process which will run throughout 2017. For 15 years, Wikimedians have worked together to build the largest free knowledge resource in human history. During this time, we've grown from a small group of editors to a diverse network of editors, developers, affiliates, readers, donors, and partners. Today, we are more than a group of websites. We are a movement rooted in values and a powerful vision: all knowledge for all people. As a movement, we have an opportunity to decide where we go from here.
This movement strategy discussion will focus on the future of our movement: where we want to go together, and what we want to achieve. We hope to design an inclusive process that makes space for everyone: editors, community leaders, affiliates, developers, readers, donors, technology platforms, institutional partners, and people we have yet to reach. There will be multiple ways to participate including on-wiki, in private spaces, and in-person meetings. You are warmly invited to join and make your voice heard.
The immediate goal is to have a strategic direction by Wikimania 2017 to help frame a discussion on how we work together toward that strategic direction.
Regular updates are being sent to the [[mail:Wikimedia-l|Wikimedia-l mailing list]], and posted [[m:Strategy/Wikimedia_movement/2017/Updates|on Meta-Wiki]]. Beginning with this message, monthly reviews of these updates will be sent to this page as well. [[m:Strategy/Wikimedia movement/2017/Updates/Signup|Sign up]] to receive future announcements and monthly highlights of strategy updates on your user talk page.
Here is a review of the updates that have been sent so far:
* [[m:Strategy/Wikimedia movement/2017/Updates/15 December 2016 - Update 1 on Wikimedia movement strategy process|Update 1 on Wikimedia movement strategy process]] (15 December 2016)
** Introduction to process and information about budget spending resolution to support it
* [[m:Strategy/Wikimedia movement/2017/Updates/23 December 2016 - Update 2 on Wikimedia movement strategy process|Update 2 on Wikimedia movement strategy process]] (23 December 2016)
** Start of search for Lead Architect for movement strategy process
* [[m:Strategy/Wikimedia movement/2017/Updates/8 January 2017 - Update 3 on Wikimedia movement strategy process|Update 3 on Wikimedia movement strategy process]] (8 January 2017)
** Plans for strategy sessions at upcoming Wikimedia Conference 2017
* [[m:Strategy/Wikimedia movement/2017/Updates/11 January 2017 - Update 4 on Wikimedia movement strategy process|Update 4 on Wikimedia movement strategy process]] (11 January 2017)
** Introduction of williamsworks
* [[m:Strategy/Wikimedia movement/2017/Updates/2 February 2017 - Update 5 on Wikimedia movement strategy process|Update 5 on Wikimedia movement strategy process]] (2 February 2017)
** The core movement strategy team, team tracks being developed, introduction of the Community Process Steering Committee, discussions at WikiIndaba conference 2017 and the Wikimedia movement affiliates executive directors gathering in Switzerland
* [[m:Strategy/Wikimedia movement/2017/Updates/10 February 2017 - Update 6 on Wikimedia movement strategy process|Update 6 on Wikimedia movement strategy process]] (10 February 2017)
** Tracks A & B process prototypes and providing feedback, updates on development of all four Tracks
More information about the movement strategy is available on the [[m:Strategy/Wikimedia movement/2017|Meta-Wiki 2017 Wikimedia movement strategy portal]].
''Posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] on behalf of the [[m:Special:MyLanguage/Wikimedia Foundation|Wikimedia Foundation]], 20:30, 15 dhen Ghearran 2017 (UTC) • [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Updates/Initial announcements review|{{int:please-translate}}]] • [[m:Talk:Strategy/Wikimedia movement/2017/Updates|Get help]]''
</div>
<!-- Message sent by User:GVarnum-WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=16297862 -->
== Overview #2 of updates on Wikimedia movement strategy process ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''Note: Apologies for cross-posting and sending in English. [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Updates/Overview 2 of updates on Wikimedia movement strategy process|This message is available for translation on Meta-Wiki]].''
As we mentioned last month, the Wikimedia movement is beginning a movement-wide strategy discussion, a process which will run throughout 2017. This movement strategy discussion will focus on the future of our movement: where we want to go together, and what we want to achieve.
Regular updates are being sent to the [[mail:Wikimedia-l|Wikimedia-l mailing list]], and posted [[m:Special:MyLanguage/Strategy/Wikimedia_movement/2017/Updates|on Meta-Wiki]]. Each month, we are sending overviews of these updates to this page as well. [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Updates/Signup|Sign up]] to receive future announcements and monthly highlights of strategy updates on your user talk page.
Here is a overview of the updates that have been sent since our message last month:
* [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Updates/16 February 2017 - Update 7 on Wikimedia movement strategy process|Update 7 on Wikimedia movement strategy process]] (16 February 2017)
** Development of documentation for Tracks A & B
* [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Updates/24 February 2017 - Update 8 on Wikimedia movement strategy process|Update 8 on Wikimedia movement strategy process]] (24 February 2017)
** Introduction of Track Leads for all four audience tracks
* [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Updates/2 March 2017 - Update 9 on Wikimedia movement strategy process|Update 9 on Wikimedia movement strategy process]] (2 March 2017)
** Seeking feedback on documents being used to help facilitate upcoming community discussions
More information about the movement strategy is available on the [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017|Meta-Wiki 2017 Wikimedia movement strategy portal]].
''Posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] on behalf of the [[m:Special:MyLanguage/Wikimedia Foundation|Wikimedia Foundation]], 19:43, 9 dhen Mhàrt 2017 (UTC) • [[m:Strategy/Wikimedia movement/2017/Updates/Overview 2 of updates on Wikimedia movement strategy process|{{int:please-translate}}]] • [[m:Talk:Strategy/Wikimedia movement/2017/Updates|Get help]]''
</div>
<!-- Message sent by User:GVarnum-WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=16350625 -->
== We invite you to join the movement strategy conversation (now through April 15) ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
: ''This message, "[[mailarchive:wikimediaannounce-l/2017-March/001383.html|We invite you to join the movement strategy conversation (now through April 15)]]", was sent through multiple channels by [[m:User:GVarnum-WMF|Gregory Varnum]] on 15 and 16 of March 2017 to village pumps, affiliate talk pages, movement mailing lists, and MassMessage groups. A similar message was sent by [[m:User:Nicole_Ebber_(WMDE)|Nicole Ebber]] to organized groups and their mailing lists on 15 of March 2017. This version of the message is available for translation and documentation purposes''
Dear Wikimedians/Wikipedians:
Today we are starting a broad discussion to define Wikimedia's future role in the world and develop a collaborative strategy to fulfill that role. You are warmly invited to join the conversation.
There are many ways to participate, by joining an existing conversation or starting your own:
[[m:Special:MyLanguage/Strategy/Wikimedia_movement/2017/Track_A|Track A (organized groups)]]: Discussions with your affiliate, committee or other organized group (these are groups that support the Wikimedia movement).
Track B (individual contributors): [[m:Special:MyLanguage/Strategy/Wikimedia_movement/2017/Cycle_1|On Meta]] or your [[m:Special:MyLanguage/Strategy/Wikimedia_movement/2017/Participate|local language or project wiki]].
This is the first of three conversations, and it will run between now and April 15. The purpose of cycle 1 is to discuss the future of the movement and generate major themes around potential directions. What do we want to build or achieve together over the next 15 years?
We welcome you, as we create this conversation together, and look forward to broad and diverse participation from all parts of our movement.
* [[m:Special:MyLanguage/Strategy/Wikimedia_movement/2017|Find out more about the movement strategy process]]
* [[m:Special:MyLanguage/Strategy/Wikimedia_movement/2017/Toolkit/Discussion_Coordinator_Role|Learn more about volunteering to be a Discussion Coordinator]]
Sincerely,
Nicole Ebber (Track A Lead), Jaime Anstee (Track B Lead), & the [[m:Special:MyLanguage/Strategy/Wikimedia_movement/2017/People|engagement support teams]]</div></div> 05:10, 18 dhen Mhàrt 2017 (UTC)
<!-- Message sent by User:GVarnum-WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Strategy/Wikimedia_movement/2017/Updates/Global_message_delivery&oldid=16453957 -->
== [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Start of the 2017 Wikimedia Foundation Board of Trustees elections|Start of the 2017 Wikimedia Foundation Board of Trustees elections]] ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''Please accept our apologies for cross-posting this message. [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Start of the 2017 Wikimedia Foundation Board of Trustees elections|This message is available for translation on Meta-Wiki]].''
[[File:Wikimedia-logo black.svg|right|150px|link=m:Special:MyLanguage/Wikimedia Foundation elections/2017]]
On behalf of the Wikimedia Foundation Elections Committee, I am pleased to announce that self-nominations are being accepted for the [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2017/Board_of_Trustees/Call_for_candidates|2017 Wikimedia Foundation Board of Trustees Elections]].
The [[m:Special:MyLanguage/Wikimedia Foundation Board of Trustees|Board of Trustees]] (Board) is the decision-making body that is ultimately responsible for the long-term sustainability of the Wikimedia Foundation, so we value wide input into its selection. More information about this role can be found [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Board of Trustees|on Meta-Wiki]]. Please read the [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Board of Trustees/Call for candidates|letter from the Board of Trustees calling for candidates]].
'''The [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Board of Trustees/Candidates|candidacy submission phase]] will last from April 7 (00:00 UTC) to April 20 (23:59 UTC).'''
'''We will also be accepting questions to ask the candidates from April 7 to April 20. [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Board of Trustees/Questions|You can submit your questions on Meta-Wiki]].'''
Once the questions submission period has ended on April 20, the Elections Committee will then collate the questions for the candidates to respond to beginning on April 21.
The goal of this process is to fill the '''three community-selected seats''' on the Wikimedia Foundation Board of Trustees. The election results will be used by the Board itself to select its new members.
The full schedule for the Board elections is as follows. All dates are '''inclusive''', that is, from the beginning of the first day (UTC) to the end of the last.
* April 7 (00:00 UTC) – April 20 (23:59 UTC) – '''Board nominations'''
* April 7 – April 20 – '''Board candidates questions submission period'''
* April 21 – April 30 – '''Board candidates answer questions'''
* May 1 – May 14 – '''Board voting period'''
* May 15–19 – '''Board vote checking'''
* May 20 – '''Board result announcement goal'''
In addition to the Board elections, we will also soon be holding elections for the following roles:
* '''Funds Dissemination Committee (FDC)'''
** There are five positions being filled. More information about this election will be available [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Funds Dissemination Committee|on Meta-Wiki]].
* '''Funds Dissemination Committee Ombudsperson (Ombuds)'''
** One position is being filled. More information about this election will be available [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Funds Dissemination Committee Ombudsperson|on Meta-Wiki]].
Please note that this year the Board of Trustees elections will be held before the FDC and Ombuds elections. Candidates who are not elected to the Board are explicitly permitted and encouraged to submit themselves as candidates to the FDC or Ombuds positions after the results of the Board elections are announced.
More information on this year's elections can be found [[m:Special:MyLanguage/Wikimedia Foundation elections/2017|on Meta-Wiki]]. Any questions related to the election can be posted on the [[m:Talk:Wikimedia Foundation elections/2017|election talk page on Meta-Wiki]], or sent to the election committee's mailing list, <tt dir="ltr" style="white-space:nowrap;font-size:12px;line-height:1.5">board-elections[[File:At sign.svg|15x15px|middle|link=|alt=(at)]]wikimedia.org</tt>.
On behalf of the Election Committee,<br />
[[m:User:KTC|Katie Chan]], Chair, [[m:Special:MyLanguage/Wikimedia Foundation elections committee|Wikimedia Foundation Elections Committee]]<br />
[[m:User:JSutherland (WMF)|Joe Sutherland]], Community Advocate, Wikimedia Foundation
''Posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] on behalf of the [[m:Special:MyLanguage/Wikimedia Foundation elections committee|Wikimedia Foundation Elections Committee]], 03:37, 7 dhen Ghiblean 2017 (UTC) • [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Start of the 2017 Wikimedia Foundation Board of Trustees elections|{{int:please-translate}}]] • [[m:Talk:Wikimedia Foundation elections/2017|Get help]]''</div>
<!-- Message sent by User:GVarnum-WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=16441214 -->
== Read-only mode for 20 to 30 minutes on 19 April and 3 May ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch 2017|Read this message in another language]] • {{int:please-translate}}
The [[foundation:|Wikimedia Foundation]] will be testing its secondary data center in Dallas. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to conduct a planned test. This test will show whether they can reliably switch from one data center to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
They will switch all traffic to the secondary data center on '''Wednesday, 19 April 2017'''.
On '''Wednesday, 3 May 2017''', they will switch back to the primary data center.
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop during those two switches. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for approximately 20 to 30 minutes on Wednesday, 19 April and Wednesday, 3 May. The test will start at [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20170419T14 14:00 UTC] (15:00 BST, 16:00 CEST, 10:00 EDT, 07:00 PDT, 23:00 JST, and in New Zealand at 02:00 NZST on Thursday 20 April and Thursday 4 May).
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
*There will be code freezes for the weeks of 17 April 2017 and 1 May 2017. Non-essential code deployments will not happen.
This project may be postponed if necessary. You can [[wikitech:Switch Datacenter#Schedule for 2017 switch|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. '''Please share this information with your community.''' /<span dir=ltr>[[m:User:Whatamidoing (WMF)|User:Whatamidoing (WMF)]] ([[m:User talk:Whatamidoing (WMF)|talk]])</span>
</div></div>[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 17:33, 11 dhen Ghiblean 2017 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=16545942 -->
== Cognate & automatic interlanguage links ==
Hello all,
''(I'm sorry to write in English, feel free to translate in your own language below)''
From '''April 24th''', a new interlanguage link system will be deployed on all Wiktionaries. This extension, '''[[mw:Special:MyLanguage/Extension:Cognate|Cognate]]''', automatically links the pages with the same title between the Wiktionaries. This means they no longer have to be added in the pages of the main namespace.
This new feature has been developed by Wikimedia Deutschland as the first step of the project [[d:Special:MyLanguage/Wikidata:Wiktionary|Wikidata for Wiktionary]], but does not rely on Wikidata.
To allow the feature to operate, all the former interlanguage links have to be removed from the wikitext. You can do this by using a bot, as it was done on Wikipedia in the past. If you leave them in they will overwrite the automatic links.
During the development we had a lot of discussions with Wiktionary editors to understand their needs, but it's possible that some automatic links don't work as you would expect. If you find some bugs or have suggestions for improvements, feel free to add a sub-task on [[phab:T987|Phabricator]] or add a message on [[mw:Extension talk:Cognate|this talk page]].
Thanks, [[user:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] ([[talk user:Lea Lacroix (WMDE)|talk]])
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Lea_Lacroix_(WMDE)/List_Cognate_english&oldid=16585986 -->
== [https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/341?setlang={{CONTENTLANG}} Voting has begun in 2017 Wikimedia Foundation Board of Trustees elections] ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">[[File:Wikimedia-logo black.svg|{{#switch:{{CONTENTLANG}}|ar=left|he=left|right}}|125px|link=m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Board voting has begun]]''This is a message from the [[m:Special:MyLanguage/Wikimedia Foundation elections committee|Wikimedia Foundation Elections Committee]]. [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Board voting has begun|Translations]] are available.''
[https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/341?setlang={{CONTENTLANG}}&uselang={{CONTENTLANG}} Voting has begun] for [[m:Wikimedia Foundation elections/2017#Requirements|eligible voters]] in the 2017 elections for the ''[[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Board of Trustees|Wikimedia Foundation Board of Trustees]]''.
The [[m:Wikimedia Foundation Board of Trustees|Wikimedia Foundation Board of Trustees]] is the ultimate governing authority of the Wikimedia Foundation, a 501(c)(3) non-profit organization registered in the United States. The Wikimedia Foundation manages many diverse projects such as Wikipedia and Commons.
The voting phase lasts from 00:00 UTC May 1 to 23:59 UTC May 14. '''[https://meta.wikimedia.org/wiki/Special:SecurePoll/vote/341?setlang={{CONTENTLANG}}&uselang={{CONTENTLANG}} Click here to vote].''' More information on the candidates and the elections can be found on the [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Board of Trustees|2017 Board of Trustees election page]] on Meta-Wiki.
On behalf of the Elections Committee,<br/>
[[m:User:KTC|Katie Chan]], Chair, [[m:Special:MyLanguage/Wikimedia Foundation elections committee|Wikimedia Foundation Elections Committee]]<br/>
[[m:User:JSutherland (WMF)|Joe Sutherland]], Community Advocate, Wikimedia Foundation
''Posted by the [[m:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] • [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Board voting has begun|Translate]] • [[m:Talk:Wikimedia Foundation elections/2017|Get help]]</div> 19:14, 3 dhen Chèitean 2017 (UTC)''
<!-- Message sent by User:GVarnum-WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=16683836 -->
== Beta Feature Two Column Edit Conflict View ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
From May 9, the [[mw:Special:MyLanguage/Help:Two_Column_Edit_Conflict_View|Two Column Edit Conflict View]] will be available as a [[mw:Special:MyLanguage/Beta Features|beta feature]] on all wikis. The Two Column Edit Conflict View is a new interface for the edit conflict resolution page. It highlights differences between the editor's and the conflicting changes to make it easy to copy and paste pieces of the text and resolve the conflict. The feature fulfils a request for a more user-friendly edit conflict resolution from the [[m:WMDE Technical Wishes|German Community’s Technical Wishlist]]. Everyone is invited to test the feature and we hope that it will serve you well! </div> [[m:user:Birgit Müller (WMDE)|Birgit Müller (WMDE)]] 14:41, 8 dhen Chèitean 2017 (UTC)
<!-- Message sent by User:Birgit Müller (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_2&oldid=16712264 -->
== RevisionSlider ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
[[mw:Special:MyLanguage/Extension:RevisionSlider|RevisionSlider]] will be available as a default feature for all users on all wikis from May 17. The RevisionSlider adds a slider view to the diff page so that you can easily move between revisions. The slider view is collapsed by default, and will load by clicking on it. It can also be turned off entirely in the user preferences. RevisionSlider has been a default feature on German, Arabic and Hebrew Wikipedia for 6 months and a beta feature on all wikis for 8 months. The feature fulfills a wish from the [[m:WMDE Technical Wishes|German Community’s Technical Wishlist]]. Thanks to everyone who tested RevisionSlider and gave valuable feedback to improve the feature! We hope that RevisionSlider will continue to serve you well in your work. </div> [[m:user:Birgit Müller (WMDE)|Birgit Müller (WMDE)]] 14:44, 16 dhen Chèitean 2017 (UTC)
<!-- Message sent by User:Birgit Müller (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_2&oldid=16715712 -->
== [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Cycle 2|Join the next cycle of Wikimedia movement strategy discussions (underway until June 12)]] ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
:''[[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Updates/Cycle 2 discussions launch|Message is available for translation on Meta-Wiki]]''
[[File:Wikimedia-logo.svg|{{#switch:{{CONTENTLANG}}|ar=left|he=left|right}}|150px]]
The Wikimedia movement strategy core team and working groups have completed reviewing the more than 1800 thematic statements we received from the first discussion. They have identified [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Cycle 2|5 themes that were consistent across all the conversations]] - each with their own set of sub-themes. These are not the final themes, just an initial working draft of the core concepts.
You are invited to [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Participate|join the online and offline discussions taking place]] on these 5 themes. This round of discussions will take place between now and June 12th. You can discuss as many as you like; we ask you to participate in the ones that are most (or least) important to you.
Here are the five themes, each has a page on Meta-Wiki with more information about the theme and how to participate in that theme's discussion:
* [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Cycle 2/Healthy, Inclusive Communities|Healthy, Inclusive Communities]]
* [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Cycle 2/The Augmented Age|The Augmented Age]]
* [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Cycle 2/A Truly Global Movement|A Truly Global Movement]]
* [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Cycle 2/The Most Respected Source of Knowledge|The Most Respected Source of Knowledge]]
* [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Cycle 2/Engaging in the Knowledge Ecosystem|Engaging in the Knowledge Ecosystem]]
On the [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Participate|movement strategy portal on Meta-Wiki]], you can find more information about each of these themes, their discussions, and how to participate.
''Posted by [[m:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] on behalf of the [[m:Special:MyLanguage/Wikimedia Foundation|Wikimedia Foundation]] • [[m:Special:MyLanguage/Strategy/Wikimedia movement/2017/Updates/Cycle 2 discussions launch|{{int:please-translate}}]] • [[m:Talk:Strategy/Wikimedia movement/2017/Updates|Get help]]''</div> 21:09, 16 dhen Chèitean 2017 (UTC)
<!-- Message sent by User:GVarnum-WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Strategy/Wikimedia_movement/2017/Updates/Global_message_delivery&oldid=16773425 -->
== [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Start of the 2017 Wikimedia Foundation Funds Dissemination Committee elections|Start of the 2017 Wikimedia Foundation Funds Dissemination Committee elections]] ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">[[File:Wikimedia-logo black.svg|{{#switch:{{CONTENTLANG}}|ar=left|he=left|right}}|125px|link=m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Start of the 2017 Wikimedia Foundation Funds Dissemination Committee elections]]
:''[[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Start of the 2017 Wikimedia Foundation Funds Dissemination Committee elections|Translations of this message are available on Meta-Wiki]].''
On behalf of the Wikimedia Foundation Elections Committee, we are pleased to announce that self-nominations are being accepted for the [[m:Wikimedia Foundation elections/2017/Funds Dissemination Committee/Call for candidates|2017 Wikimedia Foundation Funds Dissemination Committee]] and [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Funds Dissemination Committee Ombudsperson|Funds Dissemination Committee Ombudsperson]] elections. Please read the letter from the Wikimedia Foundation calling for candidates at [[m:Wikimedia Foundation elections/2017/Funds Dissemination Committee/Call for candidates|on the 2017 Wikimedia Foundation elections portal]].
''Funds Dissemination Committee''<br />
The Funds Dissemination Committee (FDC) makes recommendations about how to allocate Wikimedia movement funds to eligible entities. There are five positions being filled. More information about this role can be found at [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Funds Dissemination Committee|the FDC elections page]].
''Funds Dissemination Committee Ombudsperson''<br />
The Funds Dissemination Committee Ombudsperson receives complaints and feedback about the FDC process, investigates complaints at the request of the Board of Trustees, and summarizes the investigations and feedback for the Board of Trustees on an annual basis. One position is being filled. More information about this role can be found at [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Funds Dissemination Committee Ombudsperson|the FDC Ombudsperson elections page]].
'''The [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Funds Dissemination Committee/Candidates|candidacy submission phase]] will last until May 28 (23:59 UTC).'''
'''We will also be accepting questions to ask the candidates until May 28. [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Funds Dissemination Committee/Questions|You can submit your questions on Meta-Wiki]].''' Once the questions submission period has ended on May 28, the Elections Committee will then collate the questions for the candidates to respond to.
The goal of this process is to fill the '''five community-selected seats''' on the Wikimedia Foundation Funds Dissemination Committee and the '''community-selected ombudsperson'''. The election results will be used by the Board itself to make the appointments.
The full schedule for the FDC elections is as follows. All dates are '''inclusive''', that is, from the beginning of the first day (UTC) to the end of the last.
* May 15 (00:00 UTC) – May 28 (23:59 UTC) – '''Nominations'''
* May 15 – May 28 – '''Candidates questions submission period'''
* May 29 – June 2 – '''Candidates answer questions'''
* June 3 – June 11 – '''Voting period'''
* June 12–14 – '''Vote checking'''
* June 15 – '''Goal date for announcing election results'''
More information on this year's elections can be found at [[m:Special:MyLanguage/Wikimedia Foundation elections/2017|the 2017 Wikimedia Foundation elections portal]].
Please feel free to post a note about the election on your project's village pump. Any questions related to the election can be posted on [[m:Talk:Wikimedia Foundation elections/2017|the talk page on Meta-Wiki]], or sent to the election committee's mailing list, <tt dir="ltr" style="white-space:nowrap;font-size:12px;line-height:1.5">board-elections[[File:At sign.svg|15x15px|middle|link=|alt=(at)]]wikimedia.org</tt>.
On behalf of the Election Committee,<br />
[[m:User:KTC|Katie Chan]], Chair, [[m:Special:MyLanguage/Wikimedia Foundation elections committee|Wikimedia Foundation Elections Committee]]<br />
[[m:User:JSutherland (WMF)|Joe Sutherland]], Community Advocate, Wikimedia Foundation
''Posted by the [[m:Special:MyLanguage/User:MediaWiki message delivery|MediaWiki message delivery]] • [[m:Special:MyLanguage/Wikimedia Foundation elections/2017/Updates/Start of the 2017 Wikimedia Foundation Funds Dissemination Committee elections|Translate]] • [[m:Talk:Wikimedia Foundation elections/2017|Get help]]''</div> 21:05, 23 dhen Chèitean 2017 (UTC)
<!-- Message sent by User:GVarnum-WMF@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=16804695 -->
== Enable sitelinks on Wikidata for Wiktionary pages ==
<div lang="en" dir="ltr" class="mw-content-ltr">Hello,
I’m sorry to write this message in English. Please help us [[d:Special:MyLanguage/Wikidata:Wiktionary/Sitelinks|translating the full message here]]!
Short version: From June 20th, we are going to store the interwiki links of all the namespaces (except main, user and talk) in Wikidata. This will not break your Wiktionary, but if you want to use all the features, you will have to remove your sitelinks from wikitext and connect your pages to Wikidata.
[[d:Special:MyLanguage/Wikidata:Wiktionary/Sitelinks|Long version available and translatable here.]]
If you have any question or concern, feel free to ping me.
Thanks, [[m:User:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] ([[m:User talk:Lea Lacroix (WMDE)|talk]]) 08:38, 1 dhen Ògmhios 2017 (UTC)</div>
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Lea_Lacroix_(WMDE)/List_Cognate_english&oldid=16834421 -->
== Sitelinks are enabled on Wikidata for Wiktionary pages (outside main namespace) ==
Hello,
I’m sorry to write this message in English. Please help us translating the full message [[d:Wikidata:Wiktionary/Sitelinks|here]]!
Short version: Since yesterday, we are able to store the interwiki links of all the Wiktionaries namespaces (except main, citations, user and talk) in Wikidata. This will not break your Wiktionary, but if you want to use all the features, you will have to remove your sitelinks from wikitext and connect your pages to Wikidata.
Important: even if it is technically possible, you '''should not link Wiktionary main namespace pages''' from Wikidata. The interwiki links for them are already provided by [[mw:Extension:Cognate|Cognate]].
[[d:Wikidata:Wiktionary/Sitelinks|Long version available and translatable here.]]
If you encounter any problem or find a bug, feel free to ping me.
Thanks, [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 08:28, 21 dhen Ògmhios 2017 (UTC)
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Lea_Lacroix_(WMDE)/List_Cognate_english&oldid=16834421 -->
== Enabling Page Previews ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
''' Enabling Page Previews '''
Hello,
Based on the positive results of [[:mw:Beta Features/Hovercards#Success_Metrics_and_Feature_Evaluation|a series of quantitative and qualitative tests]], the [[mw:Reading|Reading web team]] at the Wikimedia Foundation would like to enable the [[mw:Page Previews|Page Previews]] feature for this project.
Page Previews provide a preview of any linked article, giving readers a quick understanding of a related article without leaving the current page. However, we realize the needs of the Wiktionary community will not be satisfied by the current implementation of the feature. We are interested in developing separate previews for Wiktionary that will display the wiktionary definition of an item, as well as an image, if available.
We'd like to invite some discussion around interest in this feature, as well as the requirements and elements that would make it useful for the Wiktionary community.
</div></div> [[User:CKoerner (WMF)|CKoerner (WMF)]] 15:02, 6 dhen Iuchar 2017 (UTC)
<!-- Message sent by User:CKoerner (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:CKoerner_(WMF)/Enable_Hovercards_Wiktionary/Distribution_list&oldid=16968644 -->
== Accessible editing buttons ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">The MediaWiki developers have been slowly improving the accessibility of the user interface. The next step in this transition will change the appearance of some buttons and may break some outdated (non-updated or unmaintained) user scripts and gadgets.
You can see and use the [https://www.mediawiki.org/wiki/Project:Sandbox?action=submit&ooui=0 old] and [https://www.mediawiki.org/wiki/Project:Sandbox?action=submit&ooui=1 new] versions now. Most editors will only notice that some buttons are slightly larger and have different colors.
<gallery mode="nolines" caption="Comparison of old and new styles" heights="240" widths="572">
File:MediaWiki edit page buttons accessibility change 2017, before.png|Buttons before the change
File:MediaWiki edit page buttons accessibility change 2017, after.png|Buttons after the change
</gallery>
However, this change also affects some user scripts and gadgets. Unfortunately, some of them may not work well in the new system. <mark>If you maintain any user scripts or gadgets that are used for editing, please see '''[[:mw:Contributors/Projects/Accessible editing buttons]]''' for information on how to test and fix your scripts. Outdated scripts can be tested and fixed now.</mark>
This change will probably reach this wiki on '''Tuesday, 1 August 2017'''. Please leave a note at [[:mw:Talk:Contributors/Projects/Accessible editing buttons]] if you need help.</div> --[[m:User:Whatamidoing (WMF)|Whatamidoing (WMF)]] ([[m:User talk:Whatamidoing (WMF)|talk]]) 16:56, 27 dhen Iuchar 2017 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Whatamidoing_(WMF)/Sandbox&oldid=17043399 -->
== Columns for references ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">''{{Int:Please-translate}}'' • ''[[:m:Special:MyLanguage/Editing/Columns for references|Read this in another language]]''
Hello,
At the request of Wikipedia editors, a new feature has been added to MediaWiki. Long lists of references (also called citations or footnotes) will automatically be displayed in columns. This will make it easier for most people to read the references, especially on narrow screens. Short lists of references will not be affected.
I plan to enable this new feature at this wiki on Monday, 11 September 2017. After that date, use the normal <code><nowiki><references /></nowiki></code> tag on any page with many references to see this feature. If you do not want columns used on that page, then use this wikitext code instead: <code><nowiki><references responsive="0" /></nowiki></code>
If you believe that this new feature is not appropriate for this wiki, or if you need help adjusting templates, then please contact me at [[mw:Contributors/Projects/Columns for references]]. --[[User:Whatamidoing (WMF)]] ([[User talk:Whatamidoing (WMF)|talk]])</div> 18:23, 1 dhen t-Sultain 2017 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery/Wiktionary&oldid=17181867 -->
== Changes to the global ban policy ==
<div lang="en" dir="ltr" class="mw-content-ltr">Hello. Some changes to the [[m:Global bans|community global ban policy]] have been proposed. Your comments are welcome at [[:m:Requests for comment/Improvement of global ban policy]]. Please translate this message to your language, if needed. Cordially. [[:m:User:Matiia|Matiia]] ([[:m:User talk:Matiia|Matiia]]) 00:34, 12 dhen t-Samhain 2017 (UTC)</div>
<!-- Message sent by User:Matiia@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=17241561 -->
== New print to pdf feature for mobile web readers ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
'''New print to pdf feature for mobile web readers'''
The Readers web team will be deploying a new feature this week to make it [[mw:Reading/Web/Projects/Mobile_PDFs|easier to download PDF versions of articles on the mobile website]].
Providing better offline functionality was one of the highlighted areas from [[m:New_Readers/Offline|the research done by the New Readers team in Mexico, Nigeria, and India]]. The teams created a prototype for mobile PDFs which was evaluated by user research and community feedback. The [[m:New_Readers/Offline#Concept_testing_for_mobile_web|prototype evaluation]] received positive feedback and results, so development continued.
For the initial deployment, the feature will be available to Google Chrome browsers on Android. Support for other mobile browsers to come in the future. For Chrome, the feature will use the native Android print functionality. Users can choose to download a webpage as a PDF. [[mw:Reading/Web/Projects/Print_Styles#Mobile_Printing|Mobile print styles]] will be used for these PDFs to ensure optimal readability for smaller screens.
The feature is available starting Wednesday, Nov 15. For more information, see [[mw:Reading/Web/Projects/Mobile_PDFs|the project page on MediaWiki.org]].
{{Int:Feedback-thanks-title}}
</div> [[m:User:CKoerner (WMF)|CKoerner (WMF)]] ([[m:User talk:CKoerner (WMF)|talk]]) 22:07, 20 dhen t-Samhain 2017 (UTC)
<!-- Message sent by User:CKoerner (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:CKoerner_(WMF)/Mobile_PDF_distribution_list&oldid=17448927 -->
== Heads-up about a technical change affecting this wiki ==
<div class="mw-content-ltr" lang="en" dir="ltr">
{{int:Hello}}. {{Int:Please-translate}}. {{Int:Feedback-thanks-title}}
[[File:Human-preferences-desktop.svg|thumb|right|240px|This is a heads-up about a technical change affecting this wiki. You do not need to do anything.]]
In July 2017, the Wikimedia Foundation announced the intention to [[:mw:Parsing/Replacing Tidy|replace Tidy with RemexHTML]] across the Wikimedia cluster by July 2018. In order to make this switch, [[:mw:Parsing/Replacing_Tidy/FAQ#What_will_editors_need_to_do.3F|a number of broken wikitext patterns were identified that required fixing on wikis]], highlighted via the high priority categories in the Linter extension.
While still planning to finish turning off Tidy in July 2018, doing early switches of wikis from Tidy to [[:mw:RemexHtml|Remex]] will let us identify any lingering issues that are not already caught by the linter categories and our QA testing. We are encouraging big wikis that have worked hard to switch sooner, for example.
[[:mw:Parsing/Replacing_Tidy/Linter/Stats/2017-11-20#Wikis_with_zero_high-priority_errors|Since your wiki has '''zero high-priority errors''']], we think that '''it is ready to switch from Tidy to Remex'''. To be clear, if we notice problems (or if the wiki requests it), we will revert the change, after identifying the source of the problem. If you notice any incorrect rendering, you can use <code><nowiki>?action=parsermigration-edit</nowiki></code> to identify if the switch from Tidy actually caused it.
'''We are suggesting 5 December 2017 as the possible date for the switch to happen''', so there would still be plenty of time to fix any issues before the holidays start. We look forward to hearing any concerns you would have with this plan, and about how we can help make this transition as smooth as possible: if you have any comments, please remember to [[:mw:User talk:Elitre (WMF)|ping me personally to make sure I notice and address them]], '''otherwise we will assume this message is acknowledged and the deadline works for your community'''.
Best, [[:mw:User:Elitre (WMF)]] 10:35, 28 dhen t-Samhain 2017 (UTC)
PS: Apologies if you are seeing this message on a page that is not the best location for it: I have looked for the appropriate target pages (for example, [[:m:Special:PrefixIndex/Distribution_list/Global_message_delivery/|on Meta]]), but may have found none. Please, by all means, move the message where you see fit, but most importantly, fix the various distribution lists by adding the correct page there, to avoid that this happens again in the future. I appreciate your understanding, and am available for further information and explanations.
</div>
<!-- Message sent by User:Elitre (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Elitre_(WMF)/Remex_switch_-_wikis_with_zero_errors&oldid=17471320 -->
== Tell us what you think about the automatic links for Wiktionary ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hello all,
(Sorry for writing in English. Feel free to translate this message below.)
One year ago, the Wikidata team started deploying new automatic interwiki links for Wiktionaries. Today, the links for the main namespace are automatically displayed by a Mediawiki extension, and the links for other namespaces are stored in Wikidata. You can find [[d:Special:MyLanguage/Wikidata:Wiktionary/Sitelinks|the documentation here]] (feel free to help translating it in your language).
We would like to know if you encountered problems with the system, if you would have suggestions for further improvements. This could be for example:
* Some automatic links don’t work as expected
* Some problems you encountered with entering links (for non-main namespace) in Wikidata
* Some new features you’d like to have, related to links
To give feedback, you have two options:
* Let a message on [[d:Wikidata talk:Lexicographical data/Sitelinks|this talk page]]
* Let a message here. If you do so, please mention me with the <nowiki>{{ping}}</nowiki> template, so I can get a notification.
Our preferred languages are English, French and German, but you can also let a message in your own language if you feel more comfortable with it.
I’m looking forward for your feedback! [[:d:User:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] 10:24, 24 dhen Ghiblean 2018 (UTC)
</div>
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/All_Wiktionaries&oldid=17968098 -->
== AdvancedSearch ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
From May 8, [[mw:Special:MyLanguage/Help:Extension:AdvancedSearch|AdvancedSearch]] will be available as a [[mw:Special:MyLanguage/Beta Features|beta feature]] in your wiki. The feature enhances the [[Special:Search|search page]] through an advanced parameters form and aims to make [[m:WMDE_Technical_Wishes/AdvancedSearch/Functional_scope|existing search options]] more visible and accessible for everyone. AdvancedSearch is a project by [[m:WMDE Technical Wishes/AdvancedSearch|WMDE Technical Wishes]]. Everyone is invited to test the feature and we hope that it will serve you well in your work! </div> [[m:User:Birgit Müller (WMDE)|Birgit Müller (WMDE)]] 14:53, 7 dhen Chèitean 2018 (UTC)
<!-- Message sent by User:Birgit Müller (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_2&oldid=17995461 -->
== Lexicographical data is now available on Wikidata ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hello,
''Sorry for writing in English. Feel free to translate the content of this message below.''
After several years discussing about it, and one year of development and discussion with the communities, the development team of Wikimedia Germany has now released the first version of [[d:Wikidata:Lexicographical data|lexicographical data support on Wikidata]].
Since the start of Wikidata in 2012, the multilingual knowledge base was mainly focused on concepts: Q-items are related to a thing or an idea, not to the word describing it. Starting now, Wikidata stores a new type of data: words, phrases and sentences, in many languages, described in many languages. This information will be stored in new types of entities, called Lexemes, Forms and Senses.
The goal of lexicographical data on Wikidata is to provide a structured and machine-readable way to describe words and phrases in multiple languages, stored in a same place, reusable under CC-0. In the near future, this data will be available for Wiktionaries and other projects to reuse, as much as you want to.
For now, we’re at the first steps of this project: the new data structure has been released on Wikidata, and we’re looking for people to try it, and give us feedback on what is working or not. Participating to this project is the opportunity for you to have a voice in it, to make sure that your needs and requests are taken in account very early in the process, and to start populating Wikidata with words in your language!
Here’s how you can try lexicographical data on Wikidata:
* First of all, if you’re not familiar with the data model, I encourage you to have a look at [[d:Wikidata:Lexicographical data/Documentation|the documentation page]]. If you’re not familiar with Wikidata at all, I suggest [[d:Help:Contents|this page]] as a start point.
* You can also [https://www.wikidata.org/wiki/Special:AllPages?from=&to=&namespace=146 look at the Lexemes that already exists] (search features will be improved in the future).
* When you feel ready to create a word, go on [[d:Special:NewLexeme]].
* If some properties that you need are missing, you can [[d:Wikidata:Property proposal/Lexemes|suggest them on this page]] (if you’re not sure how to do it, just let a message on the talk page and someone will help you).
* The main discussion page is [[d:Wikidata:Lexicographical data]]. Here, you can ask for help, suggest ways to organize the data, but also leave feedback: if you encounter any bug or issue, let us know. We’re looking especially to know what are the most important features for you to be worked on next.
In any case, feel free to contact me if you have a question or problem, I’ll be very happy to help.
Cheers, [[:d:User:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] 12:20, 23 dhen Chèitean 2018 (UTC)
</div>
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/All_Wiktionaries&oldid=18070068 -->
== Update on page issues on mobile web ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
'''Update on page issues on mobile web'''
{{int:please-translate}}
Hi everyone. The [[mw:Reading/Web/Team|Readers web team]] has recently begun working on exposing issue templates on the mobile website. Currently, details about issues with page content are generally hidden on the mobile website. This leaves readers unaware of the reliability of the pages they are reading. The goal of this project is to improve awareness of particular issues within an article on the mobile web. We will do this by changing the visual styling of page issues.
So far, we have [[mw:Reading/Web/Projects/Mobile Page Issues|drafted a proposal on the design and implementation]] of the project. We were also able to run [[mw:Reading/Web/Projects/Mobile Page Issues/Research Results|user testing on the proposed designs]]. The tests so far have positive results. Here is a quick summary of what we learned:
* The new treatment increases awareness of page issues among participants. This is true particularly when they are in a more evaluative/critical mode.
* Page issues make sense to readers and they understand how they work
* Readers care about page issues and consider them important
* Readers had overwhelmingly positive sentiments towards Wikipedia associated with learning about page issues
Our next step would be to start implementing these changes. We wanted to reach out to you for any concerns, thoughts, and suggestions you might have before beginning development. Please [[mw:Reading/Web/Projects/Mobile Page Issues|visit the project page]] where we have more information and mockups of how this may look. Please [[mw:Talk:Reading/Web/Projects/Mobile Page Issues|leave feedback on the talk page]].
</div> [[m:User:CKoerner (WMF)|CKoerner (WMF)]] ([[m:User talk:CKoerner (WMF)|talk]]) 20:58, 12 dhen Ògmhios 2018 (UTC)
<!-- Message sent by User:CKoerner (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:CKoerner_(WMF)/Sandbox&oldid=18120916 -->
== Global preferences are available ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Global preferences are now available, you can set them by visiting your new [[Special:GlobalPreferences|global preferences page]]. Visit [[mw:Help:Extension:GlobalPreferences|mediawiki.org for information on how to use them]] and [[mw:Help talk:Extension:GlobalPreferences|leave feedback]]. -- [[User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]])
</div> 19:19, 10 dhen Iuchar 2018 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=17968247 -->
== Consultation on the creation of a separate user group for editing sitewide CSS/JS ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
''({{int:please-translate}})''
Hi all,
I'm preparing a change in who can edit sitewide CSS/JS pages. (These are pages like <code dir="ltr">MediaWiki:Common.css</code> and <code dir="ltr">MediaWiki:Vector.js</code> which are executed in the browser of all readers and editors.) Currently all administrators are able to edit these pages, which poses a serious and unnecessary security risk. Soon, a dedicated, smaller user group will take over this task. Your community will be able to decide who belongs in this group, so this should mean very little change for you. You can find out more and provide feedback at [[m:Special:MyLanguage/Creation of separate user group for editing sitewide CSS/JS|the consultation page on Meta]]. If you are involved in maintaining CSS/JS code, or policymaking around adminship requests, please give it a look!
Thanks!
<br/><span dir="ltr">[[m:User:Tgr|Tgr]] ([[m:User talk:Tgr|talk]]) 08:45, 12 dhen Iuchar 2018 (UTC) <small>(via [[m:Special:MyLanguage/Global_message_delivery|global message delivery]])</small></span>
</div>
<!-- Message sent by User:Tgr@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Nonechnical_Village_Pumps_distribution_list&oldid=18199925 -->
== New user group for editing sitewide CSS/JS ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
''({{int:please-translate}})''
Hi all!
To improve the security of our readers and editors, permission handling for CSS/JS pages has changed. (These are pages like <code dir="ltr">MediaWiki:Common.css</code> and <code dir="ltr">MediaWiki:Vector.js</code> which contain code that is executed in the browsers of users of the site.)
A new user group, <code dir="ltr">[[m:Special:MyLanguage/Interface administrators|interface-admin]]</code>, has been created.
Starting four weeks from now, only members of this group will be able edit CSS/JS pages that they do not own (that is, any page ending with <code dir="ltr">.css</code> or <code dir="ltr">.js</code> that is either in the <code dir="ltr">MediaWiki:</code> namespace or is another user's user subpage).
You can learn more about the motivation behind the change [[m:Special:MyLanguage/Creation of separate user group for editing sitewide CSS/JS|here]].
Please add users who need to edit CSS/JS to the new group (this can be done the same way new administrators are added, by stewards or local bureaucrats).
This is a dangerous permission; a malicious user or a hacker taking over the account of a careless interface-admin can abuse it in far worse ways than admin permissions could be abused. Please only assign it to users who need it, who are trusted by the community, and who follow common basic password and computer security practices (use strong passwords, do not reuse passwords, use two-factor authentication if possible, do not install software of questionable origin on your machine, use antivirus software if that's a standard thing in your environment).
Thanks!
<br/><span dir="ltr">[[m:User:Tgr|Tgr]] ([[m:User talk:Tgr|talk]]) 13:08, 30 dhen Iuchar 2018 (UTC) <small>(via [[m:Special:MyLanguage/Global_message_delivery|global message delivery]])</small></span>
</div>
<!-- Message sent by User:Tgr@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=17968247 -->
== Wiktionary Cognate Dashboard ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
[[File:Screenshot of Hubs on Wiktionary Cognate Dashboard.png|thumb|Screenshot of the Hub view]]
''Sorry for writing this message in English. Feel free to help translate it below.''
Hello all,
A few months ago, we asked you for feedback about [[d:Wikidata:Wiktionary/Sitelinks|Cognate]], the system allowing interwikilinks between Wiktionaries (on main namespace). Several community members gave some suggestions, one of them was to provide statistics about these interwikilinks.
The Wikidata team is pleased to present you the '''[https://wdcm.wmflabs.org/Wiktionary_CognateDashboard/ Wiktionary Cognate Dashboard]''', a website presenting a lot of interesting information about how Wiktionaries are connected to each others. You can find there, for example:
* the most interlinked Wiktionary entries not having a page on your Wiktionary
* the number of interlinks between each possible pair of Wiktionaries
* visualizations of the relationships between different Wiktionaries
To learn more about the tool, you can have a look at [[m:Wiktionary Cognate Dashboard|the documentation]] (please help us translating it in your language!). The interface of the tool itself can also be translated in other languages by [[m:Wiktionary Cognate Dashboard/Interface|using this page]].
If you find a bug, please let a comment on [[phab:T166487|this Phabricator task]] or ping me onwiki. Thanks a lot, [[:d:User:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] 13:08, 14 An Lùnastal 2018 (UTC)
</div>
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery/Wiktionary&oldid=18299586 -->
== Editing of sitewide CSS/JS is only possible for interface administrators from now ==
''({{int:please-translate}})''
<div lang="en" dir="ltr" class="mw-content-ltr">
Hi all,
as [[m:Special:MyLanguage/Creation of separate user group for editing sitewide CSS/JS/announcement 2|announced previously]], permission handling for CSS/JS pages has changed: only members of the <code>[[m:Special:MyLanguage/Interface administrators|interface-admin]]</code> ({{int:group-interface-admin}}) group, and a few highly privileged global groups such as stewards, can edit CSS/JS pages that they do not own (that is, any page ending with .css or .js that is either in the MediaWiki: namespace or is another user's user subpage). This is done to improve the security of readers and editors of Wikimedia projects. More information is available at [[m:Special:MyLanguage/Creation of separate user group for editing sitewide CSS/JS|Creation of separate user group for editing sitewide CSS/JS]]. If you encounter any unexpected problems, please contact me or file a bug.
Thanks!<br />
[[m:User:Tgr|Tgr]] ([[m:User talk:Tgr|talk]]) 12:39, 27 An Lùnastal 2018 (UTC) <small>(via [[m:Special:MyLanguage/Global_message_delivery|global message delivery]])</small>
</div>
<!-- Message sent by User:Tgr@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18258712 -->
== Read-only mode for up to an hour on 12 September and 10 October ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch 2018|Read this message in another language]] • {{int:please-translate}}
The [[foundation:|Wikimedia Foundation]] will be testing its secondary data centre. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to do a planned test. This test will show if they can reliably switch from one data centre to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
They will switch all traffic to the secondary data center on '''Wednesday, 12 September 2018'''.
On '''Wednesday, 10 October 2018''', they will switch back to the primary data center.
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop when we switch. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on Wednesday, 12 September and Wednesday, 10 October. The test will start at [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20170503T14 14:00 UTC] (15:00 BST, 16:00 CEST, 10:00 EDT, 07:00 PDT, 23:00 JST, and in New Zealand at 02:00 NZST on Thursday 13 September and Thursday 11 October).
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
*There will be code freezes for the weeks of 10 September 2018 and 8 October 2018. Non-essential code deployments will not happen.
This project may be postponed if necessary. You can [[wikitech:Switch Datacenter#Schedule for 2018 switch|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. '''Please share this information with your community.''' /<span dir=ltr>[[m:User:Johan (WMF)|User:Johan(WMF)]] ([[m:User talk:Johan (WMF)|talk]])</span>
</div></div> 13:33, 6 dhen t-Sultain 2018 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18333489 -->
== The Community Wishlist Survey ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
The Community Wishlist Survey. {{Int:Please-translate}}.
Hey everyone,
The Community Wishlist Survey is the process when the Wikimedia communities decide what the Wikimedia Foundation [[m:Community Tech|Community Tech]] should work on over the next year.
The Community Tech team is focused on tools for experienced Wikimedia editors. You can post technical proposals from now until 11 November. The communities will vote on the proposals between 16 November and 30 November. You can read more on the [[m:Special:MyLanguage/Community Wishlist Survey 2019|wishlist survey page]].
<span dir=ltr>/[[m:User:Johan (WMF)|User:Johan (WMF)]]</span></div></div> 11:05, 30 dhen Dàmhair 2018 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18458512 -->
== Change coming to how certain templates will appear on the mobile web ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
'''Change coming to how certain templates will appear on the mobile web'''
{{int:please-translate}}
[[File:Page_issues_-_mobile_banner_example.jpg|thumb|Example of improvements]]
Hello,
In a few weeks the Readers web team will be changing how some templates look on the mobile web site. We will make these templates more noticeable when viewing the article. We ask for your help in updating any templates that don't look correct.
What kind of templates? Specifically templates that notify readers and contributors about issues with the content of an article – the text and information in the article. Examples like [[wikidata:Q5962027|Template:Unreferenced]] or [[Wikidata:Q5619503|Template:More citations needed]]. Right now these notifications are hidden behind a link under the title of an article. We will format templates like these (mostly those that use Template:Ambox or message box templates in general) to show a short summary under the page title. You can tap on the "Learn more" link to get more information.
For template editors we have [[mw:Recommendations_for_mobile_friendly_articles_on_Wikimedia_wikis#Making_page_issues_(ambox_templates)_mobile_friendly|some recommendations on how to make templates that are mobile-friendly]] and also further [[mw:Reading/Web/Projects/Mobile_Page_Issues|documentation on our work so far]].
If you have questions about formatting templates for mobile, [[mw:Talk:Reading/Web/Projects/Mobile_Page_Issues|please leave a note on the project talk page]] or [https://phabricator.wikimedia.org/maniphest/task/edit/form/1/?projects=Readers-Web-Backlog file a task in Phabricator] and we will help you.
{{Int:Feedback-thanks-title}}
</div> [[m:User:CKoerner (WMF)|CKoerner (WMF)]] ([[m:User talk:CKoerner (WMF)|talk]]) 19:34, 13 dhen t-Samhain 2018 (UTC)
<!-- Message sent by User:CKoerner (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18543269 -->
== Community Wishlist Survey vote ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
The Community Wishlist Survey. {{Int:Please-translate}}.
Hey everyone,
The Community Wishlist Survey is the process when the Wikimedia communities decide what the Wikimedia Foundation [[m:Community Tech|Community Tech]] should work on over the next year.
The Community Tech team is focused on tools for experienced Wikimedia editors. The communities have now posted a long list of technical proposals. You can vote on the proposals from now until 30 November. You can read more on the [[m:Special:MyLanguage/Community Wishlist Survey 2019|wishlist survey page]].
<span dir=ltr>/[[m:User:Johan (WMF)|User:Johan (WMF)]]</span></div></div> 18:13, 22 dhen t-Samhain 2018 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18543269 -->
== Advanced Search ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
[[m:WMDE_Technical_Wishes/AdvancedSearch|Advanced Search]] will become a default feature on your wiki on November 28. This new interface allows you to perform specialized searches on the [[Special:Search|search page]], even if you don’t know any [[mw:Special:MyLanguage/Help:CirrusSearch|search syntax]]. Advanced Search originates from the [[m:WMDE_Technical_Wishes|German Community’s Technical Wishes project]]. It's already a default feature on German, Arabic, Farsi and Hungarian Wikipedia. Besides, more than 40.000 users across all wikis have tested the beta version. Feedback is welcome on the [[mw:Help talk:Extension:AdvancedSearch|central feedback page]].</div> [[m:User:Johanna Strodt (WMDE)|Johanna Strodt (WMDE)]] ([[m:User talk:Johanna Strodt (WMDE)|talk]]) 11:02, 26 dhen t-Samhain 2018 (UTC)
<!-- Message sent by User:Johanna Strodt (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_2&oldid=18363910 -->
== New Wikimedia password policy and requirements ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
{{int:please-translate}}
The Wikimedia Foundation security team is implementing a new [[m:Password policy|password policy and requirements]]. [[mw:Wikimedia_Security_Team/Password_strengthening_2019|You can learn more about the project on MediaWiki.org]].
These new requirements will apply to new accounts and privileged accounts. New accounts will be required to create a password with a minimum length of 8 characters. Privileged accounts will be prompted to update their password to one that is at least 10 characters in length.
These changes are planned to be in effect on December 13th. If you think your work or tools will be affected by this change, please let us know on [[mw:Talk:Wikimedia_Security_Team/Password_strengthening_2019|the talk page]].
{{Int:Feedback-thanks-title}}
</div> [[m:User:CKoerner (WMF)|CKoerner (WMF)]] ([[m:User talk:CKoerner (WMF)|talk]]) 20:03, 6 dhen Dùbhlachd 2018 (UTC)
<!-- Message sent by User:CKoerner (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18639017 -->
== Selection of the Tremendous Wiktionary User Group representative to the Wikimedia Summit 2019 ==
Dear all,
Sorry for posting this message in English and last minute notification. The [[:m:Tremendous Wiktionary User Group|Tremendous Wiktionary User Group]] could send one representative to the [[:m:Wikimedia Summit 2019|Wikimedia Summit 2019]] (formerly "Wikimedia Conference"). The Wikimedia Summit is an yearly conference of all organizations affiliated to the Wikimedia Movement (including our Tremendous Wiktionary User Group). It is a great place to talk about Wiktionary needs to the chapters and other user groups that compose the Wikimedia movement.
For context, there is a [[:m:Wikimedia Conference 2018/Further reports/Tremendous Wiktionary User Group|short report on what happened last year]]. The deadline is very close to 24 hrs. The last date for registration is 17 December 2018. As a last minute effort, there is a '''[[:m:Tremendous Wiktionary User Group/Wikimedia Summit 2019|page on meta to decide who will be the representative of the user group to the Wikimedia Summit]]''' created.
Please feel free to ask any question on the [https://lists.wikimedia.org/mailman/listinfo/wiktionary-l wiktionary-l] mailing list or on the [[:m:Talk:Wiktionary/Tremendous Wiktionary User Group|talk page]].
For the [[:m:Tremendous Wiktionary User Group|Tremendous Wiktionary User Group]],
-- [[User:Balajijagadesh|Balajijagadesh]] 05:56, 16 dhen Dùbhlachd 2018 (UTC)
<!-- Message sent by User:KCVelaga@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery/Wiktionary&oldid=18299588 -->
== Invitation from Wiki Loves Love 2019 ==
<div lang="en" dir="ltr" class="mw-content-ltr">
{{int:please-translate}}
[[File:WLL Subtitled Logo (transparent).svg|right|frameless]]
Love is an important subject for humanity and it is expressed in different cultures and regions in different ways across the world through different gestures, ceremonies, festivals and to document expression of this rich and beautiful emotion, we need your help so we can share and spread the depth of cultures that each region has, the best of how people of that region, celebrate love.
[[:c:Commons:Wiki Loves Love|Wiki Loves Love (WLL)]] is an international photography competition of Wikimedia Commons with the subject love testimonials happening in the month of February.
The primary goal of the competition is to document love testimonials through human cultural diversity such as monuments, ceremonies, snapshot of tender gesture, and miscellaneous objects used as symbol of love; to illustrate articles in the worldwide free encyclopedia Wikipedia, and other Wikimedia Foundation (WMF) projects.
The theme of 2019 iteration is '''''Celebrations, Festivals, Ceremonies and rituals of love.'''''
Sign up your affiliate or individually at [[:c:Commons:Wiki Loves Love 2019/Participants|Participants]] page.
To know more about the contest, check out our [[:c:Commons:Wiki Loves Love 2019|Commons Page]] and [[:c:Commons:Wiki Loves Love 2018/FAQ|FAQs]]
There are several prizes to grab. Hope to see you spreading love this February with Wiki Loves Love!
Kind regards,
[[:c:Commons:Wiki Loves Love 2018/International Team|Wiki Loves Love Team]]
Imagine... the sum of all love!
</div>
--[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 10:12, 27 dhen Dùbhlachd 2018 (UTC)
<!-- Message sent by User:Tiven2240@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18639017 -->
== FileExporter beta feature ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
[[File:Logo for FileExporter.svg|thumb|Coming soon: the beta feature [[m:WMDE_Technical_Wishes/Move_files_to_Commons|FileExporter]]]]
A new beta feature will soon be released on all wikis: The [[m:WMDE_Technical_Wishes/Move_files_to_Commons|FileExporter]]. It allows exports of files from a local wiki to Wikimedia Commons, including their file history and page history. Which files can be exported is defined by each wiki's community: '''Please check your wiki's [[m:WMDE_Technical_Wishes/Move_files_to_Commons/Configuration file documentation|configuration file]]''' if you want to use this feature.
The FileExporter has already been a beta feature on [https://www.mediawiki.org mediawiki.org], [https://meta.wikimedia.org meta.wikimedia], deWP, faWP, arWP, koWP and on [https://wikisource.org wikisource.org]. After some functionality was added, it's now becoming a beta feature on all wikis. Deployment is planned for January 16. More information can be found [[m:WMDE_Technical_Wishes/Move_files_to_Commons|on the project page]].
As always, feedback is highly appreciated. If you want to test the FileExporter, please activate it in your [[Special:Preferences#mw-prefsection-betafeatures|user preferences]]. The best place for feedback is the [[mw:Help_talk:Extension:FileImporter|central talk page]]. Thank you from Wikimedia Deutschland's [[m:WMDE Technical Wishes|Technical Wishes project]].
</div> [[User:Johanna Strodt (WMDE)|Johanna Strodt (WMDE)]] 09:41, 14 dhen Fhaoilleach 2019 (UTC)
<!-- Message sent by User:Johanna Strodt (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=18782700 -->
== No editing for 30 minutes on 17 January ==
<div lang="en" dir="ltr" class="mw-content-ltr">You will '''not be able to edit''' the wikis for up to 30 minutes on '''[https://www.timeanddate.com/worldclock/fixedtime.html?iso=20190117T07 17 January 07:00 UTC]'''. This is because of a database problem that has to be fixed immediately. You can still read the wikis. Some wikis are not affected. They don't get this message. You can see which wikis are '''not''' affected [[:m:User:Johan (WMF)/201901ReadOnlyPage|on this page]]. Most wikis are affected. The time you can not edit might be shorter than 30 minutes. /[[User:Johan (WMF)|Johan (WMF)]]</div>
18:40, 16 dhen Fhaoilleach 2019 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/201901ReadOnly/Targets2&oldid=18789230 -->
== Talk to us about talking ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
[[File:OOjs_UI_icon_speechBubbles-rtl.svg|alt="icon depicting two speech Bubbles"|frameless|right|120px]]
The Wikimedia Foundation is planning a [[mw:Talk pages consultation 2019|global consultation about communication]]. The goal is to bring Wikimedians and wiki-minded people together to improve tools for communication.
We want all contributors to be able to talk to each other on the wikis, whatever their experience, their skills or their devices.
We are looking for input from as many different parts of the Wikimedia community as possible. It will come from multiple projects, in multiple languages, and with multiple perspectives.
We are currently planning the consultation. We need your help.
'''We need volunteers to help talk to their communities or user groups.'''
You can help by hosting a discussion at your wiki. Here's what to do:
# First, [[mw:Talk pages consultation 2019/Participant group sign-up|sign up your group here.]]
# Next, create a page (or a section on a Village pump, or an e-mail thread – whatever is natural for your group) to collect information from other people in your group. This is not a vote or decision-making discussion: we are just collecting feedback.
# Then ask people what they think about communication processes. We want to hear stories and other information about how people communicate with each other on and off wiki. Please consider asking these five questions:
## When you want to discuss a topic with your community, what tools work for you, and what problems block you?
## What about talk pages works for newcomers, and what blocks them?
## What do others struggle with in your community about talk pages?
## What do you wish you could do on talk pages, but can't due to the technical limitations?
## What are the important aspects of a "wiki discussion"?
# Finally, please go to [[mw:Talk:Talk pages consultation 2019|Talk pages consultation 2019 on Mediawiki.org]] and report what you learned from your group. Please include links if the discussion is available to the public.
'''You can also help build the list of the many different ways people talk to each other.'''
Not all groups active on wikis or around wikis use the same way to discuss things: it can happen on wiki, on social networks, through external tools... Tell us [[mw:Talk pages consultation 2019/Tools in use|how your group communicates]].
You can read more about [[mw:Talk pages consultation 2019|the overall process]] on mediawiki.org. If you have questions or ideas, you can [[mw:Talk:Talk pages consultation 2019|leave feedback about the consultation process]] in the language you prefer.
Thank you! We're looking forward to talking with you.
</div> [[user:Trizek (WMF)|Trizek (WMF)]] 15:01, 21 dhen Ghearran 2019 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18639017 -->
== Read-only mode for up to 30 minutes on 11 April ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
<div lang="en" dir="ltr" class="mw-content-ltr">You will '''not be able to edit''' most Wikimedia wikis for up to 30 minutes on '''[https://www.timeanddate.com/worldclock/fixedtime.html?iso=20190411T05 11 April 05:00 UTC]'''. This is because of a hardware problem. You can still read the wikis. You [[phab:T220080|can see which wikis are affected]]. The time you can not edit might be shorter than 30 minutes. /[[User:Johan (WMF)|Johan (WMF)]]</div></div></div> 10:56, 8 dhen Ghiblean 2019 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18979889 -->
== Wikimedia Foundation Medium-Term Plan feedback request ==
{{int:please-translate}}
<div lang="en" dir="ltr" class="mw-content-ltr">The Wikimedia Foundation has published a [[m:Special:MyLanguage/Wikimedia_Foundation_Medium-term_plan_2019|Medium-Term Plan proposal]] covering the next 3–5 years. We want your feedback! Please leave all comments and questions, in any language, on [[m:Talk:Wikimedia_Foundation_Medium-term_plan_2019|the talk page]], by April 20. {{Int:Feedback-thanks-title}} [[m:User:Quiddity (WMF)|Quiddity (WMF)]] ([[m:User talk:Quiddity (WMF)|talk]]) 17:35, 12 dhen Ghiblean 2019 (UTC)</div>
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=18998727 -->
== Update on the consultation about office actions ==
Hello all,
Last month, the Wikimedia Foundation's Trust & Safety team [[:en:Wikipedia:Village_pump_(policy)/Archive_152#Announcement_of_forthcoming_temporary_and_partial_ban_tool_consultation|announced]] a future consultation about partial and/or temporary [[m:Special:MyLanguage/office actions|office actions]]. We want to let you know that the '''draft version''' of this consultation has now been [[:m:Office_actions/Community_consultation_on_partial_and_temporary_office_actions/draft|posted on Meta]].
This is a '''draft'''. It is not intended to be the consultation itself, which will be posted on Meta likely in early September. Please do not treat this draft as a consultation. Instead, we ask your assistance in forming the final language for the consultation.
For that end, we would like your input over the next couple of weeks about what questions the consultation should ask about partial and temporary Foundation office action bans and how it should be formatted. '''[[:m:Talk:Office_actions/Community_consultation_on_partial_and_temporary_office_actions/draft|Please post it on the draft talk page]]'''. Our goal is to provide space for the community to discuss all the aspects of these office actions that need to be discussed, and we want to ensure with your feedback that the consultation is presented in the best way to encourage frank and constructive conversation.
Please visit [[:m:Office_actions/Community_consultation_on_partial_and_temporary_office_actions/draft|the consultation draft on Meta-wiki]] and leave your comments on the draft’s talk page about what the consultation should look like and what questions it should ask.
Thank you for your input! -- The [[m:Special:MyLanguage/Trust and Safety|Trust & Safety team]] 08:03, 16 An Lùnastal 2019 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=19175143 -->
== New tools and IP masking ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
<div lang="en" dir="ltr" class="mw-content-ltr">
Hey everyone,
The Wikimedia Foundation wants to work on two things that affect how we patrol changes and handle vandalism and harassment. We want to make the tools that are used to handle bad edits better. We also want to get better privacy for unregistered users so their IP addresses are no longer shown to everyone in the world. We would not hide IP addresses until we have better tools for patrolling.
We have an idea of what tools ''could'' be working better and how a more limited access to IP addresses would change things, but we need to hear from more wikis. You can read more about the project [[m:IP Editing: Privacy Enhancement and Abuse Mitigation|on Meta]] and [[m:Talk:IP Editing: Privacy Enhancement and Abuse Mitigation|post comments and feedback]]. Now is when we need to hear from you to be able to give you better tools to handle vandalism, spam and harassment.
You can post in your language if you can't write in English.
[[User:Johan (WMF)|Johan (WMF)]]</div></div></div> 14:19, 21 An Lùnastal 2019 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/Tools_and_IP_message/Distribution&oldid=19315232 -->
== The consultation on partial and temporary Foundation bans just started ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
<div class="plainlinks">
Hello,
In a [[:en:Wikipedia:Community_response_to_the_Wikimedia_Foundation%27s_ban_of_Fram/Official_statements#Board_statement|recent statement]], the Wikimedia Foundation Board of Trustees [[:en:Wikipedia:Community_response_to_the_Wikimedia_Foundation%27s_ban_of_Fram/Official_statements#Board_statement|requested that staff hold a consultation]] to "re-evaluat[e] or add community input to the two new office action policy tools (temporary and partial Foundation bans)".
Accordingly, the Foundation's Trust & Safety team invites all Wikimedians [[:m:Office actions/Community consultation on partial and temporary office actions/09 2019|to join this consultation and give their feedback]] from 30 September to 30 October.
How can you help?
* Suggest how partial and temporary Foundation bans should be used, if they should (eg: On all projects, or only on a subset);
* Give ideas about how partial and temporary Foundation bans should ideally implemented, if they should be; and/or
* Propose changes to the existing Office Actions policy on partial and temporary bans.
We offer our thanks in advance for your contributions, and we hope to get as much input as possible from community members during this consultation!
</div>
</div>-- [[user:Kbrown (WMF)|Kbrown (WMF)]] 17:14, 30 dhen t-Sultain 2019 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=19302497 -->
== Feedback wanted on Desktop Improvements project ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
{{Int:Please-translate}}
{{int:Hello}}. The Readers Web team at the WMF will work on some [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements|improvements to the desktop interface]] over the next couple of years. The goal is to increase usability without removing any functionality. We have been inspired by changes made by volunteers, but that currently only exist as local gadgets and user scripts, prototypes, and volunteer-led skins. We would like to begin the process of bringing some of these changes into the default experience on all Wikimedia projects.
We are currently in the research stage of this project and are looking for ideas for improvements, as well as feedback on our current ideas and mockups. So far, we have performed interviews with community members at Wikimania. We have gathered lists of previous volunteer and WMF work in this area. We are examining possible technical approaches for such changes.
We would like individual feedback on the following:
* Identifying focus areas for the project we have not yet discovered
* Expanding the list of existing gadgets and user scripts that are related to providing a better desktop experience. If you can think of some of these from your wiki, please let us know
* Feedback on the ideas and mockups we have collected so far
We would also like to gather a list of wikis that would be interested in being test wikis for this project - these wikis would be the first to receive the updates once we’re ready to start building.
When giving feedback, please consider the following goals of the project:
* Make it easier for readers to focus on the content
* Provide easier access to everyday actions (e.g. search, language switching, editing)
* Put things in logical and useful places
* Increase consistency in the interface with other platforms - mobile web and the apps
* Eliminate clutter
* Plan for future growth
As well as the following constraints:
* Not touching the content - no work will be done in terms of styling templates or to the structure of page contents themselves
* Not removing any functionality - things might move around, but all navigational items and other functionality currently available by default will remain
* No drastic changes to the layout - we're taking an evolutionary approach to the changes and want the site to continue feeling familiar to readers and editors
Please give all feedback (in any language) at [[mw:Talk:Reading/Web/Desktop Improvements|mw:Talk:Reading/Web/Desktop Improvements]]
After this round of feedback, we plan on building a prototype of suggested changes based on the feedback we receive. You’ll hear from us again asking for feedback on this prototype.
{{Int:Feedback-thanks-title}} [[mw:User:Quiddity (WMF)|Quiddity (WMF)]] ([[mw:User talk:Quiddity (WMF)|talk]])
</div> 07:15, 16 dhen Dàmhair 2019 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Quiddity_(WMF)/Global_message_delivery_split_2&oldid=19462801 -->
== Community Wishlist 2020 ==
[[File:Magic Wand Icon 229981 Color Flipped.svg|right|48px]]
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
The '''[[m:Special:MyLanguage/Community Wishlist Survey 2020|2020 Community Wishlist Survey]]''' is now open! This survey is the process where communities decide what the [[m:Community Tech|Community Tech]] team should work on over the next year. We encourage everyone to submit proposals until the deadline on '''November 11, 2019''', or comment on other proposals to help make them better.
'''This year, we’re exclusively focusing on smaller projects (i.e., Wikibooks, Wiktionary, Wikiquote, Wikisource, Wikiversity, Wikispecies, Wikivoyage, and Wikinews).''' We want to help these projects and provide meaningful improvements to diverse communities. If you’re a member of any of these projects, please participate in the survey! To submit proposals, see the guidelines on the [[m:Special:MyLanguage/Community Wishlist Survey 2020#Guidelines|survey page]]. You can write proposals in any language, and we will translate them for you. Thank you, and we look forward to seeing your proposals!
</div>
[[:m:user:IFried (WMF)|IFried (WMF)]] 19:30, 4 dhen t-Samhain 2019 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Trizek_(WMF)/sandbox/temp_MassMessage_list&oldid=19523495 -->
== Wiki Loves Folklore ==
[[File:WLL Subtitled Logo (transparent).svg|100px|right|frameless]]
'''Hello Folks,'''
Wiki Loves Love is back again in 2020 iteration as '''[[:c:Commons:Wiki Loves Folklore|Wiki Loves Folklore]]''' from 1 February, 2020 - 29 February, 2020. Join us to celebrate the local cultural heritage of your region with the theme of folklore in the international photography contest at [https://commons.wikimedia.org/w/index.php?title=Special:UploadWizard&campaign=wllove Wikimedia Commons]. Images, videos and audios representing different forms of folk cultures and new forms of heritage that haven’t otherwise been documented so far are welcome submissions in Wiki Loves Folklore. Learn more about the contest at [[m:Wiki Loves Folklore|Meta-Wiki]] and [[:c:Commons:Wiki Loves Folklore|Commons]].
'''Kind regards,'''<br/>
[[:c:Commons:Wiki Loves Folklore/International Team|'''Wiki Loves Folklore International Team''']]<br/>
<small>— [[User:Tulsi Bhagat|<font color="black">'''Tulsi Bhagat'''</font>]] <small>([[Special:Contributions/Tulsi Bhagat|<font color="black">contribs</font>]] | [[User talk:Tulsi Bhagat|<font color="black">talk</font>]])</small><br/>
sent using [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 06:14, 18 dhen Fhaoilleach 2020 (UTC)</small>
<!-- Message sent by User:Tulsi Bhagat@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Tiven2240/wll&oldid=19716850 -->
== Movement Learning and Leadership Development Project ==
Hello
The Wikimedia Foundation’s Community Development team is seeking to learn more about the way volunteers learn and develop into the many different roles that exist in the movement. Our goal is to build a movement informed framework that provides shared clarity and outlines accessible pathways on how to grow and develop skills within the movement. To this end, we are looking to speak with you, our community to learn about your journey as a Wikimedia volunteer. Whether you joined yesterday or have been here from the very start, we want to hear about the many ways volunteers join and contribute to our movement.
To learn more about the project, [[:m:special:MyLanguage/Movement Learning and Leadership Development Project|please visit the Meta page]]. If you are interested in participating in the project, please complete [https://docs.google.com/forms/d/e/1FAIpQLSegM07N1FK_s0VUECM61AlWOthwdn5zQOlVsa2vaKcx13BwZg/viewform?usp=sf_link this simple Google form]. Although we may not be able to speak to everyone who expresses interest, we encourage you to complete this short form if you are interested in participating!
-- [[user:LMiranda (WMF)|LMiranda (WMF)]] ([[user talk:LMiranda (WMF)|talk]]) 19:01, 22 dhen Fhaoilleach 2020 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Trizek_(WMF)/sandbox/temp_MassMessage_list&oldid=19738989 -->
== Additional interface for edit conflicts on talk pages ==
''Sorry, for writing this text in English. If you could help to translate it, it would be appreciated.''
You might know the new interface for edit conflicts (currently a beta feature). Now, Wikimedia Germany is designing an additional interface to solve edit conflicts on talk pages. This interface is shown to you when you write on a discussion page and another person writes a discussion post in the same line and saves it before you do. With this additional editing conflict interface you can adjust the order of the comments and edit your comment. We are inviting everyone to have a look at [[m:WMDE Technical Wishes/Edit Conflicts#Edit conflicts on talk pages|the planned feature]]. Let us know what you think on our [[mw:Help talk:Two Column Edit Conflict View|central feedback page]]! -- For the Technical Wishes Team: [[m:User:Max Klemm (WMDE)|Max Klemm (WMDE)]] 14:14, 26 dhen Ghearran 2020 (UTC)
<!-- Message sent by User:Max Klemm (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=19845780 -->
== Adminship for Kibi78704 - 25 Giblean 2020 ==
Once again, I would like to obtain temporary admin credentials to be better able to serve and maintain Uicleir. Please see #62 above, [[Wiktionary:Doras na coimhearsnachd#Adminship for Kibi78704]] as well as [[m:SRP#Temporary Adminship for Kibi78704 on gd:wiktionary]].<br>
I am currently the only editor working here on Uicleir. There are currently no stewards or bureaucrats serving on this Wictionary; the only admin is the automated Cleachdaiche:Abuse filter.<br>[[Cleachdaiche:Kibi78704|Kibi78704]] ([[Deasbaireachd a' chleachdaiche:Kibi78704|an deasbaireachd]]) 17:58, 25 dhen Ghiblean 2020 (UTC)
== Feedback on movement names ==
{{int:Hello}}. Apologies if you are not reading this message in your native language. {{int:please-translate}} if necessary. {{Int:Feedback-thanks-title}}
There are a lot of conversations happening about the future of our movement names. We hope that you are part of these discussions and that your community is represented.
Since 16 June, the Foundation Brand Team has been running a [https://wikimedia.qualtrics.com/jfe/form/SV_9G2dN7P0T7gPqpD survey] in 7 languages about [[m:Special:MyLanguage/Communications/Wikimedia brands/2030 movement brand project/Naming convention proposals|3 naming options]]. There are also community members sharing concerns about renaming in a [[m:Special:MyLanguage/Community open letter on renaming|Community Open Letter]].
Our goal in this call for feedback is to hear from across the community, so we encourage you to participate in the survey, the open letter, or both. The survey will go through 7 July in all timezones. Input from the survey and discussions will be analyzed and published on Meta-Wiki.
Thanks for thinking about the future of the movement, --[[:m:Talk:Communications/Wikimedia brands/2030 movement brand project|The Brand Project team]], 19:39, 2 dhen Iuchar 2020 (UTC)
''Note: The survey is conducted via a third-party service, which may subject it to additional terms. For more information on privacy and data-handling, see the [[foundation:Special:MyLanguage/Naming Convention Proposals Movement Feedback Survey Privacy Statement|survey privacy statement]].''
<!-- Message sent by User:Elitre (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Elitre_(WMF)/All_wikis_June_2020&oldid=20238769 -->
== Announcing a new wiki project! Welcome, Abstract Wikipedia ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hi all,
It is my honor to introduce Abstract Wikipedia, a new project that has been unanimously approved by the Wikimedia Foundation Board of Trustees. Abstract Wikipedia proposes a new way to generate baseline encyclopedic content in a multilingual fashion, allowing more contributors and more readers to share more knowledge in more languages. It is an approach that aims to make cross-lingual cooperation easier on our projects, increase the sustainability of our movement through expanding access to participation, improve the user experience for readers of all languages, and innovate in free knowledge by connecting some of the strengths of our movement to create something new.
This is our first new project in over seven years. Abstract Wikipedia was submitted as a project proposal by Denny Vrandečić in May 2020 <ref>[[m:Special:MyLanguage/Abstract Wikipedia|Abstract Wikipedia]]</ref> after years of preparation and research, leading to a detailed plan and lively discussions in the Wikimedia communities. We know that the energy and the creativity of the community often runs up against language barriers, and information that is available in one language may not make it to other language Wikipedias. Abstract Wikipedia intends to look and feel like a Wikipedia, but build on the powerful, language-independent conceptual models of Wikidata, with the goal of letting volunteers create and maintain Wikipedia articles across our polyglot Wikimedia world.
The project will allow volunteers to assemble the fundamentals of an article using words and entities from Wikidata. Because Wikidata uses conceptual models that are meant to be universal across languages, it should be possible to use and extend these building blocks of knowledge to create models for articles that also have universal value. Using code, volunteers will be able to translate these abstract “articles” into their own languages. If successful, this could eventually allow everyone to read about any topic in Wikidata in their own language.
As you can imagine, this work will require a lot of software development, and a lot of cooperation among Wikimedians. In order to make this effort possible, Denny will join the Foundation as a staff member in July and lead this initiative. You may know Denny as the creator of Wikidata, a long-time community member, a former staff member at Wikimedia Deutschland, and a former Trustee at the Wikimedia Foundation <ref>[[m:User:Denny|User:Denny]]</ref>. We are very excited that Denny will bring his skills and expertise to work on this project alongside the Foundation’s product, technology, and community liaison teams.
It is important to acknowledge that this is an experimental project, and that every Wikipedia community has different needs. This project may offer some communities great advantages. Other communities may engage less. Every language Wikipedia community will be free to choose and moderate whether or how they would use content from this project.
We are excited that this new wiki-project has the possibility to advance knowledge equity through increased access to knowledge. It also invites us to consider and engage with critical questions about how and by whom knowledge is constructed. We look forward to working in cooperation with the communities to think through these important questions.
There is much to do as we begin designing a plan for Abstract Wikipedia in close collaboration with our communities. I encourage you to get involved by going to the project page and joining the new mailing list <ref>[[mail:abstract-wikipedia|Abstract Wikipedia mailing list]]</ref>. We recognize that Abstract Wikipedia is ambitious, but we also recognize its potential. We invite you all to join us on a new, unexplored path.
Yours,
Katherine Maher (Executive Director, Wikimedia Foundation)
<references/>
</div> <small>Sent by [[:m:User:Elitre (WMF)]] 20:13, 9 dhen Iuchar 2020 (UTC) - '''[[:m:Special:MyLanguage/Abstract Wikipedia/July 2020 announcement]]''' </small>
<!-- Message sent by User:Elitre (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Elitre_(WMF)/All_wikis_June_2020&oldid=20265926 -->
== Technical Wishes: FileExporter and FileImporter become default features on all Wikis ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
The [[m:WMDE_Technical_Wishes/Move_files_to_Commons|FileExporter and FileImporter]] will become a default features on all wikis until August 7, 2020. They are planned to help you to move files from your local wiki to Wikimedia Commons easier while keeping all original file information (Description, Source, Date, Author, View History) intact. Additionally, the move is documented in the files view history.
How does it work?
Step 1: If you are an auto-confirmed user, you will see a link "Move file to Wikimedia Commons" on the local file page.
Step 2: When you click on this link, the FileImporter checks if the file can in fact be moved to Wikimedia Commons. These checks are performed based on the wiki's [[m:WMDE_Technical_Wishes/Move_files_to_Commons/Configuration_file_documentation|configuration file]] which is created and maintained by each local wiki community.
Step 3: If the file is compatible with Wikimedia Commons, you will be taken to an import page, at which you can update or add information regarding the file, such as the description. You can also add the 'Now Commons' template to the file on the local wiki by clicking the corresponding check box in the import form. Admins can delete the file from the local wiki by enabling the corresponding checkbox. By clicking on the 'Import' button at the end of the page, the file is imported to Wikimedia Commons.
If you want to know more about the [[m:WMDE_Technical_Wishes/Move_files_to_Commons|FileImporter extension]] or the [[m:WMDE_Technical_Wishes|Technical Wishes Project]], follow the links. --For the Technical Wishes Team: </div>[[User:Max Klemm (WMDE)|Max Klemm (WMDE)]] 09:13, 6 An Lùnastal 2020 (UTC)
<!-- Message sent by User:Max Klemm (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=20343133 -->
== Important: maintenance operation on September 1st ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch 2020|Read this message in another language]] • [[:m:Special:MyLanguage/Tech/Server switch 2020|{{int:please-translate}}]]
The [[foundation:|Wikimedia Foundation]] will be testing its secondary data centre. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to do a planned test. This test will show if they can reliably switch from one data centre to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
They will switch all traffic to the secondary data centre on '''Tuesday, September 1st 2020'''.
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on Tuesday, September 1st. The test will start at [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20200901T14 14:00 UTC] (15:00 BST, 16:00 CEST, 10:00 EDT, 19:30 IST, 07:00 PDT, 23:00 JST, and in New Zealand at 02:00 NZST on Wednesday September 2).
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
*There will be code freezes for the week of September 1st, 2020. Non-essential code deployments will not happen.
This project may be postponed if necessary. You can [[wikitech:Switch Datacenter#Schedule for 2018 switch|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. '''Please share this information with your community.'''
</div></div> <span dir=ltr>[[m:User:Trizek (WMF)|Trizek (WMF)]] ([[m:User talk:Trizek (WMF)|talk]])</span> 13:49, 26 An Lùnastal 2020 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=20384955 -->
== Invitation to participate in the conversation ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
''{{int:Hello}}. Apologies for cross-posting, and that you may not be reading this message in your native language: translations of the following announcement may be available on '''[[:m:Special:MyLanguage/Universal Code of Conduct/Draft review/Invitation (long version)|Meta]]'''. {{int:please-translate}}. {{Int:Feedback-thanks-title}}''
We are excited to share '''[[:m:Special:MyLanguage/Universal Code of Conduct/Draft review|a draft of the Universal Code of Conduct]]''', which the Wikimedia Foundation Board of Trustees called for earlier this year, for your review and feedback. The discussion will be open until October 6, 2020.
The UCoC Drafting Committee wants to learn which parts of the draft would present challenges for you or your work. What is missing from this draft? What do you like, and what could be improved?
Please join the conversation and share this invitation with others who may be interested to join, too.
To reduce language barriers during the process, you are welcomed to translate this message and the [[:m:Special:MyLanguage/Universal Code of Conduct/Draft review|Universal Code of Conduct/Draft review]]. You and your community may choose to provide your opinions/feedback using your local languages.
To learn more about the UCoC project, see the [[:m:Special:MyLanguage/Universal Code of Conduct|Universal Code of Conduct]] page, and the [[:m:Special:MyLanguage/Universal Code of Conduct/FAQ|FAQ]], on Meta.
Thanks in advance for your attention and contributions, [[:m:Talk:Trust_and_Safety|The Trust and Safety team at Wikimedia Foundation]], 17:55, 10 dhen t-Sultain 2020 (UTC) </div>
<!-- Message sent by User:Elitre (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Universal_Code_of_Conduct/Draft_review/Invitation_(long_version)/List&oldid=20440292 -->
== Wiktionary sitelinks dashboard: URL update ==
Hello all, and sorry for writing in English. Feel free to translate this message below.
The [[m:Wiktionary Cognate Dashboard|Wiktionary Cognate Dashboard]] presents interesting data about the extension powering your sitelinks. I just wanted to let you know that the URL of this tool changed: it is now accessible at https://wiktionary-analytics.wmcloud.org/Wiktionary_CognateDashboard/ . The former URLs, https://wmdeanalytics.wmflabs.org/Wiktionary_CognateDashboard/ and https://wdcm.wmflabs.org/Wiktionary_CognateDashboard/ , will be disabled on September 25th. Don't forget to update your documentation pages accordingly.
If you have questions about the tool or the URL switch, feel free to ping me. Cheers, [[:m:User:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] 11:46, 14 dhen t-Sultain 2020 (UTC)
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery/Wiktionary&oldid=19900821 -->
== Wiki of functions naming contest ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
{{int:Please-translate}}.
{{int:Hello}}. Please help pick a name for the new Wikimedia wiki project. This project will be a wiki where the community can work together on a library of [[m:Special:MyLanguage/Abstract_Wikipedia/Wiki_of_functions_naming_contest#function|functions]]. The community can create new functions, read about them, discuss them, and share them. Some of these functions will be used to help create language-independent Wikipedia articles that can be displayed in any language, as part of the Abstract Wikipedia project. But functions will also be usable in many other situations.
There will be two rounds of voting, each followed by legal review of candidates, with voting beginning on 29 September and 27 October. Our goal is to have a final project name selected on 8 December. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Wiki of functions naming contest|please learn more and vote now]]''' at meta-wiki. {{Int:Feedback-thanks-title}} --[[m:User:Quiddity (WMF)|Quiddity (WMF)]]</div> 21:16, 29 dhen t-Sultain 2020 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Quiddity_(WMF)/Global_message_delivery_split_3&oldid=20492308 -->
== Call for feedback about Wikimedia Foundation Bylaws changes and Board candidate rubric ==
<div lang="en" dir="ltr" class="mw-content-ltr">
{{int:Hello}}. Apologies if you are not reading this message in your native language. {{Int:Please-translate}}.
Today the Wikimedia Foundation Board of Trustees starts two calls for feedback. One is about changes to the Bylaws mainly to increase the Board size from 10 to 16 members. The other one is about a trustee candidate rubric to introduce new, more effective ways to evaluate new Board candidates. The Board welcomes your comments through 26 October. For more details, [[m:Special:MyLanguage/Wikimedia Foundation Board noticeboard/October 2020 - Call for feedback about Bylaws changes and Board candidate rubric|check the full announcement]].
{{Int:Feedback-thanks-title}} [[m:User:Qgil-WMF|Qgil-WMF]] ([[m:User talk:Qgil-WMF|talk]]) 17:11, 7 dhen Dàmhair 2020 (UTC)
</div>
<!-- Message sent by User:Elitre (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Elitre_(WMF)/Board4&oldid=20519860 -->
== Adminship for Kibi78704 - 19 Dàmhair 2020 ==
Once again, I would like to obtain temporary admin credentials to be better able to serve and maintain Uicleir. Please see #62 above, [[Wiktionary:Doras na coimhearsnachd#Adminship for Kibi78704]] as well as #154 above ([[Wiktionary:Doras na coimhearsnachd#Adminship for Kibi78704 - 25 Giblean 2020]]) and [[m:SRP#Kibi78704@gdwiktionary]].--><br>
I'm currently the only editor working here on Uicleir. There are currently neither stewards nor bureaucrats serving on this Wictionary; the only other admin is the automated Cleachdaiche:Abuse filter. I'm posting this two weeks before my temporary admin credentials expire.<br>
[[Cleachdaiche:Kibi78704|Kibi78704]] ([[Deasbaireachd a' chleachdaiche:Kibi78704|an deasbaireachd]]) 22:59, 19 dhen Dàmhair 2020 (UTC)
== Important: maintenance operation on October 27 ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch 2020|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch+2020&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] tests the switch between its first and secondary data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to do a planned test. This test will show if they can reliably switch from one data centre to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
They will switch all traffic back to the primary data center on '''Tuesday, October 27 2020'''.
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on Tuesday, October 27. The test will start at [https://zonestamp.toolforge.org/1603807200 14:00 UTC] (14:00 WET, 15:00 CET, 10:00 EDT, 19:30 IST, 07:00 PDT, 23:00 JST, and in New Zealand at 03:00 NZDT on Wednesday October 28).
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
*There will be code freezes for the week of October 26, 2020. Non-essential code deployments will not happen.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter#Schedule_for_2020_switch|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. A banner will be displayed on all wikis 30 minutes before this operation happens. '''Please share this information with your community.'''</div></div> -- <span dir=ltr>[[m:User:Trizek (WMF)|Trizek (WMF)]] ([[m:User talk:Trizek (WMF)|talk]])</span> 17:12, 21 dhen Dàmhair 2020 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=20519839 -->
== Wiki of functions naming contest - Round 2 ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
{{int:Hello}}.
Reminder: Please help to choose the name for the new Wikimedia wiki project - the library of functions. The finalist vote starts today. The finalists for the name are: <span lang="en" dir="ltr" class="mw-content-ltr">Wikicode, Wikicodex, Wikifunctions, Wikifusion, Wikilambda, Wikimedia Functions</span>. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Wiki of functions naming contest/Names|please learn more and vote now]]''' at Meta-wiki.
{{Int:Feedback-thanks-title}} --[[m:User:Quiddity (WMF)|Quiddity (WMF)]]
</div> 22:11, 5 dhen t-Samhain 2020 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=20564572 -->
== Community Wishlist Survey 2021 ==
[[File:Magic Wand Icon 229981 Color Flipped.svg|thumb|48px]]
The '''[[m:Special:MyLanguage/Community Wishlist Survey 2021|2021 Community Wishlist Survey]]''' is now open! This survey is the process where communities decide what the [[m:Community Tech|Community Tech]] team should work on over the next year. We encourage everyone to submit proposals until the deadline on '''{{#time:j xg|2020-11-30|{{PAGELANGUAGE}}}}''', or comment on other proposals to help make them better. The communities will vote on the proposals between {{#time:j xg|2020-12-08|{{PAGELANGUAGE}}}} and {{#time:j xg|2020-12-21|{{PAGELANGUAGE}}}}.
The Community Tech team is focused on tools for experienced Wikimedia editors. You can write proposals in any language, and we will translate them for you. Thank you, and we look forward to seeing your proposals!
[[m:user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] 05:52, 20 dhen t-Samhain 2020 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=20689940 -->
== Global bot policy proposal: invitation to a Meta discussion ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
{{int:hello}}!
I apologize for sending a message in English. {{int:please-translate}}. According to [[:m:Bot_policy/Implementation#Where_it_is_policy|the list]], your wiki project currently is opted in to the [[:m:Bot_policy#Global_bots|global bot policy]]. Under this policy, bots that fix double redirects or maintain interwiki links are allowed to operate under a global bot flag that is assigned directly by the stewards.
As the Wikimedia projects developed, the need for the current global bot policy decreased, and in the past years, no bots were appointed via that policy. That is mainly given Wikidata were estabilished in 2013, and it is no longer necessary to have dozens of bots that maintain interwiki links.
A [[:m:Requests for comment/Refine global bot policy|proposal]] was made at Meta-Wiki, which proposes that the stewards will be authorized to determine whether an uncontroversial task may be assigned a global bot flag. The stewards already assign permissions that are more impactful on many wikis, namely, [[:m:GS|global sysops]] and [[:m:GR|global renamers]], and I do not think that trust should be an issue. The stewards will assign the permission only to time-proven bots that are already approved at a number of projects, like [[:m:User:ListeriaBot|ListeriaBot]].
By this message, I would like to invite you to comment [[:m:Requests for comment/Refine global bot policy|in the global RFC]], to voice your opinion about this matter.
Thank you for your time.
Best regards,<br />
[[User:Martin Urbanec|Martin Urbanec]] ([[:m:User talk:Martin Urbanec|{{int:Talkpagelinktext}}]]) 11:49, 24 dhen t-Samhain 2020 (UTC)
</div>
<!-- Message sent by User:Martin Urbanec@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Martin_Urbanec/sand&oldid=20709229 -->
== Wikidata descriptions changes to be included more often in Recent Changes and Watchlist ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
''Sorry for sending this message in English. Translations are available on [[m:Special:MyLanguage/Announcements/Announcement Wikidata descriptions in watchlist|this page]]. Feel free to translate it in more languages!''
As you may know, you can include changes coming from Wikidata in your Watchlist and Recent Changes ([[Special:Preferences#mw-prefsection-watchlist|in your preferences]]). Until now, this feature didn’t always include changes made on Wikidata descriptions due to the way Wikidata tracks the data used in a given article.
Starting on December 3rd, the Watchlist and Recent Changes will include changes on the descriptions of Wikidata Items that are used in the pages that you watch. This will only include descriptions in the language of your wiki to make sure that you’re only seeing changes that are relevant to your wiki.
This improvement was requested by many users from different projects. We hope that it can help you monitor the changes on Wikidata descriptions that affect your wiki and participate in the effort of improving the data quality on Wikidata for all Wikimedia wikis and beyond.
Note: if you didn’t use the Wikidata watchlist integration feature for a long time, feel free to give it another chance! The feature has been improved since the beginning and the content it displays is more precise and useful than at the beginning of the feature in 2015.
If you encounter any issue or want to provide feedback, feel free to use [[Phab:T191831|this Phabricator ticket]]. Thanks!
[[:d:User:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] 14:40, 30 dhen t-Samhain 2020 (UTC)
</div>
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Lea_Lacroix_(WMDE)/wikis&oldid=20728482 -->
== 2020 Coolest Tool Award Ceremony on December 11th ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hello all,
The ceremony of the 2020 [[m:Coolest_Tool_Award|Wikimedia Coolest Tool Award]] will take place virtually on Friday, December 11th, at 17:00 GMT. This award is highlighting tools that have been nominated by contributors to the Wikimedia projects, and the ceremony will be a nice moment to show appreciation to the tools developers and maybe discover new tools!
You will find more information [[m:Coolest_Tool_Award|here]] about the livestream and the discussions channels. Thanks for your attention, [[:d:User:Lea Lacroix (WMDE)|Lea Lacroix (WMDE)]] 10:55, 7 dhen Dùbhlachd 2020 (UTC)
</div>
<!-- Message sent by User:Lea Lacroix (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=20734978 -->
== Community Wishlist Survey 2021 ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
[[File:Magic Wand Icon 229981 Color Flipped.svg|thumb|48px]]
'''We invite all registered users to vote on the [[m:Special:MyLanguage/Community Wishlist Survey 2021|2021 Community Wishlist Survey]]. You can vote from now until {{#time:j xg|2020-12-21|en}} for as many different wishes as you want.'''
In the Survey, wishes for new and improved tools for experienced editors are collected. After the voting, we will do our best to grant your wishes. We will start with the most popular ones.
We, the [[m:Special:MyLanguage/Community Tech|Community Tech]], are one of the [[m:Special:MyLanguage/Wikimedia Foundation|Wikimedia Foundation]] teams. We create and improve editing and wiki moderation tools. What we work on is decided based on results of the Community Wishlist Survey. Once a year, you can submit wishes. After two weeks, you can vote on the ones that you're most interested in. Next, we choose wishes from the survey to work on. Some of the wishes may be granted by volunteer developers or other teams.
We are waiting for your votes. Thank you!
</div>
[[user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]]
15:03, 11 dhen Dùbhlachd 2020 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=20689952 -->
== Moving Wikimania 2021 to a Virtual Event ==
<div class="mw-content-ltr" lang="en" dir="ltr">
[[File:Wikimania_logo_with_text_2.svg|right|alt=Wikimania's logo.|75px]]
''{{int:Hello}}. Apologies if you are not reading this message in your native language. {{Int:Please-translate}}. {{Int:Feedback-thanks-title}}''
[[:m:Wikimania 2021|Wikimania will be a virtual event this year]], and hosted by a wide group of community members. Whenever the next in-person large gathering is possible again, [[:m:ESEAP Hub|the ESEAP Core Organizing Team]] will be in charge of it. Stay tuned for more information about how ''you'' can get involved in the planning
process and other aspects of the event. [https://lists.wikimedia.org/pipermail/wikimedia-l/2021-January/096141.html Please read the longer version of this announcement on wikimedia-l].
''ESEAP Core Organizing Team, Wikimania Steering Committee, Wikimedia Foundation Events Team'', 15:16, 27 dhen Fhaoilleach 2021 (UTC)
</div>
<!-- Message sent by User:Elitre (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Elitre_(WMF)/Wikimania21&oldid=21014617 -->
== Project Grant Open Call ==
This is the announcement for the [[m:Grants:Project|Project Grants program]] open call that started on January 11, with the submission deadline of February 10, 2021.<br> This first open call will be focussed on Community Organizing proposals. A second open call focused on research and software proposals is scheduled from February 15 with a submission deadline of March 16, 2021.<br>
For the Round 1 open call, we invite you to propose grant applications that fall under community development and organizing (offline and online) categories. Project Grant funds are available to support individuals, groups, and organizations to implement new experiments and proven ideas, from organizing a better process on your wiki, coordinating a campaign or editathon series to providing other support for community building. We offer the following resources to help you plan your project and complete a grant proposal:<br>
* Weekly proposals clinics via Zoom during the Open Call. Join us for [[m:Grants:Project|#Upcoming_Proposal_Clinics|real-time discussions]] with Program Officers and select thematic experts and get live feedback about your Project Grants proposal. We’ll answer questions and help you make your proposal better. We also offer these support pages to help you build your proposal:
* [[m:Grants:Project/Tutorial|Video tutorials]] for writing a strong application<br>
* General [[m:Grants:Project/Plan|planning page]] for Project Grants <br>
* [[m:Grants:Project/Learn|Program guidelines and criteria]]<br>
Program officers are also available to offer individualized proposal support upon request. Contact us if you would like feedback or more information.<br>
We are excited to see your grant ideas that will support our community and make an impact on the future of Wikimedia projects. Put your idea into motion, and [[m:Grants:Project/Apply|submit your proposal]] by February 10, 2021!<br>
Please feel free to get in touch with questions about getting started with your grant application, or about serving on the Project Grants Committee. Contact us at projectgrants{{at}}wikimedia.org. Please help us translate this message to your local language. [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 08:01, 28 dhen Fhaoilleach 2021 (UTC)
<!-- Message sent by User:RSharma (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=20808431 -->
== Wiki Loves Folklore 2021 is back! ==
<div lang="en" dir="ltr" class="mw-content-ltr">
{{int:please-translate}}
[[File:Wiki Loves Folklore Logo.svg|right|150px|frameless]]
You are humbly invited to participate in the '''[[:c:Commons:Wiki Loves Folklore 2021|Wiki Loves Folklore 2021]]''' an international photography contest organized on Wikimedia Commons to document folklore and intangible cultural heritage from different regions, including, folk creative activities and many more. It is held every year from the 1st till the 28th of February.
You can help in enriching the folklore documentation on Commons from your region by taking photos, audios, videos, and [https://commons.wikimedia.org/w/index.php?title=Special:UploadWizard&campaign=wlf_2021 submitting] them in this commons contest.
Please support us in translating the [[:c:Commons: Wiki Loves Folklore 2021|project page]] and a [https://meta.wikimedia.org/wiki/Special:Translate?group=Centralnotice-tgroup-wikiloveslove2020&language=en&filter=%21translated&action=translate|one-line banner message] to help us spread the word in your native language.
'''Kind regards,'''
'''Wiki loves Folklore International Team'''
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 13:25, 6 dhen Ghearran 2021 (UTC)
</div>
<!-- Message sent by User:Tiven2240@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Tiven2240/wll&oldid=21073884 -->
== Proposal: Set two-letter project shortcuts as alias to project namespace globally ==
<div lang="en" dir="ltr">
{{int:please-translate}}
Hello everyone,
I apologize for posting in English. I would like to inform everyone that I created a new global request for comment (GRFC) at Meta Wiki, which may affect your project: [[:m:Requests for comment/Set short project namespace aliases by default globally]].
In this GRFC, I propose that two-project shortcuts for project names will become a default alias for the project namespace. For instance, on all Wikipedias, WP will be an alias to the Wikipedia: namespace (and similar for other projects). Full list is available in the GRFC.
This is already the case for Wikivoyages, and many individual projects asked for this alias to be implemented. I believe this makes it easier to access the materials in the project namespace, as well as creating shortcuts like <tt>WP:NPOV</tt>, as well as helps new projects to use this feature, without having to figure out how to request site configuration changes first.
As far as I can see, {{SITENAME}} currently does not have such an alias set. This means that such an alias will be set for you, if the GRFC is accepted by the global community.
I would like to ask all community members to participate in the request for comment at Meta-Wiki, see [[:m:Requests for comment/Set short project namespace aliases by default globally]].
Please feel free to [[:m:User talk:Martin Urbanec|ask me]] if you have any questions about this proposal.
Best regards,<br />
--[[:m:User:Martin Urbanec|Martin Urbanec]] ([[:m:User talk:Martin Urbanec|talk]]) 14:12, 18 dhen Ghearran 2021 (UTC)
</div>
<!-- Message sent by User:Martin Urbanec@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Martin_Urbanec/MassMessage&oldid=21125035 -->
== Wikifunctions logo contest ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
{{Int:Hello}}. Please help to choose a design concept for the logo of the new Wikifunctions wiki. Voting starts today and will be open for 2 weeks. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Wikifunctions logo concept/Vote|please learn more and vote now]]''' at Meta-Wiki. {{Int:Feedback-thanks-title}} --[[m:User:Quiddity (WMF)|Quiddity (WMF)]]</div> 01:51, 2 dhen Mhàrt 2021 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=21087740 -->
== Universal Code of Conduct – 2021 consultations ==
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Universal Code of Conduct Phase 2 ===
{{int:please-translate}}
The [[:wmf:Special:MyLanguage/Universal Code of Conduct|'''Universal Code of Conduct (UCoC)''']] provides a universal baseline of acceptable behavior for the entire Wikimedia movement and all its projects. The project is currently in Phase 2, outlining clear enforcement pathways. You can read more about the whole project on its [[:m:Special:MyLanguage/Universal Code of Conduct|'''project page''']].
==== Drafting Committee: Call for applications ====
The Wikimedia Foundation is recruiting volunteers to join a committee to draft how to make the code enforceable. Volunteers on the committee will commit between 2 and 6 hours per week from late April through July and again in October and November. It is important that the committee be diverse and inclusive, and have a range of experiences, including both experienced users and newcomers, and those who have received or responded to, as well as those who have been falsely accused of harassment.
To apply and learn more about the process, see [[:m:Special:MyLanguage/Universal Code of Conduct/Drafting committee|Universal Code of Conduct/Drafting committee]].
==== 2021 community consultations: Notice and call for volunteers / translators ====
From 5 April – 5 May 2021 there will be conversations on many Wikimedia projects about how to enforce the UCoC. We are looking for volunteers to translate key material, as well as to help host consultations on their own languages or projects using suggested [[:m:Special:MyLanguage/Universal Code of Conduct/2021 consultations/Discussion|key questions]]. If you are interested in volunteering for either of these roles, please [[:m:Talk:Universal Code of Conduct/2021 consultations|contact us]] in whatever language you are most comfortable.
To learn more about this work and other conversations taking place, see [[:m:Special:MyLanguage/Universal Code of Conduct/2021 consultations|Universal Code of Conduct/2021 consultations]].
-- [[User:Xeno (WMF)|Xeno (WMF)]] ([[User talk:Xeno (WMF)|talk]]) 22:26, 5 dhen Ghiblean 2021 (UTC)
</div>
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:MNadzikiewicz_(WMF)/Without_Russian,_Polish_and_translated/9&oldid=21302210 -->
== Global bot policy changes ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
{{int:hello}}!
I apologize for sending a message in English. {{int:please-translate}}. According to [[:m:Bot_policy/Implementation#Where_it_is_policy|the list]], your wiki project is currently opted in to the [[:m:Bot_policy#Global_bots|global bot policy]]. As such, I want to let you know about some changes that were made after the [[:m:Requests for comment/Refine global bot policy|global RfC]] was closed.
*Global bots are now subject to a 2 week discussion, and it'll be publicized via a MassMessage list, available at [[:m:Bot policy/New global bot discussion|Bot policy/New global bot discussion]] on Meta. Please subscribe yourself or your wiki if you are interested in new global bots proposals.
*For a bot to be considered for approval, it must demonstrate it is welcomed in multiple projects, and a good way to do that is to have the bot flag on at least 5 wikis for a single task.
*The bot operator should make sure to adhere to the wiki's preference as related to the use of the bot flag (i.e., if a wiki doesn't want a bot to use the flag as it edits, that should be followed).
Thank you for your time.
Best regards,<br />
—'''''<span style="font-family:Candara">[[User:Tks4Fish|<span style="color:black">Thanks for the fish!</span>]] <sup>[[User Talk:Tks4Fish|<span style="color:blue">talk</span>]]•[[Special:Contribs/Tks4Fish|contribs]]</sup></span>''''' 18:48, 6 dhen Ghiblean 2021 (UTC)
</div>
<!-- Message sent by User:Tks4Fish@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Tks4Fish/temp&oldid=21306363 -->
== Line numbering coming soon to all wikis ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
[[File:Technical_Wishes_–_Line_numbering_-_2010_wikitext_editor.png|thumb|Example]]
From April 15, you can enable line numbering in some wikitext editors - for now in the template namespace, coming to more namespaces soon. This will make it easier to detect line breaks and to refer to a particular line in discussions. These numbers will be shown if you enable the syntax highlighting feature ([[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror extension]]), which is supported in the [[mw:Special:MyLanguage/Extension:WikiEditor|2010]] and [[mw:Special:MyLanguage/2017 wikitext editor|2017]] wikitext editors.
More information can be found on [[m:WMDE Technical Wishes/Line Numbering|this project page]]. Everyone is invited to test the feature, and to give feedback [[m:talk:WMDE Technical Wishes/Line Numbering|on this talk page]].
</div> -- [[m:User:Johanna Strodt (WMDE)|Johanna Strodt (WMDE)]] 15:08, 12 dhen Ghiblean 2021 (UTC)
<!-- Message sent by User:Johanna Strodt (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=21329014 -->
== Suggested Values ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
From April 29, it will be possible to suggest values for parameters in templates. Suggested values can be added to [[mw:Special:MyLanguage/Help:TemplateData|TemplateData]] and will then be shown as a drop-down list in [[mw:Special:MyLanguage/Help:VisualEditor/User guide|VisualEditor]]. This allows template users to quickly select an appropriate value. This way, it prevents potential errors and reduces the effort needed to fill the template with values. It will still be possible to fill in values other than the suggested ones.
More information, including the supported parameter types and how to create suggested values: [[mw:Help:TemplateData#suggestedvalues|[1]]] [[m:WMDE_Technical_Wishes/Suggested_values_for_template_parameters|[2]]]. Everyone is invited to test the feature, and to give feedback [[m:Talk:WMDE Technical Wishes/Suggested values for template parameters|on this talk page]].
</div> [[m:User:Timur Vorkul (WMDE)|Timur Vorkul (WMDE)]] 14:08, 22 dhen Ghiblean 2021 (UTC)
<!-- Message sent by User:Timur Vorkul (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=21361904 -->
== Universal Code of Conduct News – Issue 1 ==
<div style = "line-height: 1.2">
<span style="font-size:200%;">'''Universal Code of Conduct News'''</span><br>
<span style="font-size:120%; color:#404040;">'''Issue 1, June 2021'''</span><span style="font-size:120%; float:right;">[[m:Universal Code of Conduct/Newsletter/1|Read the full newsletter]]</span>
----
Welcome to the first issue of [[m:Special:MyLanguage/Universal Code of Conduct|Universal Code of Conduct News]]! This newsletter will help Wikimedians stay involved with the development of the new code, and will distribute relevant news, research, and upcoming events related to the UCoC.
Please note, this is the first issue of UCoC Newsletter which is delivered to all subscribers and projects as an announcement of the initiative. If you want the future issues delivered to your talk page, village pumps, or any specific pages you find appropriate, you need to [[m:Global message delivery/Targets/UCoC Newsletter Subscription|subscribe here]].
You can help us by translating the newsletter issues in your languages to spread the news and create awareness of the new conduct to keep our beloved community safe for all of us. Please [[m:Universal Code of Conduct/Newsletter/Participate|add your name here]] if you want to be informed of the draft issue to translate beforehand. Your participation is valued and appreciated.
</div><div style="margin-top:3px; padding:10px 10px 10px 20px; background:#fffff; border:2px solid #808080; border-radius:4px; font-size:100%;">
* '''Affiliate consultations''' – Wikimedia affiliates of all sizes and types were invited to participate in the UCoC affiliate consultation throughout March and April 2021. ([[m:Universal Code of Conduct/Newsletter/1#sec1|continue reading]])
* '''2021 key consultations''' – The Wikimedia Foundation held enforcement key questions consultations in April and May 2021 to request input about UCoC enforcement from the broader Wikimedia community. ([[m:Universal Code of Conduct/Newsletter/1#sec2|continue reading]])
* '''Roundtable discussions''' – The UCoC facilitation team hosted two 90-minute-long public roundtable discussions in May 2021 to discuss UCoC key enforcement questions. More conversations are scheduled. ([[m:Universal Code of Conduct/Newsletter/1#sec3|continue reading]])
* '''Phase 2 drafting committee''' – The drafting committee for the phase 2 of the UCoC started their work on 12 May 2021. Read more about their work. ([[m:Universal Code of Conduct/Newsletter/1#sec4|continue reading]])
* '''Diff blogs''' – The UCoC facilitators wrote several blog posts based on interesting findings and insights from each community during local project consultation that took place in the 1st quarter of 2021. ([[m:Universal Code of Conduct/Newsletter/1#sec5|continue reading]])</div>
--[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 23:06, 11 dhen Ògmhios 2021 (UTC)
<!-- Message sent by User:SOyeyele (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SOyeyele_(WMF)/Announcements/Other_languages&oldid=21578291 -->
== Wikimania 2021: Individual Program Submissions ==
[[File:Wikimania logo with text 2.svg|right|200px]]
Dear all,
Wikimania 2021 will be [[:wikimania:2021:Save the date and the Core Organizing Team|hosted virtually]] for the first time in the event's 15-year history. Since there is no in-person host, the event is being organized by a diverse group of Wikimedia volunteers that form the [[:wikimania:2021:Organizers|Core Organizing Team]] (COT) for Wikimania 2021.
'''Event Program''' - Individuals or a group of individuals can submit their session proposals to be a part of the program. There will be translation support for sessions provided in a number of languages. See more information [[:wikimania:2021:Submissions/Guidelines#Language Accessibility|here]].
Below are some links to guide you through;
* [[:wikimania:2021:Submissions|Program Submissions]]
* [[:wikimania:2021:Submissions/Guidelines|Session Submission Guidelines]]
* [[:wikimania:2021:FAQ|FAQ]]
Please note that the deadline for submission is 18th June 2021.
'''Announcements'''- To keep up to date with the developments around Wikimania, the COT sends out weekly updates. You can view them in the Announcement section [[:wikimania:2021:Announcements|here]].
'''Office Hour''' - If you are left with questions, the COT will be hosting some office hours (in multiple languages), in multiple time-zones, to answer any programming questions that you might have. Details can be found [[:wikimania:2021:Organizers#Office hours schedule|here.]]
Best regards,
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 04:18, 16 dhen Ògmhios 2021 (UTC)
On behalf of Wikimania 2021 Core Organizing Team
<!-- Message sent by User:Bodhisattwa@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/VisualEditor/Newsletter/Wikis_with_VE&oldid=21597568 -->
== Editing news 2021 #2 ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
<em>[[m:Special:MyLanguage/VisualEditor/Newsletter/2021/June|Read this in another language]] • [[m:VisualEditor/Newsletter|Subscription list for this multilingual newsletter]]</em>
[[File:Reply Tool A-B test comment completion.png|alt=Junior contributors comment completion rate across all participating Wikipedias|thumb|296x296px|When newcomers had the Reply tool and tried to post on a talk page, they were more successful at posting a comment. ([https://wikimedia-research.github.io/Reply-tools-analysis-2021/ Source])]]
Earlier this year, the Editing team ran a large study of [[mw:Talk pages project/Replying|the Reply Tool]]. The main goal was to find out whether the Reply Tool helped [[mw:Talk pages project/Glossary|newer editors]] communicate on wiki. The second goal was to see whether the comments that newer editors made using the tool needed to be reverted more frequently than comments newer editors made with the existing wikitext page editor.
The key results were:
* Newer editors who had automatic ("default on") access to the Reply tool were [https://wikimedia-research.github.io/Reply-tools-analysis-2021/ more likely] to post a comment on a talk page.
* The comments that newer editors made with the Reply Tool were also [https://wikimedia-research.github.io/Reply-tools-analysis-2021/ less likely] to be reverted than the comments that newer editors made with page editing.
These results give the Editing team confidence that the tool is helpful.
<strong>Looking ahead</strong>
The team is planning to make the Reply tool available to everyone as an opt-out preference in the coming months. This has already happened at the Arabic, Czech, and Hungarian Wikipedias.
The next step is to [[phab:T280599|resolve a technical challenge]]. Then, they will deploy the Reply tool first to the [[phab:T267379|Wikipedias that participated in the study]]. After that, they will deploy it, in stages, to the other Wikipedias and all WMF-hosted wikis.
You can turn on "{{int:discussiontools-preference-label}}" [[Special:Preferences#mw-prefsection-betafeatures|in Beta Features]] now. After you get the Reply tool, you can change your preferences at any time in [[Special:Preferences#mw-prefsection-editing-discussion]].
–[[User:Whatamidoing (WMF)|Whatamidoing (WMF)]] ([[User talk:Whatamidoing (WMF)|talk]])
</div> 14:15, 24 dhen Ògmhios 2021 (UTC)
<!-- Message sent by User:Elitre (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/VisualEditor/Newsletter/Wikis_with_VE&oldid=21624491 -->
== Server switch ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch 2020|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch+2020&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] tests the switch between its first and secondary data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to do a planned test. This test will show if they can reliably switch from one data centre to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems. <!--
They will switch all traffic back to the primary data center on '''Tuesday, October 27 2020'''. -->
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on Tuesday, 29 June 2021. The test will start at [https://zonestamp.toolforge.org/1624975200 14:00 UTC] (07:00 PDT, 10:00 EDT, 15:00 WEST/BST, 16:00 CEST, 19:30 IST, 23:00 JST, and in New Zealand at 02:00 NZST on Wednesday 30 June).
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
*There will be code freezes for the week of June 28. Non-essential code deployments will not happen.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter#Schedule_for_2021_switch|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. A banner will be displayed on all wikis 30 minutes before this operation happens. '''Please share this information with your community.'''</div></div> [[user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] 01:19, 27 dhen Ògmhios 2021 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=21463754 -->
== Universal Code of Conduct - Enforcement draft guidelines review ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="content"/>The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Drafting_committee#Phase_2|Universal Code of Conduct Phase 2 drafting committee]] would like comments about the '''[[:m:Universal Code of Conduct/Enforcement draft guidelines review|enforcement draft guidelines]]''' for the [[m:Special:MyLanguage/Universal Code of Conduct|Universal Code of Conduct]] (UCoC). This review period is planned for 17 August 2021 through 17 October 2021.
These guidelines are not final but you can help move the progress forward. The committee will revise the guidelines based upon community input.
Comments can be shared in any language on the [[m:Talk:Universal Code of Conduct/Enforcement draft guidelines review|draft review talk page]] and [[m:Special:MyLanguage/Universal Code of Conduct/Discussions|multiple other venues]]. Community members are encouraged to organize conversations in their communities.
There are planned live discussions about the UCoC enforcement draft guidelines:
:[[wmania:2021:Submissions/Universal_Code_of_Conduct_Roundtable|Wikimania 2021 session]] (recorded 16 August)
:[[m:Special:MyLanguage/Universal_Code_of_Conduct/2021_consultations/Roundtable_discussions#Conversation hours|Conversation hours]] - 24 August, 31 August, 7 September @ 03:00 UTC & 14:00 UTC
:[[m:Special:MyLanguage/Universal_Code_of_Conduct/2021_consultations/Roundtable_discussions|Roundtable calls]] - 18 September @ 03:00 UTC & 15:00 UTC
Summaries of discussions will be posted every two weeks [[m:Special:MyLanguage/Universal Code of Conduct/Drafting committee/Digests|here]].
Please let me know if you have any questions.<section end="content"/>
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 22:59, 17 An Lùnastal 2021 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Xeno_(WMF)/Delivery/Wiktionary&oldid=21895623 -->
== Wikimedia Foundation Board of Trustees election has come to an end ==
Thank you for participating in the [[:meta:Special:MyLanguage/Wikimedia_Foundation_elections/2021|2021 Wikimedia Foundation Board of Trustees election]]! Voting closed August 31 at 23:59. The official data, including the four most voted candidates, will be announced as soon as the [[:meta:Special:MyLanguage/Wikimedia_Foundation_elections_committee|Elections Committee]] completes their review of the ballots. The official announcement of the new trustees appointed will happen later, once the selected candidates have been confirmed by the Board.
6,946 community members from 216 wiki projects have voted. This makes 10.2% global participation, 1.1% higher than in the last Board elections. In 2017, 5167 people from 202 wiki projects cast their vote. A full analysis is planned to be published in a few days when the confirmed results are announced. In the meantime, you can check the [[:meta:Special:MyLanguage/Wikimedia_Foundation_elections/2021/Stats|data produced during the election]].
Diversity was an important goal with these elections. Messages about the Board election were translated into 61 languages. This outreach worked well. There were 70 communities with eligible voters voting in this election for the first time. With your help, next year’s Board of Trustees election will be even better.
20:58, 1 dhen t-Sultain 2021 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Xeno_(WMF)/Delivery/Wiktionary&oldid=21895623 -->
== The 2022 Community Wishlist Survey will happen in January ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
Hello everyone,
We hope all of you are as well and safe as possible during these trying times! We wanted to share some news about a change to the Community Wishlist Survey 2022. We would like to hear your opinions as well.
Summary:
<div style="font-style:italic;">
We will be running the [[m:Special:MyLanguage/Community Wishlist Survey|Community Wishlist Survey]] 2022 in January 2022. We need more time to work on the 2021 wishes. We also need time to prepare some changes to the Wishlist 2022. In the meantime, you can use a [[m:Special:MyLanguage/Community Wishlist Survey/Sandbox|dedicated sandbox to leave early ideas for the 2022 wishes]].
</div>
=== Proposing and wish-fulfillment will happen during the same year ===
In the past, the [[m:Special:MyLanguage/Community Tech|Community Tech]] team has run the Community Wishlist Survey for the following year in November of the prior year. For example, we ran the [[m:Special:MyLanguage/Community Wishlist Survey 2021|Wishlist for 2021]] in November 2020. That worked well a few years ago. At that time, we used to start working on the Wishlist soon after the results of the voting were published.
However, in 2021, there was a delay between the voting and the time when we could start working on the new wishes. Until July 2021, we were working on wishes from the [[m:Special:MyLanguage/Community Wishlist Survey 2020|Wishlist for 2020]].
We hope having the Wishlist 2022 in January 2022 will be more intuitive. This will also give us time to fulfill more wishes from the 2021 Wishlist.
=== Encouraging wider participation from historically excluded communities ===
We are thinking how to make the Wishlist easier to participate in. We want to support more translations, and encourage under-resourced communities to be more active. We would like to have some time to make these changes.
=== A new space to talk to us about priorities and wishes not granted yet ===
We will have gone 365 days without a Wishlist. We encourage you to approach us. We hope to hear from you in the [[m:Special:MyLanguage/Talk:Community Wishlist Survey|talk page]], but we also hope to see you at our bi-monthly Talk to Us meetings! These will be hosted at two different times friendly to time zones around the globe.
We will begin our first meeting '''September 15th at 23:00 UTC'''. More details about the agenda and format coming soon!
=== Brainstorm and draft proposals before the proposal phase ===
If you have early ideas for wishes, you can use the [[m:Special:MyLanguage/Community Wishlist Survey/Sandbox|new Community Wishlist Survey sandbox]]. This way, you will not forget about these before January 2022. You will be able to come back and refine your ideas. Remember, edits in the sandbox don't count as wishes!
=== Feedback ===
* What should we do to improve the Wishlist pages?
* How would you like to use our new [[m:Special:MyLanguage/Community Wishlist Survey/Sandbox|sandbox?]]
* What, if any, risks do you foresee in our decision to change the date of the Wishlist 2022?
* What will help more people participate in the Wishlist 2022?
Answer on the [[m:Special:MyLanguage/Talk:Community Wishlist Survey|talk page]] (in any language you prefer) or at our Talk to Us meetings.
</div>
[[user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[user talk:SGrabarczuk (WMF)|talk]]) 00:24, 7 dhen t-Sultain 2021 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=21980442 -->
== Call for Candidates for the Movement Charter Drafting Committee ending 14 September 2021 ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content"/>Movement Strategy announces [[:m:Special:MyLanguage/Movement_Charter/Drafting_Committee|the Call for Candidates for the Movement Charter Drafting Committee]]. The Call opens August 2, 2021 and closes September 14, 2021.
The Committee is expected to represent [[:m:Special:MyLanguage/Movement_Charter/Drafting_Committee/Diversity_and_Expertise_Matrices|diversity in the Movement]]. Diversity includes gender, language, geography, and experience. This comprises participation in projects, affiliates, and the Wikimedia Foundation.
English fluency is not required to become a member. If needed, translation and interpretation support is provided. Members will receive an allowance to offset participation costs. It is US$100 every two months.
We are looking for people who have some of the following [[:m:Special:MyLanguage/Movement_Charter/Drafting_Committee#Role_Requirements|skills]]:
* Know how to write collaboratively. (demonstrated experience is a plus)
* Are ready to find compromises.
* Focus on inclusion and diversity.
* Have knowledge of community consultations.
* Have intercultural communication experience.
* Have governance or organization experience in non-profits or communities.
* Have experience negotiating with different parties.
The Committee is expected to start with 15 people. If there are 20 or more candidates, a mixed election and selection process will happen. If there are 19 or fewer candidates, then the process of selection without election takes place.
Will you help move Wikimedia forward in this important role? Submit your candidacy [[:m:Special:MyLanguage/Movement_Charter/Drafting_Committee#Candidate_Statements|here]]. Please contact strategy2030[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org with questions.<section end="announcement-content"/>
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 17:10, 10 dhen t-Sultain 2021 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Xeno_(WMF)/Delivery/Wiktionary&oldid=22002289 -->
== Server switch ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr"><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] tests the switch between its first and secondary data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to do a planned test. This test will show if they can reliably switch from one data centre to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
They will switch all traffic back to the primary data center on '''Tuesday, 14 September 2021'''.
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on Tuesday, 14 September 2021. The test will start at [https://zonestamp.toolforge.org/1631628049 14:00 UTC] (07:00 PDT, 10:00 EDT, 15:00 WEST/BST, 16:00 CEST, 19:30 IST, 23:00 JST, and in New Zealand at 02:00 NZST on Wednesday, 15 September).
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
* We expect the code deployments to happen as any other week. However, some case-by-case code freezes could punctually happen if the operation require them afterwards.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. A banner will be displayed on all wikis 30 minutes before this operation happens. '''Please share this information with your community.'''</div></div> [[user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[user talk:SGrabarczuk (WMF)|<span class="signature-talk">{{int:Talkpagelinktext}}</span>]]) 00:46, 11 dhen t-Sultain 2021 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=21980442 -->
== Talk to the Community Tech ==
[[File:Magic Wand Icon 229981 Color Flipped.svg|{{dir|{{pagelang}}|left|right}}|frameless|50px]]
[[:m:Special:MyLanguage/Community Wishlist Survey/Updates/2021-09 Talk to Us|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Community_Wishlist_Survey/Updates/2021-09_Talk_to_Us&language=&action=page&filter= {{int:please-translate}}]
Hello!
As we have [[m:Special:MyLanguage/Community Wishlist Survey/Updates|recently announced]], we, the team working on the [[m:Special:MyLanguage/Community Wishlist Survey|Community Wishlist Survey]], would like to invite you to an online meeting with us. It will take place on [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20210915T2300 '''September 15th, 23:00 UTC'''] on Zoom, and will last an hour. [https://wikimedia.zoom.us/j/89828615390 '''Click here to join'''].
'''Agenda'''
* [[m:Special:MyLanguage/Community Wishlist Survey 2021/Status report 1#Prioritization Process|How we prioritize the wishes to be granted]]
* [[m:Special:MyLanguage/Community Wishlist Survey/Updates|Why we decided to change the date]] from November 2021 to January 2022
* Update on the [[m:Special:MyLanguage/Community Wishlist Survey 2021/Warn when linking to disambiguation pages|disambiguation]] and the [[m:Special:MyLanguage/Community Wishlist Survey 2021/Real Time Preview for Wikitext|real-time preview]] wishes
* Questions and answers
'''Format'''
The meeting will not be recorded or streamed. Notes without attribution will be taken and published on Meta-Wiki. The presentation (first three points in the agenda) will be given in English.
We can answer questions asked in English, French, Polish, and Spanish. If you would like to ask questions in advance, add them [[m:Talk:Community Wishlist Survey|on the Community Wishlist Survey talk page]] or send to sgrabarczuk@wikimedia.org.
[[m:Special:MyLanguage/User:NRodriguez (WMF)|Natalia Rodriguez]] (the [[m:Special:MyLanguage/Community Tech|Community Tech]] manager) will be hosting this meeting.
'''Invitation link'''
* [https://wikimedia.zoom.us/j/89828615390 Join online]
* Meeting ID: 898 2861 5390
* One tap mobile
** +16465588656,,89828615390# US (New York)
** +16699006833,,89828615390# US (San Jose)
* [https://wikimedia.zoom.us/u/kctR45AI8o Dial by your location]
See you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|<span class="signature-talk">{{int:Talkpagelinktext}}</span>]]) 03:04, 11 dhen t-Sultain 2021 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=21980442 -->
== Let's talk about the Desktop Improvements ==
[[File:Annotated Wikipedia Vector interface (logged-out).png|thumb]]
Hello!
Have you noticed that some wikis have a [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements|different desktop interface]]? Are you curious about the next steps? Maybe you have questions or ideas regarding the design or technical matters?
Join an online meeting with the team working on the Desktop Improvements! It will take place on [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20211012T1600 October 12th, 16:00 UTC] on Zoom. It will last an hour. '''[https://wikimedia.zoom.us/j/82936701376 Click here to join]'''.
'''Agenda'''
* Update on the recent developments
* [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Features/Sticky Header|Sticky header]] - presentation of the demo version
* Questions and answers, discussion
'''Format'''
The meeting will not be recorded or streamed. Notes will be taken in a [https://docs.google.com/document/d/1G4tfss-JBVxyZMxGlOj5MCBhOO-0sLekquFoa2XiQb8/edit# Google Docs file]. The presentation part (first two points in the agenda) will be given in English.
We can answer questions asked in English, French, Polish, and Spanish. If you would like to ask questions in advance, add them on the [[mw:Talk:Reading/Web/Desktop Improvements|talk page]] or send them to sgrabarczuk@wikimedia.org.
[[user:OVasileva (WMF)|Olga Vasileva]] (the team manager) will be hosting this meeting.
'''Invitation link'''
* [https://wikimedia.zoom.us/j/89828615390 Join online]
* Meeting ID: 829 3670 1376
* [https://wikimedia.zoom.us/u/kB5WUc7yZ Dial by your location]
We hope to see you! [[user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] 15:10, 4 dhen Dàmhair 2021 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=20689952 -->
== Voting for the election for the members for the Movement Charter drafting committee is now open ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content"/>
:''<div class="plainlinks">[[m:Special:MyLanguage/Movement Charter/Drafting Committee/MCDC Voter Email short 12-10-2021|{{int:otherlanguages}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/MCDC Voter Email short 12-10-2021}}&language=&action=page&filter= {{int:please-translate}}]''
Voting for the election for the members for the Movement Charter drafting committee is now open. In total, 70 Wikimedians from around the world are running for 7 seats in these elections.
'''Voting is open from October 12 to October 24, 2021.'''
The committee will consist of 15 members in total: The online communities vote for 7 members, 6 members will be selected by the Wikimedia affiliates through a parallel process, and 2 members will be appointed by the Wikimedia Foundation. The plan is to assemble the committee by November 1, 2021.
Learn about each candidate to inform your vote in the language that you prefer: <https://meta.wikimedia.org/wiki/Special:MyLanguage/Movement_Charter/Drafting_Committee/Candidates>
Learn about the Drafting Committee: <https://meta.wikimedia.org/wiki/Special:MyLanguage/Movement_Charter/Drafting_Committee>
We are piloting a voting advice application for this election. Click yourself through the tool and you will see which candidate is closest to you! Check at <https://mcdc-election-compass.toolforge.org/>
Read the full announcement: <https://meta.wikimedia.org/wiki/Special:MyLanguage/Movement_Charter/Drafting_Committee/Elections>
'''Go vote at SecurePoll on:''' <https://meta.wikimedia.org/wiki/Special:MyLanguage/Movement_Charter/Drafting_Committee/Elections>
Best,
Movement Strategy & Governance Team, Wikimedia Foundation
<section end="announcement-content"/>
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 01:53, 15 dhen Dàmhair 2021 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Xeno_(WMF)/Delivery/Wiktionary&oldid=22190909 -->
== Talk to the Community Tech ==
[[File:Magic Wand Icon 229981 Color Flipped.svg|100px|right]]
[[:m:Special:MyLanguage/Community Wishlist Survey/Updates/Talk to Us|Read this message in another language]]
Hello!
We, the team working on the [[m:Special:MyLanguage/Community Wishlist Survey|Community Wishlist Survey]], would like to invite you to an online meeting with us. It will begin on [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20211027T1430 '''{{#time:j xg|2021-10-27}} ({{#time:l|2021-10-27}}) at {{#time:H:i e|14:30|en|1}}'''] on Zoom, and will last an hour. [https://wikimedia.zoom.us/j/83847343544 '''Click here to join'''].
'''Agenda'''
* Become a Community Wishlist Survey Ambassador. Help us spread the word about the CWS in your community.
* Update on the [[m:Special:MyLanguage/Community Wishlist Survey 2021/Warn when linking to disambiguation pages|disambiguation]] and the [[m:Special:MyLanguage/Community Wishlist Survey 2021/Real Time Preview for Wikitext|real-time preview]] wishes
* Questions and answers
'''Format'''
The meeting will not be recorded or streamed. Notes without attribution will be taken and published on Meta-Wiki. The presentation (all points in the agenda except for the questions and answers) will be given in English.
We can answer questions asked in English, French, Polish, Spanish, German, and Italian. If you would like to ask questions in advance, add them [[m:Talk:Community Wishlist Survey|on the Community Wishlist Survey talk page]] or send to sgrabarczuk@wikimedia.org.
[[m:Special:MyLanguage/User:NRodriguez (WMF)|Natalia Rodriguez]] (the [[m:Special:MyLanguage/Community Tech|Community Tech]] manager) will be hosting this meeting.
'''Invitation link'''
* [https://wikimedia.zoom.us/j/83847343544 Join online]
* Meeting ID: <span dir=ltr>83847343544</span>
* [https://wikimedia.zoom.us/u/kwDbq4box Dial by your location]
We hope to see you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 23:00, 22 dhen Dàmhair 2021 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=20689952 -->
== Learn how Movement Strategy Implementation Grants can support your Movement Strategy plans ==
<section begin="announcement-content"/>Movement Strategy Implementation grants now provide more than $2,000 USD to put Movement Strategy plans into action. Find out more about [[:m:Special:MyLanguage/Grants:MSIG/About|Movement Strategy Implementation grants, the criteria, and how to apply]].<section end="annoumcent-content"/>
[[User:MNadzikiewicz (WMF)|MNadzikiewicz (WMF)]] ([[User talk:MNadzikiewicz (WMF)#top|talk]]) 13:30, 29 October 2021 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:MNadzikiewicz_(WMF)/Delivery&oldid=22247589 -->
== Meet the new Movement Charter Drafting Committee members ==
<section begin="announcement-content"/>
:''<div class="plainlinks">[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Elections/Results/Announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Elections/Results/Announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>''
The Movement Charter Drafting Committee election and selection processes are complete.
* The [[m:Special:MyLanguage/Movement Charter/Drafting Committee/Elections/Results|election results have been published]]. 1018 participants voted to elect seven members to the committee: '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Richard_Knipel_(Pharos)|Richard Knipel (Pharos)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Anne_Clin_(Risker)|Anne Clin (Risker)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Alice_Wiegand_(lyzzy)|Alice Wiegand (Lyzzy)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Micha%C5%82_Buczy%C5%84ski_(Aegis_Maelstrom)|Michał Buczyński (Aegis Maelstrom)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Richard_(Nosebagbear)|Richard (Nosebagbear)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Ravan_J_Al-Taie_(Ravan)|Ravan J Al-Taie (Ravan)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Ciell_(Ciell)|Ciell (Ciell)]]'''.
* The [[m:Special:MyLanguage/Movement_Charter/Drafting_Committee/Candidates#Affiliate-chosen_members|affiliate process]] has selected six members: '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Anass_Sedrati_(Anass_Sedrati)|Anass Sedrati (Anass Sedrati)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#%C3%89rica_Azzellini_(EricaAzzellini)|Érica Azzellini (EricaAzzellini)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Jamie_Li-Yun_Lin_(Li-Yun_Lin)|Jamie Li-Yun Lin (Li-Yun Lin)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Georges_Fodouop_(Geugeor)|Georges Fodouop (Geugeor)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Manavpreet_Kaur_(Manavpreet_Kaur)|Manavpreet Kaur (Manavpreet Kaur)]]''', '''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Candidates#Pepe_Flores_(Padaguan)|Pepe Flores (Padaguan)]]'''.
* The Wikimedia Foundation has [[m:Special:MyLanguage/Movement_Charter/Drafting_Committee/Candidates#Wikimedia_Foundation-chosen_members|appointed]] two members: '''[[m:Special:MyLanguage/Movement_Charter/Drafting_Committee/Candidates#Runa_Bhattacharjee_(Runab_WMF)|Runa Bhattacharjee (Runab WMF)]]''', '''[[m:Special:MyLanguage/Movement_Charter/Drafting_Committee/Candidates#Jorge_Vargas_(JVargas_(WMF))|Jorge Vargas (JVargas (WMF))]]'''.
The committee will convene soon to start its work. The committee can appoint up to three more members to bridge diversity and expertise gaps.
If you are interested in engaging with [[m:Special:MyLanguage/Movement Charter|Movement Charter]] drafting process, follow the updates [[m:Special:MyLanguage/Movement Charter/Drafting Committee|on Meta]] and join the [https://t.me/joinchat/U-4hhWtndBjhzmSf Telegram group].
With thanks from the Movement Strategy and Governance team<section end="announcement-content"/>
15:53, 5 dhen t-Samhain 2021 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:MNadzikiewicz_(WMF)/Delivery&oldid=22300322 -->
== Talk to the Community Tech: The future of the Community Wishlist Survey ==
[[File:Magic Wand Icon 229981 Color Flipped.svg|100px|right]]
Hello!
We, the team working on the [[m:Special:MyLanguage/Community Wishlist Survey|Community Wishlist Survey]], would like to invite you to an online meeting with us. It will take place on [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20211130T1700 '''{{#time:j xg|2021-11-30}} ({{#time:l|2021-11-30}}), {{#time:H:i e|17:00|en|1}}'''] on Zoom, and will last an hour. [https://wikimedia.zoom.us/j/82035401393 '''Click here to join'''].
'''Agenda'''
* Changes to the Community Wishlist Survey 2022. Help us decide.
* Become a Community Wishlist Survey Ambassador. Help us spread the word about the CWS in your community.
* Questions and answers
'''Format'''
The meeting will not be recorded or streamed. Notes without attribution will be taken and published on Meta-Wiki. The presentation (all points in the agenda except for the questions and answers) will be given in English.
We can answer questions asked in English, French, Polish, Spanish, German, and Italian. If you would like to ask questions in advance, add them [[m:Talk:Community Wishlist Survey|on the Community Wishlist Survey talk page]] or send to sgrabarczuk@wikimedia.org.
[[m:Special:MyLanguage/User:NRodriguez (WMF)|Natalia Rodriguez]] (the [[m:Special:MyLanguage/Community Tech|Community Tech]] manager) will be hosting this meeting.
'''Invitation link'''
* [https://wikimedia.zoom.us/j/82035401393 Join online]
* Meeting ID: <span dir=ltr>82035401393</span>
* [https://wikimedia.zoom.us/u/keu6UeRT0T Dial by your location]
We hope to see you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 20:03, 26 dhen t-Samhain 2021 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=20689952 -->
== Upcoming Call for Feedback about the Board of Trustees elections ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content />
:''You can find this message translated into additional languages on Meta-wiki.''
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation Board of Trustees/Call for feedback:2022 Board of Trustees election/Upcoming Call for Feedback about the Board of Trustees elections|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation Board of Trustees/Call for feedback:2022 Board of Trustees election/Upcoming Call for Feedback about the Board of Trustees elections}}&language=&action=page&filter= {{int:please-translate}}]</div>''
The Board of Trustees is preparing a call for feedback about the upcoming Board Elections, from January 7 - February 10, 2022.
While details will be finalized the week before the call, we have confirmed at least two questions that will be asked during this call for feedback:
* What is the best way to ensure fair representation of emerging communities among the Board?
* What involvement should candidates have during the election?
While additional questions may be added, the Movement Strategy and Governance team wants to provide time for community members and affiliates to consider and prepare ideas on the confirmed questions before the call opens. We apologize for not having a complete list of questions at this time. The list of questions should only grow by one or two questions. The intention is to not overwhelm the community with requests, but provide notice and welcome feedback on these important questions.
'''Do you want to help organize local conversation during this Call?'''
Contact the [[m:Special:MyLanguage/Movement Strategy and Governance|Movement Strategy and Governance team]] on Meta, on [https://t.me/wmboardgovernancechat Telegram], or via email at msg[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org.
Reach out if you have any questions or concerns. The Movement Strategy and Governance team will be minimally staffed until January 3. Please excuse any delayed response during this time. We also recognize some community members and affiliates are offline during the December holidays. We apologize if our message has reached you while you are on holiday.
Best,
Movement Strategy and Governance<section end="announcement-content" />
</div>
{{int:thank-you}} [[User:Xeno (WMF)|Xeno (WMF)]] 17:50, 27 dhen Dùbhlachd 2021 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery/Wiktionary&oldid=22502711 -->
== Wiki Loves Folklore is back! ==
<div lang="en" dir="ltr" class="mw-content-ltr">
{{int:please-translate}}
[[File:Wiki Loves Folklore Logo.svg|right|150px|frameless]]
You are humbly invited to participate in the '''[[:c:Commons:Wiki Loves Folklore 2022|Wiki Loves Folklore 2022]]''' an international photography contest organized on Wikimedia Commons to document folklore and intangible cultural heritage from different regions, including, folk creative activities and many more. It is held every year from the '''1st till the 28th''' of February.
You can help in enriching the folklore documentation on Commons from your region by taking photos, audios, videos, and [https://commons.wikimedia.org/w/index.php?title=Special:UploadWizard&campaign=wlf_2022 submitting] them in this commons contest.
You can also [[:c:Commons:Wiki Loves Folklore 2022/Organize|organize a local contest]] in your country and support us in translating the [[:c:Commons:Wiki Loves Folklore 2022/Translations|project pages]] to help us spread the word in your native language.
Feel free to contact us on our [[:c:Commons talk:Wiki Loves Folklore 2022|project Talk page]] if you need any assistance.
'''Kind regards,'''
'''Wiki loves Folklore International Team'''
--[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 13:15, 9 dhen Fhaoilleach 2022 (UTC)
</div>
<!-- Message sent by User:Tiven2240@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Tiven2240/wlf&oldid=22560402 -->
== Community Wishlist Survey 2022 ==
[[File:Community Wishlist Survey Lamp.svg|right|200px]]
The '''[[m:Special:MyLanguage/Community Wishlist Survey 2022|Community Wishlist Survey 2022]]''' is now open!'''
This survey is the process where communities decide what the [[m:Special:MyLanguage/Community Tech|Community Tech]] team should work on over the next year. We encourage everyone to submit proposals until the deadline on '''23 January''', or comment on other proposals to help make them better.
''
The communities will vote on the proposals between 28 January and 11 February.
The Community Tech team is focused on tools for experienced Wikimedia editors. You can write proposals in any language, and we will translate them for you. Thank you, and we look forward to seeing your proposals! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 18:10, 10 dhen Fhaoilleach 2022 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=22399355 -->
== Call for Feedback about the Board of Trustees elections is now open ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />:''[[m:Special:MyLanguage/Wikimedia Foundation Board of Trustees/Call for feedback: Board of Trustees elections/Call for Feedback about the Board of Trustees elections is now open/Short|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation Board of Trustees/Call for feedback: Board of Trustees elections/Call for Feedback about the Board of Trustees elections is now open/Short|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation Board of Trustees/Call for feedback: Board of Trustees elections/Call for Feedback about the Board of Trustees elections is now open/Short}}&language=&action=page&filter= {{int:please-translate}}]</div>''
The Call for Feedback: Board of Trustees elections is now open and will close on 7 February 2022.
With this Call for Feedback, the Movement Strategy and Governance team is taking a different approach. This approach incorporates community feedback from 2021. Instead of leading with proposals, the Call is framed around key questions from the Board of Trustees. The key questions came from the feedback about the 2021 Board of Trustees election. The intention is to inspire collective conversation and collaborative proposal development about these key questions.
[[m:Special:MyLanguage/Wikimedia Foundation Board of Trustees/Call for feedback: Board of Trustees elections|Join the conversation.]]
Best,
Movement Strategy and Governance<section end="announcement-content" />
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 00:35, 15 dhen Fhaoilleach 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery/Wiktionary&oldid=22610082 -->
== Talk to the Community Tech ==
[[File:Community Wishlist Survey Lamp.svg|150px|right]]
{{int:Hello}}
We, the team working on the [[m:Special:MyLanguage/Community Wishlist Survey|Community Wishlist Survey]], would like to invite you to an online meeting with us. It will take place on [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20220119T1800 '''{{#time:j xg|2022-01-19}} ({{#time:l|2022-01-19}}), {{#time:H:i e|18:00|en|1}}'''] on Zoom, and will last an hour. This external system is not subject to the [[foundation:Privacy_policy|WMF Privacy Policy]]. [https://wikimedia.zoom.us/j/85804347114 '''Click here to join'''].
'''Agenda'''
* Bring drafts of your proposals and talk to to a member of the Community Tech Team about your questions on how to improve the proposal
'''Format'''
The meeting will not be recorded or streamed. Notes without attribution will be taken and published on Meta-Wiki. The presentation (all points in the agenda except for the questions and answers) will be given in English.
We can answer questions asked in English, French, Polish, Spanish, and German. If you would like to ask questions in advance, add them [[m:Talk:Community Wishlist Survey|on the Community Wishlist Survey talk page]] or send to sgrabarczuk@wikimedia.org.
[[m:Special:MyLanguage/User:NRodriguez (WMF)|Natalia Rodriguez]] (the [[m:Special:MyLanguage/Community Tech|Community Tech]] manager) will be hosting this meeting.
'''Invitation link'''
* [https://wikimedia.zoom.us/j/85804347114 Join online]
* Meeting ID: <span dir=ltr>85804347114</span>
* [https://wikimedia.zoom.us/u/keu6UeRT0T Dial by your location]
We hope to see you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 00:21, 18 dhen Fhaoilleach 2022 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=22399355 -->
== Subscribe to the This Month in Education newsletter - learn from others and share your stories ==
<div lang="en" dir="ltr" class="mw-content-ltr">
Dear community members,
Greetings from the EWOC Newsletter team and the education team at Wikimedia Foundation. We are very excited to share that we on tenth years of Education Newsletter ([[m:Education/News|This Month in Education]]) invite you to join us by [[m:Global message delivery/Targets/This Month in Education|subscribing to the newsletter on your talk page]] or by [[m:Education/News/Newsroom|sharing your activities in the upcoming newsletters]]. The Wikimedia Education newsletter is a monthly newsletter that collects articles written by community members using Wikimedia projects in education around the world, and it is published by the EWOC Newsletter team in collaboration with the Education team. These stories can bring you new ideas to try, valuable insights about the success and challenges of our community members in running education programs in their context.
If your affiliate/language project is developing its own education initiatives, please remember to take advantage of this newsletter to publish your stories with the wider movement that shares your passion for education. You can submit newsletter articles in your own language or submit bilingual articles for the education newsletter. For the month of January the deadline to submit articles is on the 20th January. We look forward to reading your stories.
Older versions of this newsletter can be found in the [[outreach:Education/Newsletter/Archives|complete archive]].
More information about the newsletter can be found at [[m:Education/News/Publication Guidelines|Education/Newsletter/About]].
For more information, please contact spatnaik{{@}}wikimedia.org.
------
<div style="text-align: center;"><div style="margin-top:10px; font-size:90%; padding-left:5px; font-family:Georgia, Palatino, Palatino Linotype, Times, Times New Roman, serif;">[[m:Education/Newsletter/About|About ''This Month in Education'']] · [[m:Global message delivery/Targets/This Month in Education|Subscribe/Unsubscribe]] · [[m:MassMessage|Global message delivery]] · For the team: [[User:ZI Jony|<span style="color:#8B0000">'''ZI Jony'''</span>]] [[User talk:ZI Jony|<sup><span style="color:Green"><i>(Talk)</i></span></sup>]], {{<includeonly>subst:</includeonly>#time:l G:i, d F Y|}} (UTC)</div></div>
</div>
<!-- Message sent by User:ZI Jony@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:ZI_Jony/MassMessage/Awareness_of_Education_Newsletter/List_of_Village_Pumps&oldid=21244129 -->
== Desktop Improvements update and Office Hours invitation ==
Hello. I wanted to give you an update about the [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements|Desktop Improvements]] project, which the Wikimedia Foundation Web team has been working on for the past few years.
The goals of the project are to make the interface more welcoming and comfortable for readers and useful for advanced users. The project consists of a series of feature improvements which make it easier to read and learn, navigate within the page, search, switch between languages, use article tabs and the user menu, and more.
The improvements are already visible by default for readers and editors on 24 wikis, including Wikipedias in [[:fr:|French]], [[:pt:|Portuguese]], and [[:fa:|Persian]].
The changes apply to the [{{fullurl:{{FULLPAGENAMEE}}|useskin=vector}} Vector] skin only. [{{fullurl:{{FULLPAGENAMEE}}|useskin=monobook}} Monobook] or [{{fullurl:{{FULLPAGENAMEE}}|useskin=timeless}} Timeless] users are not affected.
=== Features deployed since our last update ===
* [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Features/User_menu|User menu]] - focused on making the navigation more intuitive by visually highlighting the structure of user links and their purpose.
* [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Features/Sticky Header|Sticky header]] - focused on allowing access to important functionality (logging in/out, history, talk pages, etc.) without requiring people to scroll to the top of the page.
For a full list of the features the project includes, please visit our [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements|project page]]. We also invite you to our [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Updates|Updates page]].
[[File:Table_of_contents_shown_on_English_Wikipedia_02.webm|thumb|600px|center|The features deployed already and the table of contents that's currently under development]]
<br clear=all>
=== How to enable the improvements ===
[[File:Desktop Improvements - how to enable globally.png|thumb|[[Special:GlobalPreferences#mw-prefsection-rendering|{{int:globalpreferences}}]]]]
* It is possible to opt-in individually [[Special:Preferences#mw-prefsection-rendering|in the appearance tab within the preferences]] by unchecking the "{{int:prefs-vector-enable-vector-1-label}}" box. (It has to be empty.) Also, it is possible to opt-in on all wikis using the [[Special:GlobalPreferences#mw-prefsection-rendering|global preferences]].
* If you think this would be good as a default for all readers and editors of this wiki, feel free to start a conversation with the community and contact me.
* On wikis where the changes are visible by default for all, logged-in users can always opt-out to the Legacy Vector. There is an easily accessible link in the sidebar of the new Vector.
=== Learn more and join our events ===
If you would like to follow the progress of our project, you can [[mw:Special:Newsletter/28/subscribe|subscribe to our newsletter]].
You can read the [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements|pages of the project]], check [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Frequently_asked_questions|our FAQ]], write on the [[mw:Talk:Reading/Web/Desktop_Improvements|project talk page]], and join an online meeting with us ([https://www.timeanddate.com/worldclock/fixedtime.html?iso=20220127T1500 '''{{#time:j xg|2022-01-27}} ({{#time:l|2022-01-27}}), {{#time:H:i e|15:00|en|1}}''']).
How to join our online meeting
* [https://wikimedia.zoom.us/j/89205402895 Join online]
* Meeting ID: <span dir=ltr>89205402895</span>
* [https://wikimedia.zoom.us/u/kdPQ6k2Bcm Dial by your location]
{{int:Feedback-thanks-title}}!
On behalf of the Wikimedia Foundation Web team, [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 22:11, 24 dhen Fhaoilleach 2022 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=22626210 -->
== Movement Strategy and Governance News – Issue 5 ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="ucoc-newsletter"/>
:''<div class="plainlinks">[[m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/5/Global message|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Strategy and Governance/Newsletter/5/Global message}}&language=&action=page&filter= {{int:please-translate}}]</div>''
<span style="font-size:200%;">'''Movement Strategy and Governance News'''</span><br>
<span style="font-size:120%; color:#404040;">'''Issue 5, January 2022'''</span><span style="font-size:120%; float:right;">[[m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/5|'''Read the full newsletter''']]</span>
----
Welcome to the fifth issue of Movement Strategy and Governance News (formerly known as Universal Code of Conduct News)! This revamped newsletter distributes relevant news and events about the Movement Charter, Universal Code of Conduct, Movement Strategy Implementation grants, Board elections and other relevant MSG topics.
This Newsletter will be distributed quarterly, while more frequent Updates will also be delivered weekly or bi-weekly to subscribers. Please remember to subscribe [[:m:Special:MyLanguage/Global message delivery/Targets/MSG Newsletter Subscription|here]] if you would like to receive these updates.
<div style="margin-top:3px; padding:10px 10px 10px 20px; background:#fffff; border:2px solid #808080; border-radius:4px; font-size:100%;">
*'''Call for Feedback about the Board elections''' - We invite you to give your feedback on the upcoming WMF Board of Trustees election. This call for feedback went live on 10th January 2022 and will be concluded on 16th February 2022. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/5#Call for Feedback about the Board elections|continue reading]])
*'''Universal Code of Conduct Ratification''' - In 2021, the WMF asked communities about how to enforce the Universal Code of Conduct policy text. The revised draft of the enforcement guidelines should be ready for community vote in March. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/5#Universal Code of Conduct Ratification|continue reading]])
*'''Movement Strategy Implementation Grants''' - As we continue to review several interesting proposals, we encourage and welcome more proposals and ideas that target a specific initiative from the Movement Strategy recommendations. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/5#Movement Strategy Implementation Grants|continue reading]])
*'''The New Direction for the Newsletter''' - As the UCoC Newsletter transitions into MSG Newsletter, join the facilitation team in envisioning and deciding on the new directions for this newsletter. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/5#The New Direction for the Newsletter|continue reading]])
*'''Diff Blogs''' - Check out the most recent publications about MSG on Wikimedia Diff. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/5#Diff Blogs|continue reading]])</div><section end="ucoc-newsletter"/>
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 03:15, 29 dhen Fhaoilleach 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery/Wiktionary&oldid=22704041 -->
=== Updates on the Universal Code of Conduct Enforcement Guidelines Review ===
Hello, I have an update on the vote on the enforcement guidelines that was mentioned above. [[Cleachdaiche:Xeno (WMF)|Xeno (WMF)]] ([[Deasbaireachd a' chleachdaiche:Xeno (WMF)|an deasbaireachd]]) 03:12, 4 dhen Ghearran 2022 (UTC)
----
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/2022-02-02 Announcement/Short|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/2022-02-02 Announcement/Short|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Enforcement guidelines/2022-02-02 Announcement/Short}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hello everyone,
The '''[[m:Universal Code of Conduct/Enforcement guidelines|Universal Code of Conduct (UCoC) Enforcement Guidelines]]''' were published 24 January 2022 as a proposed way to apply the [[m:Universal Code of Conduct|Universal Code of Conduct]] across the movement. Comments about the guidelines can be shared here or [[m:Talk:Universal Code of Conduct/Enforcement guidelines|the Meta-wiki talk page]].
There will be conversations on Zoom on 4 February 2022 at 15:00 UTC, 25 February 2022 at 12:00 UTC, and 4 March 2022 at 15:00 UTC. '''[[m:Special:MyLanguage/Universal Code of Conduct/Conversations|Join the UCoC project team and drafting committee members to discuss the guidelines and voting process]].'''
The [[m:Universal Code of Conduct/Project#Timeline|timeline is available on Meta-wiki]]. The voting period is March 7 to 21. '''[[m:Universal Code of Conduct/Enforcement guidelines/Voting|See the voting information page for more details]].'''
Thank you to everyone who has participated so far.
Sincerely,
Movement Strategy and Governance<br/>
Wikimedia Foundation<section end="announcement-content" />
== <span lang="en" dir="ltr" class="mw-content-ltr">Leadership Development Task Force: Your feedback is appreciated</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />:''[[m:Special:MyLanguage/Leadership Development Task Force/Call for Feedback Announcement|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Leadership Development Task Force/Call for Feedback Announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Leadership Development Task Force/Call for Feedback Announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>''
The Community Development team at the Wikimedia Foundation is supporting the creation of a global, community-driven Leadership Development Task Force. The purpose of the task force is to advise leadership development work.
The team is looking for feedback about the responsibilities of the Leadership Development Task Force. This Meta page shares the proposal for a [[m:Special:MyLanguage/Leadership Development Task Force|Leadership Development Task Force]] and how [[m:Special:MyLanguage/Leadership Development Task Force/Participate|you can help.]] Feedback on the proposal will be collected from 7 to 25 February 2022.<section end="announcement-content" />
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 02:33, 9 dhen Ghearran 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery/Wiktionary&oldid=22796815 -->
== Wiki Loves Folklore is extended till 15th March ==
<div lang="en" dir="ltr" class="mw-content-ltr">{{int:please-translate}}
[[File:Wiki Loves Folklore Logo.svg|right|frameless|180px]]
Greetings from Wiki Loves Folklore International Team,
We are pleased to inform you that [[:c:Commons:Wiki Loves Folklore|Wiki Loves Folklore]] an international photographic contest on Wikimedia Commons has been extended till the '''15th of March 2022'''. The scope of the contest is focused on folk culture of different regions on categories, such as, but not limited to, folk festivals, folk dances, folk music, folk activities, etc.
We would like to have your immense participation in the photographic contest to document your local Folk culture on Wikipedia. You can also help with the [[:c:Commons:Wiki Loves Folklore 2022/Translations|translation]] of project pages and share a word in your local language.
Best wishes,
'''International Team'''<br />
'''Wiki Loves Folklore'''
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 04:50, 22 dhen Ghearran 2022 (UTC)
</div>
<!-- Message sent by User:Rockpeterson@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=22754428 -->
== Coming soon ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
=== Several improvements around templates ===
Hello, from March 9, several improvements around templates will become available on your wiki:
* Fundamental improvements of the [[Mw:Special:MyLanguage/Help:VisualEditor/User guide#Editing templates|VisualEditor template dialog]] ([[m:WMDE Technical Wishes/VisualEditor template dialog improvements|1]], [[m:WMDE Technical Wishes/Removing a template from a page using the VisualEditor|2]]),
* Improvements to make it easier to put a template on a page ([[m:WMDE Technical Wishes/Finding and inserting templates|3]]) (for the template dialogs in [[Mw:Special:MyLanguage/Help:VisualEditor/User guide#Editing templates|VisualEditor]], [[Mw:Special:MyLanguage/Extension:WikiEditor#/media/File:VectorEditorBasic-en.png|2010 Wikitext]] and [[Mw:Special:MyLanguage/2017 wikitext editor|New Wikitext Mode]]),
* and improvements in the syntax highlighting extension [[Mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] ([[m:WMDE Technical Wishes/Improved Color Scheme of Syntax Highlighting|4]], [[m:WMDE Technical Wishes/Bracket Matching|5]]) (which is available on wikis with writing direction left-to-right).
All these changes are part of the “[[m:WMDE Technical Wishes/Templates|Templates]]” project by [[m:WMDE Technical Wishes|WMDE Technical Wishes]]. We hope they will help you in your work, and we would love to hear your feedback on the talk pages of these projects. </div> - [[m:User:Johanna Strodt (WMDE)|Johanna Strodt (WMDE)]] 12:38, 28 dhen Ghearran 2022 (UTC)
<!-- Message sent by User:Johanna Strodt (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=22907463 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Remember to Participate in the UCoC Conversations and Ratification Vote!</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Universal Code of Conduct/Enforcement guidelines/Voting/Announcement|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Voting/Announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Enforcement guidelines/Voting/Announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hello everyone,
A [[m:Special:MyLanguage/Universal_Code_of_Conduct/Enforcement_guidelines/Voting|'''vote in SecurePoll from 7 to 21 March 2022''']] is scheduled as part of the ratification process for the Universal Code of Conduct (UCoC) Enforcement guidelines. Eligible voters are invited to answer a poll question and share comments. [[m:Special:MyLanguage/Universal_Code_of_Conduct/Enforcement_guidelines/Voter_information|Read voter information and eligibility details.]] During the poll, voters will be asked if they support the enforcement of the Universal Code of Conduct based on the proposed guidelines.
The [[m:Special:MyLanguage/Universal Code of Conduct|Universal Code of Conduct]] (UCoC) provides a baseline of acceptable behavior for the entire movement. The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Enforcement_guidelines|revised enforcement guidelines]] were published 24 January 2022 as a proposed way to apply the policy across the movement. A [[m:Special:MyLanguage/Wikimedia_Foundation_Board_noticeboard/January_2022_-_Board_of_Trustees_on_Community_ratification_of_enforcement_guidelines_of_UCoC|Wikimedia Foundation Board statement]] calls for a [[m:Special:MyLanguage/Universal_Code_of_Conduct/Enforcement_guidelines/Voting|ratification process]] where eligible voters will have an opportunity to support or oppose the adoption of the UCoC Enforcement guidelines in a vote. Wikimedians are invited to [[m:Special:MyLanguage/Universal_Code_of_Conduct/Enforcement_guidelines/Voter_information/Volunteer|translate and share important information]]. For more information about the UCoC, please see the [[m:Special:MyLanguage/Universal Code of Conduct/Project|project page]] and [[m:Special:MyLanguage/Universal Code of Conduct/FAQ|frequently asked questions]] on Meta-wiki.
There are events scheduled to learn more and discuss:
* A [[m:Special:MyLanguage/Universal_Code_of_Conduct/Conversations/Panel_Q&A|community panel]] recorded on 18 February 2022 shares perspectives from small- and medium-sized community participants.
* The [[m:Movement Strategy and Governance|Movement Strategy and Governance]] (MSG) team is hosting Conversation Hours on 4 March 2022 at 15:00 UTC. Please [[m:Special:MyLanguage/Universal_Code_of_Conduct/Conversations|'''sign-up''']] to interact with the project team and the drafting committee about the updated enforcement guidelines and the ratification process. See the [[m:Special:MyLanguage/Universal_Code_of_Conduct/2022_conversation_hour_summaries|Conversation Hour summaries]] for notes from 4 February 2022 and 25 February 2022.
You can comment on Meta-wiki talk pages in any language. You may also contact either team by email: msg[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org or ucocproject[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org
Sincerely,
Movement Strategy and Governance <br />
Wikimedia Foundation <br /><section end="announcement-content" />
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 02:17, 2 dhen Mhàrt 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=22916674 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Universal Code of Conduct Enforcement guidelines ratification voting open from 7 to 21 March 2022</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Vote|You can find this message translated into additional languages on Meta-wiki.]]
:''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Vote|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Enforcement guidelines/Vote}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hello everyone,
The ratification voting process for the [[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines|revised enforcement guidelines]] of the [[m:Special:MyLanguage/Universal Code of Conduct|Universal Code of Conduct]] (UCoC) is now open! '''[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Voting|Voting commenced on SecurePoll]]''' on 7 March 2022 and will conclude on 21 March 2022. Please [[m:Universal Code of Conduct/Enforcement guidelines/Voter information|read more on the voter information and eligibility details]].
The Universal Code of Conduct (UCoC) provides a baseline of acceptable behavior for the entire movement. The revised enforcement guidelines were published 24 January 2022 as a proposed way to apply the policy across the movement. You can [[m:Special:MyLanguage/Universal Code of Conduct/Project|read more about the UCoC project]].
You can also comment on Meta-wiki talk pages in any language. You may also contact the team by email: ucocproject[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org
Sincerely,
Movement Strategy and Governance
Wikimedia Foundation<section end="announcement-content" />
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 00:52, 8 dhen Mhàrt 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=22962850 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Invitation to Hubs event: Global Conversation on 2022-03-12 at 13:00 UTC</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />Hello!
The Movement Strategy and Governance team of the Wikimedia Foundation would like to invite you to the next event about "Regional and Thematic Hubs". The Wikimedia Movement is in the process of understanding what Regional and Thematic Hubs should be. Our workshop in November was a good start ([[m:Special:MyLanguage/Hubs/Documentation/27 November Workshop|read the report]]), but we're not finished yet.
Over the last weeks we conducted about 16 interviews with groups working on establishing a Hub in their context ([[m:Special:MyLanguage/Hubs/Dialogue|see Hubs Dialogue]]). These interviews informed a report that will serve as a foundation for discussion on March 12. The report is planned to be published on March 9.
The event will take place on March 12, 13:00 to 16:00 UTC on Zoom. Interpretation will be provided in French, Spanish, Arabic, Russian, and Portuguese. Registration is open, and will close on March 10. Anyone interested in the topic is invited to join us. '''[[m:Special:MyLanguage/Hubs/Global Conversations March 12, 2022|More information on the event on Meta-wiki]]'''.
Best regards,
[[m:User:KVaidla (WMF)|Kaarel Vaidla]]<br />Movement Strategy
<section end="announcement-content" />
</div>
01:31, 10 dhen Mhàrt 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=22974079 -->
== Wiki Loves Folklore 2022 ends tomorrow ==
[[File:Wiki Loves Folklore Logo.svg|right|frameless|180px]]
International photographic contest [[:c:Commons:Wiki Loves Folklore 2022| Wiki Loves Folklore 2022]] ends on 15th March 2022 23:59:59 UTC. This is the last chance of the year to upload images about local folk culture, festival, cuisine, costume, folklore etc on Wikimedia Commons. Watch out our social media handles for regular updates and declaration of Winners.
([https://www.facebook.com/WikiLovesFolklore/ Facebook] , [https://twitter.com/WikiFolklore Twitter ] , [https://www.instagram.com/wikilovesfolklore/ Instagram])
The writing competition Feminism and Folklore will run till 31st of March 2022 23:59:59 UTC. Write about your local folk tradition, women, folk festivals, folk dances, folk music, folk activities, folk games, folk cuisine, folk wear, folklore, and tradition, including ballads, folktales, fairy tales, legends, traditional song and dance, folk plays, games, seasonal events, calendar customs, folk arts, folk religion, mythology etc. on your local Wikipedia. Check if your [[:m:Feminism and Folklore 2022/Project Page|local Wikipedia is participating]]
A special competition called '''Wiki Loves Falles''' is organised in Spain and the world during 15th March 2022 till 15th April 2022 to document local folk culture and [[:en:Falles|Falles]] in Valencia, Spain. Learn more about it on [[:ca:Viquiprojecte:Falles 2022|Catalan Wikipedia project page]].
We look forward for your immense co-operation.
Thanks
Wiki Loves Folklore international Team
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 14:41, 14 dhen Mhàrt 2022 (UTC)
<!-- Message sent by User:Rockpeterson@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=22754428 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Leadership Development Working Group: Apply to join! (14 March to 10 April 2022)</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Leadership Development Working Group/Participate/Announcement|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Leadership Development Working Group/Participate/Announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Leadership Development Working Group/Participate/Announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hello everyone,
Thank you to everyone who participated in the feedback period for the [[m:Special:MyLanguage/Leadership Development Working Group|Leadership Development Working Group]] initiative. A [[m:Special:MyLanguage/Leadership Development Working Group/Participate#5. Summary of Call for Feedback|summary of the feedback]] can be found on Meta-wiki. This feedback will be shared with the working group to inform their work. The application period to join the Working Group is now open and will close on April 10, 2022. Please [[m:Special:MyLanguage/Leadership_Development_Working_Group/Purpose_and_Structure#3._How_is_the_working_group_formed_and_structured?|review the information about the working group]], share with community members who might be interested, and '''[[m:Special:MyLanguage/Leadership_Development_Working_Group/Participate#1._How_to_participate|apply if you are interested]]'''.
Thank you,
From the Community Development team<br /><section end="announcement-content" />
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 02:20, 18 dhen Mhàrt 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=22974079 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Universal Code of Conduct Enforcement guidelines ratification voting is now closed</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Vote/Closing message|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Vote/Closing message|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Enforcement guidelines/Vote/Closing message}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Greetings,
The ratification voting process for the [[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines|revised enforcement guidelines]] of the [[m:Special:MyLanguage/Universal Code of Conduct|Universal Code of Conduct]] (UCoC) came to a close on 21 March 2022. Over {{#expr:2300}} Wikimedians voted across different regions of our movement. Thank you to everyone who participated in this process! The scrutinizing group is now reviewing the vote for accuracy, so please allow up to two weeks for them to finish their work.
The final results from the voting process will be announced [[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Voting/Results|here]], along with the relevant statistics and a summary of comments as soon as they are available. Please check out [[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Voter information|the voter information page]] to learn about the next steps. You can comment on the project talk page [[m:Talk:Universal Code of Conduct/Enforcement guidelines|on Meta-wiki]] in any language. You may also contact the UCoC project team by email: ucocproject[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org
Best regards,
Movement Strategy and Governance<br /><section end="announcement-content" />
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 01:54, 30 dhen Mhàrt 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23079949 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Movement Strategy and Governance News – Issue 6</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="msg-newsletter"/>
<div style = "line-height: 1.2">
<span style="font-size:200%;">'''Movement Strategy and Governance News'''</span><br>
<span style="font-size:120%; color:#404040;">'''Issue 6, April 2022'''</span><span style="font-size:120%; float:right;">[[m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/6|'''Read the full newsletter''']]</span>
----
Welcome to the sixth issue of Movement Strategy and Governance News! This revamped newsletter distributes relevant news and events about the Movement Charter, Universal Code of Conduct, Movement Strategy Implementation grants, Board of trustees elections and other relevant MSG topics.
This Newsletter will be distributed quarterly, while the more frequent Updates will also be delivered weekly. Please remember to subscribe [[m:Special:MyLanguage/Global message delivery/Targets/MSG Newsletter Subscription|here]] if you would like to receive future issues of this newsletter.
</div><div style="margin-top:3px; padding:10px 10px 10px 20px; background:#fffff; border:2px solid #808080; border-radius:4px; font-size:100%;">
*'''Leadership Development -''' A Working Group is Forming! - The application to join the Leadership Development Working Group closed on April 10th, 2022, and up to 12 community members will be selected to participate in the working group. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/6#A1|continue reading]])
*'''Universal Code of Conduct Ratification Results are out! -''' The global decision process on the enforcement of the UCoC via SecurePoll was held from 7 to 21 March. Over 2,300 eligible voters from at least 128 different home projects submitted their opinions and comments. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/6#A2|continue reading]])
*'''Movement Discussions on Hubs -''' The Global Conversation event on Regional and Thematic Hubs was held on Saturday, March 12, and was attended by 84 diverse Wikimedians from across the movement. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/6#A3|continue reading]])
*'''Movement Strategy Grants Remain Open! -''' Since the start of the year, six proposals with a total value of about $80,000 USD have been approved. Do you have a movement strategy project idea? Reach out to us! ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/6#A4|continue reading]])
*'''The Movement Charter Drafting Committee is All Set! -''' The Committee of fifteen members which was elected in October 2021, has agreed on the essential values and methods for its work, and has started to create the outline of the Movement Charter draft. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/6#A5|continue reading]])
*'''Introducing Movement Strategy Weekly -''' Contribute and Subscribe! - The MSG team have just launched the updates portal, which is connected to the various Movement Strategy pages on Meta-wiki. Subscriber to get up-to-date news about the various ongoing projects. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/6#A6|continue reading]])
*'''Diff Blogs -''' Check out the most recent publications about Movement Strategy on Wikimedia Diff. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/6#A7|continue reading]])
</div><section end="msg-newsletter"/>
</div>
Also, a draft of the [[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2022-2023/draft|'''2022-23 Wikimedia Foundation Annual Plan''']] has been published. Input is being sought on-wiki and during [[:m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2022-2023/Conversations|'''several conversations''' with Wikimedia Foundation CEO Maryana Iskander]].
[[m:Special:MyLanguage/Wikimedia Foundation Annual Plan/2022-2023/Conversations/Announcement|See full announcement on Meta-wiki]]. [[User:Xeno (WMF)|Xeno (WMF)]] 01:46, 22 dhen Ghiblean 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23184989 -->
== Let's talk about the Desktop Improvements ==
[[File:New table of contents shown on English wikipedia.png|thumb]]
Hello!
Have you noticed that some wikis have a different desktop interface? Are you curious about the next steps? Maybe you have questions or ideas regarding the design or technical matters?
Join an online meeting with the team working on the [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements|Desktop Improvements]]! It will take place on '''29 April 2022 at [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20220429T1300 13:00 UTC] and [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20220429T1800 18:00 UTC]''' on Zoom. [https://wikimedia.zoom.us/j/88045453898 '''Click here to join''']. Meeting ID: 88045453898. [https://wikimedia.zoom.us/u/kcOMICmyyA Dial by your location].
'''Agenda'''
* Update on the recent developments
* Questions and answers, discussion
'''Format'''
The meeting will not be recorded or streamed. Notes will be taken in a [https://docs.google.com/document/d/1G4tfss-JBVxyZMxGlOj5MCBhOO-0sLekquFoa2XiQb8/edit# Google Docs file]. [[mw:User:OVasileva_(WMF)|Olga Vasileva]] (the Product Manager) will be hosting this meeting. The presentation part will be given in English.
We can answer questions asked in English, French, Italian, and Polish. If you would like to ask questions in advance, add them on the [[mw:Talk:Reading/Web/Desktop_Improvements|talk page]] or send them to sgrabarczuk@wikimedia.org.
At this meeting, both [[foundation:Friendly_space_policy|Friendly space policy]] and the [[mw:Special:MyLanguage/Code_of_Conduct|Code of Conduct]] for Wikimedia technical spaces apply. Zoom is not subject to the [[foundation:Privacy_policy|WMF Privacy Policy]].
We hope to see you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 00:35, 26 dhen Ghiblean 2022 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=23142195 -->
== Coming soon: Improvements for templates ==
<div class="plainlinks mw-content-ltr" lang="en" dir="ltr">
<!--T:11-->
[[File:Overview of changes in the VisualEditor template dialog by WMDE Technical Wishes.webm|thumb|Fundamental changes in the template dialog.]]
Hello, more changes around templates are coming to your wiki soon:
The [[mw:Special:MyLanguage/Help:VisualEditor/User guide#Editing templates|'''template dialog''' in VisualEditor]] and in the [[mw:Special:MyLanguage/2017 wikitext editor|2017 Wikitext Editor]] (beta) will be '''improved fundamentally''':
This should help users understand better what the template expects, how to navigate the template, and how to add parameters.
* [[metawiki:WMDE Technical Wishes/VisualEditor template dialog improvements|project page]], [[metawiki:Talk:WMDE Technical Wishes/VisualEditor template dialog improvements|talk page]]
In '''syntax highlighting''' ([[mw:Special:MyLanguage/Extension:CodeMirror|CodeMirror]] extension), you can activate a '''colorblind-friendly''' color scheme with a user setting.
* [[metawiki:WMDE Technical Wishes/Improved Color Scheme of Syntax Highlighting#Color-blind_mode|project page]], [[metawiki:Talk:WMDE Technical Wishes/Improved Color Scheme of Syntax Highlighting|talk page]]
Deployment is planned for May 10. This is the last set of improvements from [[m:WMDE Technical Wishes|WMDE Technical Wishes']] focus area “[[m:WMDE Technical Wishes/Templates|Templates]]”.
We would love to hear your feedback on our talk pages!
</div> -- [[m:User:Johanna Strodt (WMDE)|Johanna Strodt (WMDE)]] 11:13, 29 dhen Ghiblean 2022 (UTC)
<!-- Message sent by User:Johanna Strodt (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=23222263 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Editing news 2022 #1</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="message"/><i>[[metawiki:VisualEditor/Newsletter/2022/April|Read this in another language]] • [[m:VisualEditor/Newsletter|Subscription list for this multilingual newsletter]]</i>
[[File:Junior Contributor New Topic Tool Completion Rate.png|thumb|New editors were more successful with this new tool.]]
The [[mw:Special:MyLanguage/Help:DiscussionTools#New discussion tool|New topic tool]] helps editors create new ==Sections== on discussion pages. New editors are more successful with this new tool. You can [[mw:Talk pages project/New topic#21 April 2022|read the report]]. Soon, the Editing team will offer this to all editors at the 20 Wikipedias that participated in the test. You will be able to turn it off at [[Special:Preferences#mw-prefsection-editing-discussion]].<section end="message"/>
</div>
[[User:Whatamidoing (WMF)|Whatamidoing (WMF)]] 18:55, 2 dhen Chèitean 2022 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/VisualEditor/Newsletter/Wikis_with_VE&oldid=22019984 -->
== 2022 Board of Trustees Call for Candidates ==
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/Call for Candidates/Short|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/Call for Candidates/Short|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2022/Announcement/Call for Candidates/Short}}&language=&action=page&filter= {{int:please-translate}}]</div>''
The Board of Trustees seeks candidates for the 2022 Board of Trustees election. [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2022/Announcement/Call_for_Candidates|'''Read more on Meta-wiki.''']]
The [[m:Special:MyLanguage/Wikimedia Foundation elections/2022|2022 Board of Trustees election]] is here! Please consider submitting your candidacy to serve on the Board of Trustees.
The Wikimedia Foundation Board of Trustees oversees the Wikimedia Foundation's operations. Community-and-affiliate selected trustees and Board-appointed trustees make up the Board of Trustees. Each trustee serves a three year term. The Wikimedia community has the opportunity to vote for community-and-affiliate selected trustees.
The Wikimedia community will vote to fill two seats on the Board in 2022. This is an opportunity to improve the representation, diversity, and expertise of the Board as a team.
;Who are potential candidates? Are you a potential candidate? Find out more on the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Apply to be a Candidate|Apply to be a Candidate page]].
Thank you for your support,
Movement Strategy and Governance on behalf of the Elections Committee and the Board of Trustees<br /><section end="announcement-content" />
10:40, 10 dhen Chèitean 2022 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23215441 -->
== Let's talk about the Desktop Improvements ==
[[File:WP20Symbols MediaWiki light background.svg|200px|right]]
Hello!
Have you noticed that some wikis have a [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements|different desktop interface]]? Are you curious about the next steps? Maybe you have questions or ideas regarding the design or technical matters?
Join an online meeting with the team working on the Desktop Improvements! It will take place on '''17 May 2022 at [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20220517T1200 12:00 UTC] and [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20220517T1900 19:00 UTC]''' on Zoom. '''[https://wikimedia.zoom.us/j/86217494304 Click here to join]'''. Meeting ID: 86217494304. [https://wikimedia.zoom.us/u/k7CirSh8W Dial by your location].
'''Agenda'''
* Update on the recent developments
* Questions and answers, discussion
'''Format'''
The meeting will not be recorded or streamed. Notes will be taken in a [https://docs.google.com/document/d/1G4tfss-JBVxyZMxGlOj5MCBhOO-0sLekquFoa2XiQb8/edit# Google Docs file]. [[mw:User:OVasileva_(WMF)|Olga Vasileva]] (the Product Manager) will be hosting this meeting. The presentation part will be given in English.
We can answer questions asked in English, Italian, Polish; also, only at the first meeting: Farsi, Vietnamese; only at the second meeting: Portuguese, Spanish, Russian. If you would like to ask questions in advance, add them on the [[mw:Talk:Reading/Web/Desktop_Improvements|talk page]] or send them to sgrabarczuk@wikimedia.org.
At this meeting, both [[foundation:Friendly_space_policy|Friendly space policy]] and the [[mw:Special:MyLanguage/Code_of_Conduct|Code of Conduct]] for Wikimedia technical spaces apply. Zoom is not subject to the [[foundation:Privacy_policy|WMF Privacy Policy]].
We hope to see you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 05:02, 14 dhen Chèitean 2022 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=23142195 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Revisions to the Universal Code of Conduct (UCoC) Enforcement Guidelines</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/Enforcement guidelines/Revision discussions/Announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Enforcement guidelines/Revision discussions/Announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hello all,
We'd like to provide an update on the work on the Enforcement Guidelines for the Universal Code of Conduct. After the conclusion of the community vote on the guidelines in March, the [[m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee|Community Affairs committee (CAC)]] of the Board [https://lists.wikimedia.org/hyperkitty/list/wikimedia-l@lists.wikimedia.org/thread/JAYQN3NYKCHQHONMUONYTI6WRKZFQNSC/ asked that several areas of the guidelines be reviewed for improvements] before the Board does its final review. These areas were identified based on community discussions and comments provided during the vote. The CAC also requested review of the controversial Note in 3.1 of the UCoC itself.
Once more, a big thank you to all who voted, especially to all who left constructive feedback and comments! The project team is working with the Board to establish a timeline for this work, and will communicate this next month.
Members of the two prior [[m:Special:MyLanguage/Universal Code of Conduct/Drafting committee|UCoC Drafting Committees]] have generously offered their time to help shape improvements to the Guidelines. You can read more about them and their work [[m:Special:MyLanguage/Universal Code of Conduct/Drafting committee#Revisions_Committee|here]], as well as read [[m:Special:MyLanguage/Universal_Code_of_Conduct/Drafting_committee/Phase_2_meeting_summaries#2022|summaries of their weekly meetings in 2022]].
Wikimedians have provided many valuable comments together with the vote and in other conversations. Given the size and diversity of the Wikimedia community, there are even more voices out there who can give ideas on how to improve the enforcement guidelines and add even more valuable ideas to the process. To help the Revisions committee identify improvements, input on several questions for the committee’s review is requested. Visit the Meta-wiki pages ([[m:Special:MyLanguage/Universal_Code_of_Conduct/Enforcement_guidelines/Revision_discussions|Enforcement Guidelines revision discussions]], [[m:Special:MyLanguage/Universal_Code_of_Conduct/Policy text/Revision_discussions|Policy text revision discussions]]) to get your ideas to the Committee - it is very important that viewpoints are heard from different communities before the Committee begins drafting revision proposals.
On behalf of the UCoC project team <br /><section end="announcement-content" />
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 22:57, 3 dhen Ògmhios 2022 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23215441 -->
== Desktop Improvements update ==
[[File:Table of contents shown on English Wikipedia 02.webm|thumb]]
; Making this the new default
Hello. I wanted to give you an update about the [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements|Desktop Improvements]] project, which the Wikimedia Foundation Web team has been working on for the past few years. Our work is almost finished! 🎉
We would love to see these improvements become the default for readers and editors across all wikis. <span style="background-color:#fc3;">In the coming weeks, we will begin conversations on more wikis, including yours. 🗓️</span> We will gladly read your suggestions!
The goals of the project are to make the interface more welcoming and comfortable for readers and useful for advanced users. The project consists of a series of feature improvements which make it easier to read and learn, navigate within the page, search, switch between languages, use article tabs and the user menu, and more. The improvements are already visible by default for readers and editors on more than 30 wikis, including Wikipedias in [[:fr:|French]], [[:pt:|Portuguese]], and [[:fa:|Persian]].
The changes apply to the [{{fullurl:{{FULLPAGENAMEE}}|useskin=vector}} Vector] skin only, although it will always be possible to revert to the previous version on an individual basis. [{{fullurl:{{FULLPAGENAMEE}}|useskin=monobook}} Monobook] or [{{fullurl:{{FULLPAGENAMEE}}|useskin=timeless}} Timeless] users will not notice any changes.
; The newest features
* [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Features/Table of contents|Table of contents]] - our version is easier to reach, gain context of the page, and navigate throughout the page without needing to scroll. It is currently tested across our pilot wikis. It is also available for editors who have opted into the Vector 2022 skin.
* [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Features/Page tools|Page tools]] - now, there are two types of links in the sidebar. There are actions and tools for individual pages (like [[Special:RecentChangesLinked|Related changes]]) and links of the wiki-wide nature (like [[Special:RecentChanges|Recent changes]]). We are going to separate these into two intuitive menus.
; How to enable/disable the improvements
[[File:Desktop Improvements - how to enable globally.png|thumb|[[Special:GlobalPreferences#mw-prefsection-rendering|{{int:globalpreferences}}]]]]
* It is possible to opt-in individually [[Special:Preferences#mw-prefsection-rendering|in the appearance tab within the preferences]] by selecting "{{int:skinname-vector-2022}}". Also, it is possible to opt-in on all wikis using the [[Special:GlobalPreferences#mw-prefsection-rendering|global preferences]].
* On wikis where the changes are visible by default for all, logged-in users can always opt-out to the Legacy Vector. There is an easily accessible link in the sidebar of the new Vector.
; Learn more and join our events
If you would like to follow the progress of our project, you can [[mw:Special:Newsletter/28/subscribe|subscribe to our newsletter]]. You can read the [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements|pages of the project]], check [[mw:Special:MyLanguage/Reading/Web/Desktop_Improvements/Frequently_asked_questions|our FAQ]], write on the [[mw:Talk:Reading/Web/Desktop_Improvements|project talk page]], and [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Updates/Talk to Web|join an online meeting with us]].
Thank you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 16:59, 21 dhen Ògmhios 2022 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=23430301 -->
== Results of Wiki Loves Folklore 2022 is out! ==
<div lang="en" dir="ltr" class="mw-content-ltr">
{{int:please-translate}}
[[File:Wiki Loves Folklore Logo.svg|right|150px|frameless]]
Hi, Greetings
The winners for '''[[c:Commons:Wiki Loves Folklore 2022|Wiki Loves Folklore 2022]]''' is announced!
We are happy to share with you winning images for this year's edition. This year saw over 8,584 images represented on commons in over 92 countries. Kindly see images '''[[:c:Commons:Wiki Loves Folklore 2022/Winners|here]]'''
Our profound gratitude to all the people who participated and organized local contests and photo walks for this project.
We hope to have you contribute to the campaign next year.
'''Thank you,'''
'''Wiki Loves Folklore International Team'''
--[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 16:12, 4 dhen Iuchar 2022 (UTC)
</div>
<!-- Message sent by User:Tiven2240@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=23454230 -->
== Propose statements for the 2022 Election Compass ==
:''[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/Propose statements for the 2022 Election Compass| You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/Propose statements for the 2022 Election Compass|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2022/Announcement/Propose statements for the 2022 Election Compass}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hi all,
Community members in the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022|2022 Board of Trustees election]] are invited to [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2022/Community_Voting/Election_Compass|propose statements to use in the Election Compass.]]
An Election Compass is a tool to help voters select the candidates that best align with their beliefs and views. The community members will propose statements for the candidates to answer using a Lickert scale (agree/neutral/disagree). The candidates’ answers to the statements will be loaded into the Election Compass tool. Voters will use the tool by entering in their answer to the statements (agree/disagree/neutral). The results will show the candidates that best align with the voter’s beliefs and views.
;Here is the timeline for the Election Compass:
* July 8 - 20: Community members propose statements for the Election Compass
* July 21 - 22: Elections Committee reviews statements for clarity and removes off-topic statements
* July 23 - August 1: Volunteers vote on the statements
* August 2 - 4: Elections Committee selects the top 15 statements
* August 5 - 12: candidates align themselves with the statements
* August 15: The Election Compass opens for voters to use to help guide their voting decision
The Elections Committee will select the top 15 statements at the beginning of August. The Elections Committee will oversee the process, supported by the Movement Strategy and Governance team. MSG will check that the questions are clear, there are no duplicates, no typos, and so on.
Best,
Movement Strategy and Governance
''This message was sent on behalf of the Board Selection Task Force and the Elections Committee''<br /><section end="announcement-content" />
[[User:MNadzikiewicz (WMF)|MNadzikiewicz (WMF)]] ([[User talk:MNadzikiewicz (WMF)|talk]]) 11:34, 14 dhen Iuchar 2022 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23215441 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Movement Strategy and Governance News – Issue 7</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="msg-newsletter"/>
<div style = "line-height: 1.2">
<span style="font-size:200%;">'''Movement Strategy and Governance News'''</span><br>
<span style="font-size:120%; color:#404040;">'''Issue 7, July-September 2022'''</span><span style="font-size:120%; float:right;">[[m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7|'''Read the full newsletter''']]</span>
----
Welcome to the 7th issue of Movement Strategy and Governance News! The newsletter distributes relevant news and events about the implementation of Wikimedia's [[:m:Special:MyLanguage/Movement Strategy/Initiatives|Movement Strategy recommendations]], other relevant topics regarding Movement governance, as well as different projects and activities supported by the Movement Strategy and Governance (MSG) team of the Wikimedia Foundation.
The MSG Newsletter is delivered quarterly, while the more frequent [[:m:Special:MyLanguage/Movement Strategy/Updates|Movement Strategy Weekly]] will be delivered weekly. Please remember to subscribe [[m:Special:MyLanguage/Global message delivery/Targets/MSG Newsletter Subscription|here]] if you would like to receive future issues of this newsletter.
</div><div style="margin-top:3px; padding:10px 10px 10px 20px; background:#fffff; border:2px solid #808080; border-radius:4px; font-size:100%;">
* '''Movement sustainability''': Wikimedia Foundation's annual sustainability report has been published. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A1|continue reading]])
* '''Improving user experience''': recent improvements on the desktop interface for Wikimedia projects. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A2|continue reading]])
* '''Safety and inclusion''': updates on the revision process of the Universal Code of Conduct Enforcement Guidelines. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A3|continue reading]])
* '''Equity in decisionmaking''': reports from Hubs pilots conversations, recent progress from the Movement Charter Drafting Committee, and a new white paper for futures of participation in the Wikimedia movement. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A4|continue reading]])
* '''Stakeholders coordination''': launch of a helpdesk for Affiliates and volunteer communities working on content partnership. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A5|continue reading]])
* '''Leadership development''': updates on leadership projects by Wikimedia movement organizers in Brazil and Cape Verde. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A6|continue reading]])
* '''Internal knowledge management''': launch of a new portal for technical documentation and community resources. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A7|continue reading]])
* '''Innovate in free knowledge''': high-quality audiovisual resources for scientific experiments and a new toolkit to record oral transcripts. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A8|continue reading]])
* '''Evaluate, iterate, and adapt''': results from the Equity Landscape project pilot ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A9|continue reading]])
* '''Other news and updates''': a new forum to discuss Movement Strategy implementation, upcoming Wikimedia Foundation Board of Trustees election, a new podcast to discuss Movement Strategy, and change of personnel for the Foundation's Movement Strategy and Governance team. ([[:m:Special:MyLanguage/Movement Strategy and Governance/Newsletter/7#A10|continue reading]])
</div><section end="msg-newsletter"/>
</div>
Thank you for reading! [[User:RamzyM (WMF)|RamzyM (WMF)]] 01:38, 18 dhen Iuchar 2022 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23529147 -->
== Let's talk about the Desktop Improvements ==
[[File:Vector 2022 showing language menu with a blue menu trigger and blue menu items 01.jpg|thumb]]
Join an online meeting with the team working on the [[mw:Reading/Web/Desktop Improvements|Desktop Improvements]]! It will take place on '''26 July 2022 at [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20220726T1200 12:00 UTC] and [https://www.timeanddate.com/worldclock/fixedtime.html?iso=20220726T1900 19:00 UTC]''' on Zoom. '''[https://wikimedia.zoom.us/j/5304280674 Click here to join]'''. Meeting ID: 5304280674. [https://wikimedia.zoom.us/u/kc2hamfYz9 Dial by your location].
[[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Updates/Talk to Web|Read more]]. See you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|talk]]) 16:19, 25 dhen Iuchar 2022 (UTC)
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/En_fallback&oldid=23430301 -->
== Announcing the six candidates for the 2022 Board of Trustees election ==
<section begin="announcement-content"/>
:''[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/Announcing the six candidates for the 2022 Board of Trustees election| You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/Announcing the six candidates for the 2022 Board of Trustees election|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2022/Announcement/Announcing the six candidates for the 2022 Board of Trustees election}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hi everyone,
'''The Affiliate voting process has concluded.''' Representatives from each Affiliate organization learned about the candidates by reading candidates’ statements, reviewing candidates’ answers to questions, and considering the candidates’ ratings provided by the Analysis Committee. The selected 2022 Board of Trustees candidates are:
* Tobechukwu Precious Friday ([[:m:User:Tochiprecious|Tochiprecious]])
* Farah Jack Mustaklem ([[:m:User:Fjmustak|Fjmustak]])
* Shani Evenstein Sigalov ([[:m:User:Esh77|Esh77]])
* Kunal Mehta ([[:m:User:Legoktm|Legoktm]])
* Michał Buczyński ([[:m:User:Aegis Maelstrom|Aegis Maelstrom]])
* Mike Peel ([[:m:User:Mike Peel|Mike Peel]])
You may see more information about the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Results|Results]] and [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Stats|Statistics]] of this Board election.
Please take a moment to appreciate the Affiliate Representatives and Analysis Committee members for taking part in this process and helping to grow the Board of Trustees in capacity and diversity. These hours of volunteer work connect us across understanding and perspective. Thank you for your participation.
Thank you to the community members who put themselves forward as candidates for the Board of Trustees. Considering joining the Board of Trustees is no small decision. The time and dedication candidates have shown to this point speaks to their commitment to this movement. Congratulations to those candidates who have been selected. A great amount of appreciation and gratitude for those candidates not selected. Please continue to share your leadership with Wikimedia.
Thank you to those who followed the Affiliate process for this Board election. You may review the results of the Affiliate selection process.
'''The next part of the Board election process is the community voting period.''' [[m:Special:MyLanguage/Wikimedia Foundation elections/2022#Timeline|You may view the Board election timeline here]]. To prepare for the community voting period, there are several things community members can engage with in the following ways:
* [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Candidates|Read candidates’ statements]] and read the candidates’ answers to the questions posed by the Affiliate Representatives.
* [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2022/Community_Voting/Questions_for_Candidates|Propose and select the 6 questions for candidates to answer during their video Q&A]].
* See the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Candidates|Analysis Committee’s ratings of candidates on each candidate’s statement]].
* [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Community Voting/Election Compass|Propose statements for the Election Compass]] voters can use to find which candidates best fit their principles.
* Encourage others in your community to take part in the election.
Best,
Movement Strategy and Governance
''This message was sent on behalf of the Board Selection Task Force and the Elections Committee''
</div><section end="announcement-content"/>
[[User:MNadzikiewicz (WMF)|MNadzikiewicz (WMF)]] 14:03, 27 dhen Iuchar 2022 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23530132 -->
== Vote for Election Compass Statements ==
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/Vote for Election Compass Statements| You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/Vote for Election Compass Statements|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2022/Announcement/Vote for Election Compass Statements}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hi all,
Volunteers in the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022|2022 Board of Trustees election]] are invited to [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2022/Community_Voting/Election_Compass/Statements|vote for statements to use in the Election Compass]]. You can vote for the statements you would like to see included in the Election Compass on Meta-wiki.
An Election Compass is a tool to help voters select the candidates that best align with their beliefs and views. The community members will propose statements for the candidates to answer using a Lickert scale (agree/neutral/disagree). The candidates’ answers to the statements will be loaded into the Election Compass tool. Voters will use the tool by entering in their answer to the statements (agree/disagree/neutral). The results will show the candidates that best align with the voter’s beliefs and views.
Here is the timeline for the Election Compass:
*<s>July 8 - 20: Volunteers propose statements for the Election Compass</s>
*<s>July 21 - 22: Elections Committee reviews statements for clarity and removes off-topic statements</s>
*July 23 - August 1: Volunteers vote on the statements
*August 2 - 4: Elections Committee selects the top 15 statements
*August 5 - 12: candidates align themselves with the statements
*August 15: The Election Compass opens for voters to use to help guide their voting decision
The Elections Committee will select the top 15 statements at the beginning of August
Best,
Movement Strategy and Governance
''This message was sent on behalf of the Board Selection Task Force and the Elections Committee''
</div><section end="announcement-content" />
[[User:MNadzikiewicz (WMF)|MNadzikiewicz (WMF)]] 21:01, 27 dhen Iuchar 2022 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23530132 -->
== The 2022 Board of Trustees election Community Voting period is now open ==
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/The 2022 Board of Trustees election Community Voting period is now open| You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Announcement/The 2022 Board of Trustees election Community Voting period is now open|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2022/Announcement/The 2022 Board of Trustees election Community Voting period is now open}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hi everyone,
The Community Voting period for the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022|2022 Board of Trustees election]] is now open. Here are some helpful links to get you the information you need to vote:
* Try the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Community_Voting/Election_Compass|Election Compass]], showing how candidates stand on 15 different topics.
* Read the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Candidates|candidate statements]] and [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2022/Affiliate_Organization_Participation/Candidate_Questions|answers to Affiliate questions]]
* [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Apply to be a Candidate|Learn more about the skills the Board seeks]] and how the [[m:Special:MyLanguage/Wikimedia Foundation elections/2022/Candidates|Analysis Committee found candidates align with those skills]]
If you are ready to vote, you may go to [[Special:SecurePoll/vote/Wikimedia_Foundation_Board_Elections_2022|SecurePoll voting page]] to vote now. '''You may vote from August 23 at 00:00 UTC to September 6 at 23:59 UTC.''' To see about your voter eligibility, please visit the [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2022/Voter_eligibility_guidelines|voter eligibility page]].
Best,
Movement Strategy and Governance
''This message was sent on behalf of the Board Selection Task Force and the Elections Committee''<br /><section end="announcement-content" />
[[User:MNadzikiewicz_(WMF)|MNadzikiewicz (WMF)]]
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23708360 -->
== Invitation to join the Movement Strategy Forum ==
:''{{More languages}}''
<section begin="announcement-content" />
Hello everyone,
The [https://forum.movement-strategy.org/ Movement Strategy Forum] (MS Forum) is a multilingual collaborative space for all conversations about Movement Strategy implementation.
We are inviting all Movement participants to collaborate on the MS Forum. The goal of the forum is to build community collaboration, using an inclusive multilingual platform.
The [[m:Movement Strategy|Movement Strategy]] is a collaborative effort to imagine and build the future of the Wikimedia Movement. Anyone can contribute to the Movement Strategy, from a comment to a full-time project.
;Join this forum with your Wikimedia account, engage in conversations, and ask questions in your language.
The Movement Strategy and Governance team (MSG) launched the proposal for the MS Forum in May 2022. There was a 2-month community review period, which ended on 24 July 2022. The community review process included several questions that resulted in interesting conversations. You can read the [https://forum.movement-strategy.org/t/ms-forum-community-review-report/1436 Community Review Report].
We look forward to seeing you at the MS Forum!
Best regards,
the Movement Strategy and Governance Team
[[User:MNadzikiewicz (WMF)]] 11:32, 29 An Lùnastal 2022 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23720620 -->
== The Vector 2022 skin as the default in two weeks? ==
<div lang="en" dir="ltr" class="mw-content-ltr">
[[File:Wikimania 2022 Vector (2022) Presentation.pdf|thumb|The slides for our presentation at Wikimania 2022|page=26]]
Hello. I'm writing on behalf of the [[mw:Reading/Web|Wikimedia Foundation Web team]]. '''In two weeks, we would like to make the Vector 2022 skin the default on this wiki.'''
We have been working on it for the past three years. So far, it has been the default on more than 30 wikis, including sister projects, all accounting for more than 1 billion pageviews per month. On average [[phab:T317529#8246686|87% of active logged-in users]] of those wikis use Vector 2022.
It would become the default for all logged-out users, and also all logged-in users who currently use Vector legacy. Logged-in users can at any time switch to [[Special:Preferences#mw-prefsection-rendering|any other skins]]. No changes are expected for users of these skins.
<div style="width:100%; margin:auto;"><gallery widths="220" heights="150" mode="packed" caption="Top of an article">
Screenshot Historia da moeda do Tíbet - 2022-09-22 - Vector 2010 top.png|Vector legacy (current default)
Screenshot Historia da moeda do Tíbet - 2022-09-22 - Vector 2022 top.png|Vector 2022
</gallery><gallery widths="220" heights="150" mode="packed" caption="A section of an article">
Screenshot Historia da moeda do Tíbet - 2022-09-22 - Vector 2010 scrolled.png|Vector legacy (current default)
Screenshot Historia da moeda do Tíbet - 2022-09-22 - Vector 2022 scrolled.png|Vector 2022
</gallery></div>
=== About the skin ===
'''[Why is a change necessary]''' The current default skin meets the needs of the readers and editors as these were 13 years ago. Since then, new users have begun using Wikimedia projects. [https://diff.wikimedia.org/2022/08/18/prioritizing-equity-within-wikipedias-new-desktop/ The old Vector doesn't meet their needs.]
'''[Objective]''' The objective for the new skin is to make the interface more welcoming and comfortable for readers and useful for advanced users. It draws inspiration from previous requests, the [[metawiki:Special:MyLanguage/Community_Wishlist_Survey|Community Wishlist Surveys]], and gadgets and scripts. The work helped our code follow the standards and improve all other skins. [[phab:phame/post/view/290/how_and_why_we_moved_our_skins_to_mustache/|We reduced PHP code in Wikimedia deployed skins by 75%]]. The project has also focused on making it easier to support gadgets and use APIs.
'''[Changes and test results]''' The skin introduces a [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Features|series of changes]] that improve readability and usability. The new skin does not remove any functionality currently available on the Vector skin.
* The sticky header makes it easier to find tools that editors use often. It decreases scrolling to the top of the page by 16%.
* The new table of contents makes it easier to navigate to different sections. Readers and editors jumped to different sections of the page 50% more than with the old table of contents. It also looks a bit different on talk pages.
* The new search bar is easier to find and makes it easier to find the correct search result from the list. This increased the amount of searches started by 30% on the wikis we tested on.
* The skin does not negatively affect pageviews, edit rates, or account creation. There is evidence of increases in pageviews and account creation across partner communities.
'''[Try it out]''' Try out the new skin by going to the appearance tab in [[Special:Preferences#mw-prefsection-rendering|your preferences]] and selecting Vector 2022 from the list of skins.
=== How can editors change and customize this skin? ===
It's possible to configure and personalize our changes. We support volunteers who create new gadgets and user scripts. Check out [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Repository|our repository]] for a list of currently available customizations, or add your own.
=== Our plan ===
'''If no large concerns are raised, we plan on deploying in the week of October 3, 2022'''. If your community would like to request more time to discuss the changes, hit the button and write to us. We can adjust the calendar.
<div style="text-align: center;">[[mw:Talk:Reading/Web/Desktop Improvements|<span class="plainlinks mw-ui-button">Request for more time to discuss the change</span>]]</div>
If you'd like ask our team anything, if you have questions, concerns, or additional thoughts, please ping me here or write on the [[mw:Talk:Reading/Web/Desktop Improvements|talk page of the project]]. We will gladly answer! Also, [[mw:Reading/Web/Desktop Improvements/Frequently asked questions|see our FAQ]]. Thank you! [[mw:User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[mw:User talk:SGrabarczuk (WMF)|talk]]) 04:15, 22 dhen t-Sultain 2022 (UTC)
</div>
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/Varia&oldid=23838600 -->
== Invitation to attend “Ask Me Anything about Movement Charter” Sessions ==
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Movement Charter/Community Consultation/Announcement/Ask Me Anything Sessions|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Movement Charter/Community Consultation/Announcement/Ask Me Anything Sessions|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Community Consultation/Announcement/Ask Me Anything Sessions}}&language=&action=page&filter= {{int:please-translate}}]
Hello all,
During the 2022 Wikimedia Summit, the [[m:Special:MyLanguage/Movement Charter/Drafting Committee|Movement Charter Drafting Committee]] (MCDC) presented the first outline of the Movement Charter, giving a glimpse on the direction of its future work, and the Charter itself. The MCDC then integrated the initial feedback collected during the Summit. Before proceeding with writing the Charter for the whole Movement, the MCDC wants to interact with community members and gather feedback on the drafts of the three sections: Preamble, Values & Principles, and Roles & Responsibilities (intentions statement). The Movement Charter drafts will be available on the Meta page [[m:Special:MyLanguage/Movement Charter/Content|here]] on November 14, 2022. Community wide consultation period on MC will take place from November 20 to December 18, 2022. Learn more about it [[m:Special:MyLanguage/Movement Charter/Community Consultation|here]].
With the goal of ensuring that people are well informed to fully participate in the conversations and are empowered to contribute their perspective on the Movement Charter, three '''“Ask Me Anything about Movement Charter"''' sessions have been scheduled in different time zones. Everyone in the Wikimedia Movement is invited to attend these conversations. The aim is to learn about Movement Charter - its goal, purpose, why it matters, and how it impacts your community. MCDC members will attend these sessions to answer your questions and hear community feedback.
The “Ask Me Anything” sessions accommodate communities from different time zones. Only the presentation of the session is recorded and shared afterwards, no recording of conversations. Below is the list of planned events:
*<s>'''Asia/Pacific''': November 4, 2022 at 09:00 UTC ([https://zonestamp.toolforge.org/1667552400 your local time]). Interpretation is available in Chinese and Japanese.</s>
* '''Europe/MENA/Sub Saharan Africa''': November 12, 2022 at 15:00 UTC ([https://zonestamp.toolforge.org/1668265257 your local time]). Interpretation is available in Arabic, French and Russian.
* '''North and South America/ Western Europe''': November 12, 2022 at 15:00 UTC ([https://zonestamp.toolforge.org/1668265257 your local time]). Interpretation is available in Spanish and Portuguese.
On the [[m:Special:MyLanguage/Movement Charter/Community Consultation|Meta page]] you will find more details; Zoom links will be shared 48 hours ahead of the call.
'''Call for Movement Charter Ambassadors'''
Individuals or groups from all communities who wish to help include and start conversations in their communities on the Movement Charter are encouraged to become [[m:Special:MyLanguage/Movement Strategy and Governance/Movement Charter Ambassadors Program/About|Movement Charter Ambassadors]] (MC Ambassadors). MC Ambassadors will carry out their own activities and get financial support for enabling conversations in their own languages. [[m:Special:MyLanguage/Movement Strategy and Governance/Team|Regional facilitators]] from the Movement Strategy and Governance team are available to support applicants with MC Ambassadors grantmaking. If you are interested please sign up [[m:Special:MyLanguage/Movement Strategy and Governance/Movement Charter Ambassadors Program/About|here]]. Should you have specific questions, please reach out to the MSG team via email: strategy2030@wikimedia.org or on the MS forum.
We thank you for your time and participation.
On behalf of the Movement Charter Drafting Committee,<section end="announcement-content" />
[[User:MNadzikiewicz (WMF)|MNadzikiewicz (WMF)]] 15:33, 7 dhen t-Samhain 2022 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23914777 -->
== Apply for Funding through the Movement Strategy Community Engagement Package to Support Your Community ==
:''{{More languages}}''
<section begin="announcement-content" />
The Wikimedia Movement Strategy implementation is a collaborative effort for all Wikimedians.
[[m:Special:MyLanguage/Grants:MSIG/About|Movement Strategy Implementation Grants]] support projects that take the current state of a [[m:Special:MyLanguage/Movement Strategy/Initiatives|Movement Strategy Initiative]] and push it one step forward. If you are looking for an example or some guide on how to engage your community further on Movement Strategy and the Movement Strategy Implementation Grants specifically, you may find this '''[[m:Special:MyLanguage/Grants:MSIG/Community Engagement Package|community engagement package]]''' helpful.
The goal of this community engagement package is to support more people to access the funding they might need for the implementation work. By becoming a recipient of this grant, you will be able to support other community members to develop further grant applications that fit with your local contexts to benefit your own communities. With this package, the hope is to break down language barriers and to ensure community members have needed information on Movement Strategy to connect with each other. Movement Strategy is a two-way exchange, we can always learn more from the experiences and knowledge of Wikimedians everywhere. We can train and support our peers by using this package, so more people can make use of this great funding opportunity.
If this information interests you or if you have any further thoughts or questions, please do not hesitate to reach out to us as your [[m:Special:MyLanguage/Movement_Strategy_and_Governance/Team|regional facilitators]] to discuss further. We will be more than happy to support you. When you are ready, follow the steps on [[m:Special:MyLanguage/Grants:MSIG/About |this page]] to apply. We look forward to receiving your application.
Best regards, <br> Movement Strategy and Governance Team <br> Wikimedia Foundation<section end="announcement-content" />
[[User:MNadzikiewicz (WMF)|MNadzikiewicz (WMF)]] 16:26, 14 dhen t-Samhain 2022 (UTC)
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23914777 -->
== Opportunities open for the Ombuds commission and the Case Review Committee ==
<section begin="announcement-content" />
<div style="margin:.2em 0 .5em;margin-{{#switch:{{PAGELANGUAGE}}|ar|arc|ary|arz|azb|bcc|bgn|ckb|bqi|dv|fa|fa-af|glk|ha-arab|he|kk-arab|kk-cn|ks|ku-arab|ms-arab|mzn|pnb|prd|ps|sd|ug|ur|ydd|yi=right|left}}:3ex;">
[[m:Special:MyLanguage/Wikimedia Foundation Legal department/Announcement/2023 OC and CRC appointments process|''You can find this message translated into additional languages on Meta-wiki.'']]
''<span class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation Legal department/Announcement/2023 OC and CRC appointments process|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation Legal department/Announcement/2023 OC and CRC appointments process}}&language=&action=page&filter= {{int:please-translate}}]</span>''
</div>
Hi everyone! The Ombuds commission (OC) and the Case Review Committee (CRC) are looking for members. People are encouraged to nominate themselves or encourage others they feel would contribute to these groups to do so. There is more information below about the opportunity and the skills that are needed.
'''About the Ombuds commission'''
The Ombuds commission (OC) works on all Wikimedia projects to investigate complaints about violations of the privacy policy, especially in use of [[m:Special:MyLanguage/CheckUser policy|CheckUser]] and [[m:Special:MyLanguage/Oversight policy|Oversight]] (also known as Suppression) tools. The Commission mediates between the parties of the investigation and, when violations of the policies are identified, advises the Wikimedia Foundation on best handling. They may also assist the General Counsel, the Chief Executive Officer, or the Board of Trustees of the Foundation in these investigations when legally necessary. For more on the OC's duties and roles, '''[[m:Special:MyLanguage/Ombuds commission|see Ombuds commission on Meta-Wiki]]'''.
Volunteers serving in this role should be experienced Wikimedians, active on any project, who have previously used the CheckUser/Oversight tools OR who have the technical ability to understand these tools and the willingness to learn them. They must be able to communicate in English, the common language of the commission. They are expected to be able to engage neutrally in investigating these concerns and to know when to recuse when other roles and relationships may cause conflict. Commissioners will serve '''two-year terms''' (note that this is different from past years, when the terms have been for one year).
'''About the Case Review Committee'''
The Case Review Committee (CRC) reviews appeals of eligible Trust & Safety office actions. The CRC is a critical layer of oversight to ensure that Wikimedia Foundation office actions are fair and unbiased. They also make sure the Wikimedia Foundation doesn’t overstep established practices or boundaries. For more about the role, '''[[m:Special:MyLanguage/Case Review Committee|see Case Review Committee on Meta-Wiki]]'''.
We are looking for current or former functionaries and experienced volunteers with an interest in joining this group. Applicants must be fluent in English (additional languages are a strong plus) and willing to abide by the [[m:Special:MyLanguage/Trust_and_Safety/Case_Review_Committee/Charter|terms of the Committee charter]]. If the work resonates and you qualify, please apply. Committee members will serve '''two-year terms''' (note that this is different from past years, when the terms have been for one year).
'''Applying to join either of these groups'''
Members are required to sign the [[m:Special:MyLanguage/Confidentiality agreement for nonpublic information|Confidentiality agreement for nonpublic information]] and must be willing to comply with the appropriate Wikimedia Foundation board policies (such as the [[m:Special:MyLanguage/Access to nonpublic information policy|access to non-public information policy]] and the [[foundation:Special:MyLanguage/Privacy policy|Foundation privacy policy]]). These positions requires a high degree of discretion and trust. Members must also be over 18 years of age.
'''If you are interested in serving in either capacity listed above,''' please write in English to the Trust and Safety team at ca[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org (to apply to the OC) or to the Legal Team at legal[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org (to apply to the CRC) with information about:
* Your primary projects
* Languages you speak/write
* Any experience you have serving on committees, whether movement or non-movement
* Your thoughts on what you could bring to the OC or CRC if appointed
* Any experience you have with the Checkuser or Oversight tools (OC only)
* Any other information you think is relevant
'''The deadline for applications is 31 December 2022 in any timezone.'''
Please feel free to pass this invitation along to any users who you think may be qualified and interested. Thank you!
On behalf of the Committee Support team,<br /><section end="announcement-content" />
<!-- Message sent by User:MNadzikiewicz (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery&oldid=23914777 -->
== Community Wishlist Survey 2023 opens in January ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''{{int:Please-translate}}''
(There is [[m:Community Wishlist Survey 2023 opens in January|a translatable version of this message on MetaWiki]])
{{int:Hello}}
The [[m:Community Wishlist Survey 2023|'''Community Wishlist Survey (CWS) 2023''']], which lets contributors propose and vote for tools and improvements, starts next month on Monday, [https://zonestamp.toolforge.org/1674496831 23 January 2023, at 18:00 UTC] and will continue annually.
We are inviting you to share your ideas for technical improvements to our tools and platforms. Long experience in editing or technical skills is not required. If you have ever used our software and thought of an idea to improve it, this is the place to come share those ideas!
The dates for the phases of the Survey will be as follows:
* Phase 1: Submit, discuss, and revise proposals – Monday, Jan 23, 2023 to Sunday, Feb 6, 2023
* Phase 2: WMF/Community Tech reviews and organizes proposals – Monday, Jan 30, 2023 to Friday, Feb 10, 2023
* Phase 3: Vote on proposals – Friday, Feb 10, 2023 to Friday, Feb 24, 2023
* Phase 4: Results posted – Tuesday, Feb 28, 2023
If you want to start writing out your ideas ahead of the Survey, you can start thinking about your proposals and draft them in [[m:Community Wishlist Survey/Sandbox|the CWS sandbox]].
We are grateful to all who participated last year. See you in January 2023!
</div>
{{int:Feedback-thanks-title}} <bdi lang="en" dir="ltr">Community Tech, [[m:User:STei (WMF)|STei (WMF)]]</bdi> 16:44, 15 dhen Dùbhlachd 2022 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Community_Wishlist_list_for_non-Wikipedias&oldid=24239678 -->
== Global ban for PlanespotterA320/RespectCE ==
Per the [[m:Global bans|Global bans]] policy, I'm informing the project of this request for comment: [[m:Requests for comment/Global ban for PlanespotterA320 (2) ]] about banning a member from your community. Thank you.--[[User:Lemonaka|Lemonaka]] ([[User talk:Lemonaka|talk]]) 21:40, 6 February 2023 (UTC)
<!-- Message sent by User:Zabe@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Lemonaka/Massmessagelist&oldid=24501599 -->
== Editing news 2023 #1 ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="message"/><i>[[m:Special:MyLanguage/VisualEditor/Newsletter/2023/February|Read this in another language]] • [[m:Special:MyLanguage/VisualEditor/Newsletter|Subscription list for this multilingual newsletter]]</i>
This newsletter includes two key updates about the [[mw:Special:MyLanguage/Editing team|Editing]] team's work:
# The Editing team will finish adding new features to the [[mw:Special:MyLanguage/Talk pages project|Talk pages project]] and deploy it.
# They are beginning a new project, [[mw:Special:MyLanguage/Edit check|Edit check]].
<strong>Talk pages project</strong>
[[File:Page Frame Features on desktop.png|alt=Screenshot showing the talk page design changes that are currently available as beta features at all Wikimedia wikis. These features include information about the number of people and comments within each discussion.|thumb|300px|Some of the upcoming changes]]
The Editing team is nearly finished with this first phase of the [[mw:Special:MyLanguage/Talk_pages_project|Talk pages project]]. Nearly all [[mw:Special:MyLanguage/Talk pages project/Usability|new features]] are available now in the [[Special:Preferences#mw-prefsection-betafeatures|Beta Feature for {{int:discussiontools-preference-label}}]].
It will show information about how active a discussion is, such as the date of the most recent comment. There will soon be a new "{{int:skin-action-addsection}}" button. You will be able to turn them off at [[Special:Preferences#mw-prefsection-editing-discussion]]. Please [[mw:Special:MyLanguage/Talk:Talk_pages_project/Usability#c-PPelberg_(WMF)-20230215001000-Feedback:_Proposed_Revisions_to_%22Add_topic%22_button|tell them what you think]].
[[File:Daily edit completion rates mobile talk pages.png|thumb|300px|Daily edit completion rate by test group: DiscussionTools (test group) and MobileFrontend overlay (control group)]]
An A/B test for [[mw:Special:MyLanguage/Talk pages project/Mobile|{{int:discussiontools-preference-label}} on the mobile site]] has finished. Editors were [[mw:Special:MyLanguage/Talk_pages_project/Mobile#Status_Updates|more successful with {{int:discussiontools-preference-label}}]]. The Editing team is enabling these features for all editors on the mobile site.
<strong>New Project: Edit Check</strong>
The Editing team is beginning [[mw:Special:MyLanguage/Edit check|a project to help new editors of Wikipedia]]. It will help people identify some problems before they click "{{int:publishchanges}}". The first tool will encourage people to add references when they add new content. Please [[mw:Special:MyLanguage/Help:Watchlist|watch]] that page for more information. You can [[mw:Special:MyLanguage/Editing_team/Community_Conversations#20230303|join a conference call on 3 March 2023]] to learn more.<section end="message"/>
</div>
–[[User:Whatamidoing (WMF)|Whatamidoing (WMF)]] ([[User talk:Whatamidoing (WMF)|{{int:Talkpagelinktext}}]]) 23:25, 22 dhen Ghearran 2023 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/VisualEditor/Newsletter/Wikis_with_VE&oldid=24611966 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Your wiki will be in read only soon</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] tests the switch between its first and secondary data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to do a planned test. This test will show if they can reliably switch from one data centre to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
All traffic will switch on '''{{#time:j xg|2023-03-01|en}}'''. The test will start at '''[https://zonestamp.toolforge.org/{{#time:U|2023-03-01T14:00|en}} {{#time:H:i e|2023-03-01T14:00}}]'''.
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on {{#time:l j xg Y|2023-03-01|en}}.
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
* We expect the code deployments to happen as any other week. However, some case-by-case code freezes could punctually happen if the operation require them afterwards.
* [[mw:Special:MyLanguage/GitLab|GitLab]] will be unavailable for about 90 minutes.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. A banner will be displayed on all wikis 30 minutes before this operation happens. '''Please share this information with your community.'''</div><section end="server-switch"/>
</div>
<span dir=ltr>[[m:User:Trizek (WMF)|Trizek (WMF)]] ([[m:User talk:Trizek (WMF)|{{int:talk}}]])</span> 21:21, 27 dhen Ghearran 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=24390465 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Wikimania 2023 Welcoming Program Submissions</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="wikimania-program-submissions"/>[[File:Wikimedia_Singapore_Logo.svg|right|frameless]]Do you want to host an in-person or virtual session at Wikimania 2023? Maybe a hands-on workshop, a lively discussion, a fun performance, a catchy poster, or a memorable lightning talk? [[wmania:Special:MyLanguage/2023:Program/Submissions|'''Submissions are open until March 28''']]. The event will have dedicated hybrid blocks, so virtual submissions and pre-recorded content are also welcome. If you have any questions, please join us at an upcoming conversation on March 12 or 19, or reach out by email at wikimania@wikimedia.org or on Telegram. More information on-wiki.<section end="wikimania-program-submissions"/>
</div>
<!-- Message sent by User:CKoerner (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=24390465 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Your wiki will be in read-only soon</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] tests the switch between its first and secondary data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to do a planned test. This test will show if they can reliably switch from one data centre to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
All traffic will switch on '''{{#time:j xg|2023-04-26|en}}'''. The test will start at '''[https://zonestamp.toolforge.org/{{#time:U|2023-04-26T14:00|en}} {{#time:H:i e|2023-04-26T14:00}}]'''.
Unfortunately, because of some limitations in [[mw:Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on {{#time:l j xg Y|2023-04-26|en}}.
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
* We expect the code deployments to happen as any other week. However, some case-by-case code freezes could punctually happen if the operation require them afterwards.
* [[mw:Special:MyLanguage/GitLab|GitLab]] will be unavailable for about 90 minutes.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. A banner will be displayed on all wikis 30 minutes before this operation happens. '''Please share this information with your community.'''</div><section end="server-switch"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 00:41, 21 dhen Ghiblean 2023 (UTC)
<!-- Message sent by User:UOzurumba (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=24748237 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Seeking volunteers for the next step in the Universal Code of Conduct process</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/U4C Building Committee/Nominations/Announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/U4C Building Committee/Nominations/Announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hello,
As follow-up to [https://lists.wikimedia.org/hyperkitty/list/wikimedia-l@lists.wikimedia.org/message/IOMVS7W75ZYMABQGOQ2QH2JAURC3CHGH/ the message about the Universal Code of Conduct Enforcement Guidelines] by Wikimedia Foundation Board of Trustees Vice Chair, Shani Evenstein Sigalov, I am reaching out about the next steps. I want to bring your attention to the next stage of the Universal Code of Conduct process, which is forming a building committee for the Universal Code of Conduct Coordinating Committee (U4C). I invite community members with experience and deep interest in community health and governance to nominate themselves to be part of the U4C building committee, which needs people who are:
* Community members in good standing
* Knowledgeable about movement community processes, such as, but not limited to, policy drafting, participatory decision making, and application of existing rules and policies on Wikimedia projects
* Aware and appreciative of the diversity of the movement, such as, but not limited to, languages spoken, identity, geography, and project type
* Committed to participate for the entire U4C Building Committee period from mid-May - December 2023
* Comfortable with engaging in difficult, but productive conversations
* Confidently able to communicate in English
The Building Committee shall consist of volunteer community members, affiliate board or staff, and Wikimedia Foundation staff.
The Universal Code of Conduct has been a process strengthened by the skills and knowledge of the community and I look forward to what the U4C Building Committee creates. If you are interested in joining the Building Committee, please either [[m:Special:MyLanguage/Universal_Code_of_Conduct/U4C_Building_Committee/Nominations|sign up on the Meta-Wiki page]], or contact ucocproject[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org by May 12, 2023. '''[[m:Special:MyLanguage/Universal_Code_of_Conduct/U4C_Building_Committee|Read more on Meta-Wiki]]'''.
Best regards,<br /><section end="announcement-content" />
</div>
[[User:Xeno (WMF)|Xeno (WMF)]] 19:01, 26 dhen Ghiblean 2023 (UTC)
<!-- Message sent by User:Xeno (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=24941045 -->
== Global ban proposal for Leonardo José Raimundo ==
<div lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English. {{int:Please-translate}}
There is an on-going discussion about a proposal that Leonardo José Raimundo be globally banned from editing all Wikimedia projects. You are invited to participate at [[:m:Requests for comment/Global ban for Leonardo José Raimundo|Requests for comment/Global ban for Leonardo José Raimundo]] on Meta-Wiki. {{int:Feedback-thanks-title}} [[User:Elton|Elton]] ([[User talk:Elton|<span class="signature-talk">{{int:Talkpagelinktext}}</span>]]) 00:59, 26 dhen Chèitean 2023 (UTC)
</div>
<!-- Message sent by User:Elton@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Requests_for_comment/Global_ban_for_Leonardo_Jos%C3%A9_Raimundo/Invitations/VP&oldid=25074561 -->
:Persuant to [[m:Requests for comment/Global ban for Leonardo José Raimundo]], Leonardo José Raimundo has been [[m:Global bans|banned from all Wikimedia projects]]. --[[Cleachdaiche:AntiCompositeNumber|AntiCompositeNumber]] ([[Deasbaireachd a' chleachdaiche:AntiCompositeNumber|an deasbaireachd]]) 02:06, 8 dhen Ògmhios 2023 (UTC)
== <span lang="en" dir="ltr" class="mw-content-ltr">Selection of the U4C Building Committee</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
The next stage in the Universal Code of Conduct process is establishing a Building Committee to create the charter for the Universal Code of Conduct Coordinating Committee (U4C). The Building Committee has been selected. [[m:Special:MyLanguage/Universal_Code_of_Conduct/U4C_Building_Committee|Read about the members and the work ahead on Meta-wiki]].<section end="announcement-content" />
</div>
-- [[m:Special:MyLanguage/Universal_Code_of_Conduct/Project|UCoC Project Team]], 04:21, 27 dhen Chèitean 2023 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25018085 -->
== <span lang="en" dir="ltr" class="mw-content-ltr"> Announcing the new Elections Committee members</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Wikimedia Foundation elections committee/Nominatons/2023/Announcement - new members|You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections committee/Nominatons/2023/Announcement - new members|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections committee/Nominatons/2023/Announcement - new members}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hello there,
We are glad to announce [[listarchive:list/wikimedia-l@lists.wikimedia.org/message/4TALOUFPAP2VDBR27GKRVOP7IGQYU3DB/|the new members and advisors of the Elections Committee]]. The [[m:Special:MyLanguage/Wikimedia_Foundation_elections_committee|Elections Committee]] assists with the design and implementation of the process to select Community- and Affiliate-Selected trustees for the Wikimedia Foundation Board of Trustees. After an open nomination process, the strongest candidates spoke with the Board and four candidates were asked to join the Elections Committee. Four other candidates were asked to participate as advisors.
Thank you to all the community members who submitted their names for consideration. We look forward to working with the Elections Committee in the near future.
On behalf of the Wikimedia Foundation Board of Trustees,<br /><section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 18:00, 28 dhen Ògmhios 2023 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25018085 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Review the Charter for the Universal Code of Conduct Coordinating Committee</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/U4C Building Committee/Announcement - Review|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/U4C Building Committee/Announcement - Review}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Hello all,
I am pleased to share the next step in the [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct|Universal Code of Conduct]] work. The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|Universal Code of Conduct Coordinating Committee (U4C) draft charter]] is now ready for your review.
The [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct/Enforcement guidelines|Enforcement Guidelines]] require a [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines#4.5_U4C_Building_Committee|Building Committee]] form to draft a charter that outlines procedures and details for a global committee to be called the [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines#4._UCoC_Coordinating_Committee_(U4C)|Universal Code of Conduct Coordinating Committee (U4C)]]. Over the past few months, the U4C Building Committee worked together as a group to discuss and draft the U4C charter. The U4C Building Committee welcomes feedback about the draft charter now through 22 September 2023. After that date, the U4C Building Committee will revise the charter as needed and a community vote will open shortly afterward.
Join the conversation during the [[m:Special:MyLanguage/Universal Code of Conduct/U4C Building Committee#Conversation hours|conversation hours]] or on [[m:Talk:Universal Code of Conduct/Coordinating Committee/Charter|Meta-wiki]].
Best,<br /><section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]], on behalf of the U4C Building Committee, 15:35, 28 An Lùnastal 2023 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25392152 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Your wiki will be in read-only soon</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] will switch the traffic between its data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster. To make sure everything is working, the Wikimedia Technology department needs to do a planned test. This test will show if they can reliably switch from one data centre to the other. It requires many teams to prepare for the test and to be available to fix any unexpected problems.
All traffic will switch on '''{{#time:j xg|2023-09-20|en}}'''. The test will start at '''[https://zonestamp.toolforge.org/{{#time:U|2023-09-20T14:00|en}} {{#time:H:i e|2023-09-20T14:00}}]'''.
Unfortunately, because of some limitations in [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on {{#time:l j xg Y|2023-09-20|en}}.
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
* We expect the code deployments to happen as any other week. However, some case-by-case code freezes could punctually happen if the operation require them afterwards.
* [[mw:Special:MyLanguage/GitLab|GitLab]] will be unavailable for about 90 minutes.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. A banner will be displayed on all wikis 30 minutes before this operation happens. '''Please share this information with your community.'''</div><section end="server-switch"/>
</div>
[[User:Trizek (WMF)|Trizek_(WMF)]] ([[m:User talk:Trizek (WMF)|talk]]) 09:23, 15 dhen t-Sultain 2023 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=25018086 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">== Opportunities open for the Affiliations Committee, Ombuds commission, and the Case Review Committee ==</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
<div style="margin:.2em 0 .5em;margin-{{#switch:{{PAGELANGUAGE}}|ar|arc|ary|arz|azb|bcc|bgn|ckb|bqi|dv|fa|fa-af|glk|ha-arab|he|kk-arab|kk-cn|ks|ku-arab|ms-arab|mzn|pnb|prd|ps|sd|ug|ur|ydd|yi=right|left}}:3ex;">
[[m:Special:MyLanguage/Wikimedia Foundation Legal department/Committee appointments/Announcement/Short|''You can find this message translated into additional languages on Meta-wiki.'']]
''<span class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation Legal department/Committee appointments/Announcement/Short|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation Legal department/Committee appointments/Announcement/Short}}&language=&action=page&filter= {{int:please-translate}}]</span>''</div>
Hi everyone! The [[m:Special:MyLanguage/Affiliations Committee|Affiliations Committee]] (AffCom), [[m:Special:MyLanguage/Ombuds_commission|Ombuds commission]] (OC), and the [[m:Special:MyLanguage/Trust_and_Safety/Case_Review_Committee|Case Review Committee]] (CRC) are looking for new members. These volunteer groups provide important structural and oversight support for the community and movement. People are encouraged to nominate themselves or encourage others they feel would contribute to these groups to apply. There is more information about the roles of the groups, the skills needed, and the opportunity to apply on the [[m:Special:MyLanguage/Wikimedia Foundation Legal department/Committee appointments|'''Meta-wiki page''']].
On behalf of the Committee Support team,<br /><section end="announcement-content" />
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
~ [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 16:42, 9 dhen Dàmhair 2023 (UTC) </div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25570445 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Review and comment on the 2024 Wikimedia Foundation Board of Trustees selection rules package</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/wiki/Wikimedia Foundation elections/2024/Announcement/Rules package review - short| You can find this message translated into additional languages on Meta-wiki.]]''
:''<div class="plainlinks">[[m:Special:MyLanguage/wiki/Wikimedia Foundation elections/2024/Announcement/Rules package review - short|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:wiki/Wikimedia Foundation elections/2024/Announcement/Rules package review - short}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Dear all,
Please review and comment on the Wikimedia Foundation Board of Trustees selection rules package from now until 29 October 2023. The selection rules package was based on older versions by the Elections Committee and will be used in the 2024 Board of Trustees selection. Providing your comments now will help them provide a smoother, better Board selection process. [[m:Special:MyLanguage/Wikimedia Foundation elections/2024|More on the Meta-wiki page]].
Best,
Katie Chan <br>
Chair of the Elections Committee<br /><section end="announcement-content" />
</div>
01:13, 17 dhen Dàmhair 2023 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25570445 -->
== The Vector 2022 skin as the default in three weeks? ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''[[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Updates/2023-10 for sister projects|Read this in your language]] • <span class=plainlinks>[https://mediawiki.org/w/index.php?title=Special:Translate&group=page-Reading%2FWeb%2FDesktop+Improvements%2FUpdates%2F2023-10+for+sister+projects&language=&action=page&filter= {{Int:please-translate}}]</span> • Please tell other users about these changes''
Hello. I'm writing on behalf of the [[mw:Reading/Web|Wikimedia Foundation Web team]]. '''In two weeks, we would like to make the Vector 2022 skin the default on this wiki.'''
[[File:Desktop Improvements - how to enable globally.png|thumb|[[Special:GlobalPreferences|{{int:globalpreferences}}]]]]
'''If you prefer keeping the current skin''' select "Vector legacy (2010)" on [[Special:GlobalPreferences#mw-prefsection-rendering|the appearance tab of the global preferences]] and save the change. We encourage you to give the new skin a try, though.
Since I last came to you with this question, many things have changed. The skin is now the default on most Wikipedias, and all logos are done! We have also made some tweaks in the skin itself. Below is the text I've sent to you once, but I'm sending it again, just slightly edited, for those who haven't seen it.
If you know what this is about, jump straight to the section "Our plan":
<div style="margin-left:.5em; border-left:3px dotted #a2a9b1; padding-left:.5em;">
It would become the default for all logged-out users, and also all logged-in users who currently use Vector legacy as a [[Special:Preferences#mw-prefsection-rendering|local]] (but not global) preference. Logged-in users can at any time switch to any other skin. No changes are expected for these skins.
<div style="width:100%; margin:auto;"><gallery widths="250" heights="180" mode="packed" caption="Top of an article">
Screenshot Historia da moeda do Tíbet - 2022-09-22 - Vector 2010 top.png|Vector legacy (current default)
Screenshot Historia da moeda do Tíbet - 2022-09-22 - Vector 2022 top.png|Vector 2022
</gallery><gallery widths="250" heights="180" mode="packed" caption="A section of an article">
Screenshot Historia da moeda do Tíbet - 2022-09-22 - Vector 2010 scrolled.png|Vector legacy (current default)
Screenshot Historia da moeda do Tíbet - 2022-09-22 - Vector 2022 scrolled.png|Vector 2022
</gallery></div>
=== About the skin ===
[[File:Wikimania 2022 Vector (2022) Presentation.pdf|thumb|Slides to our Wikimania 2022 presentation. [https://www.youtube.com/watch?v=yC-ItaXDe2A You may also listen to the recording on YouTube (in English)].]]
'''[Why is a change necessary]''' When the current default skin was created, it reflected the needs of the readers and editors as these were 14 years ago. Since then, new users have begun using the Internet and Wikimedia projects in different ways. [[wmfblog:2022/08/18/prioritizing-equity-within-wikipedias-new-desktop/|The old Vector does not meet their needs]].
'''[Objective]''' The objective for the Vector 2022 skin is to make the interface more welcoming and comfortable for readers and useful for advanced users. It introduces a series of changes that aim to improve problems new and existing readers and editors were having with the old skin. It draws inspiration from previous user requests, the [[metawiki:Special:MyLanguage/Community_Wishlist_Survey|Community Wishlist Surveys]], and gadgets and scripts. The work helped our code follow the standards and improve all other skins. [[phab:phame/post/view/290/how_and_why_we_moved_our_skins_to_mustache/|The PHP code in the other available skins has been reduced by 75%]]. The project has also focused on making it easier to support gadgets and use APIs.
[[File:Screenshot of the Vector-2022 skin's fullscreen toggle.png|thumb]]
'''[Changes in a nutshell]''' The skin introduces changes that improve readability and usability. The new skin does not remove any functionality currently available on the Vector skin.
* The limited width and pin-able menus allow to adjust the interface to the screen size, and focus on editing or reading. Logged-in and logged-out users may use a toggle button to keep the full width, though.
* The sticky header makes it easier to find tools that editors use often. It decreases scrolling to the top of the page by 16%.
* The new table of contents makes it easier to navigate to different sections. Readers and editors jump to different sections of the page 50% more than with the old table of contents. It also looks a bit different on talk pages.
* The new search bar is easier to find and makes it easier to find the correct search result from the list. This increased the amount of searches started by 30% on the tested wikis.
* The skin does not negatively affect pageviews, edit rates, or account creation. There is evidence of increases in pageviews and account creation across partner communities.
'''[Customize this skin]''' It's possible to configure and personalize our changes. We support volunteers who create new gadgets and user scripts. Check out [[mw:Special:MyLanguage/Reading/Web/Desktop Improvements/Repository|the repository]] for a list of currently available customizations and changes, or add your own.
</div>
=== Our plan ===
'''If no large concerns are raised, we plan on deploying on 14 November'''. If you'd like to ask our team anything, if you have questions, concerns, or additional thoughts, please comment in any language. If this is the first comment to my message, make sure to ping me. We will gladly answer! Also, check out [[mw:Reading/Web/Desktop Improvements/Frequently asked questions|our FAQ]]. Thank you! [[User:SGrabarczuk (WMF)|SGrabarczuk (WMF)]] ([[User talk:SGrabarczuk (WMF)|<span class="signature-talk">deasbaireachd</span>]]) 01:09, 26 dhen Dàmhair 2023 (UTC)
</div>
<!-- Message sent by User:SGrabarczuk (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:SGrabarczuk_(WMF)/sandbox/MM/Varia&oldid=25791651 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">(New) Feature on [[mw:Special:MyLanguage/Help:Extension:Kartographer|Kartographer]]: Adding geopoints via QID</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="Body"/>Since September 2022, it is possible to create geopoints using a QID. Many wiki contributors have asked for this feature, but it is not being used much. Therefore, we would like to remind you about it. More information can be found on the [[M:WMDE_Technical_Wishes/Geoinformation/Geopoints via QID|project page]]. If you have any comments, please let us know on the [[M:Talk:WMDE Technical Wishes/Geoinformation/Geopoints via QID|talk page]]. – Best regards, the team of Technical Wishes at Wikimedia Deutschland
<section end="Body"/>
</div>
[[M:User:Thereza Mengs (WMDE)|Thereza Mengs (WMDE)]] 12:31, 13 dhen Dùbhlachd 2023 (UTC)
<!-- Message sent by User:Thereza Mengs (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=25955829 -->
== Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''Note: Apologies for cross-posting and sending in English.''
Hello, the '''[[m:WD4WMP|Wikidata for Wikimedia Projects]]''' team at Wikimedia Deutschland would like to hear about your experiences using Wikidata in the sibling projects. If you are interested in sharing your opinion and insights, please consider signing up for an interview with us in this '''[https://wikimedia.sslsurvey.de/Wikidata-for-Wikimedia-Interviews Registration form]'''.<br>
''Currently, we are only able to conduct interviews in English.''
The front page of the form has more details about what the conversation will be like, including how we would '''compensate''' you for your time.
For more information, visit our ''[[m:WD4WMP/AddIssue|project issue page]]'' where you can also share your experiences in written form, without an interview.<br>We look forward to speaking with you, [[m:User:Danny Benjafield (WMDE)|Danny Benjafield (WMDE)]] ([[m:User talk:Danny Benjafield (WMDE)|talk]]) 08:53, 5 January 2024 (UTC)
</div>
<!-- Message sent by User:Danny Benjafield (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/WD4WMP/ScreenerInvite&oldid=26027495 -->
== Reusing references: Can we look over your shoulder? ==
''Apologies for writing in English.''
The Technical Wishes team at Wikimedia Deutschland is planning to [[m:WMDE Technical Wishes/Reusing references|make reusing references easier]]. For our research, we are looking for wiki contributors willing to show us how they are interacting with references.
* The format will be a 1-hour video call, where you would share your screen. [https://wikimedia.sslsurvey.de/User-research-into-Reusing-References-Sign-up-Form-2024/en/ More information here].
* Interviews can be conducted in English, German or Dutch.
* [[mw:WMDE_Engineering/Participate_in_UX_Activities#Compensation|Compensation is available]].
* Sessions will be held in January and February.
* [https://wikimedia.sslsurvey.de/User-research-into-Reusing-References-Sign-up-Form-2024/en/ Sign up here if you are interested.]
* Please note that we probably won’t be able to have sessions with everyone who is interested. Our UX researcher will try to create a good balance of wiki contributors, e.g. in terms of wiki experience, tech experience, editing preferences, gender, disability and more. If you’re a fit, she will reach out to you to schedule an appointment.
We’re looking forward to seeing you, [[m:User:Thereza Mengs (WMDE)| Thereza Mengs (WMDE)]]
<!-- Message sent by User:Thereza Mengs (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=25956752 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Vote on the Charter for the Universal Code of Conduct Coordinating Committee</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - voting opens|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - voting opens}}&language=&action=page&filter= {{int:please-translate}}]''
Hello all,
I am reaching out to you today to announce that the voting period for the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) Charter is now open. Community members may [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter/Voter_information|cast their vote and provide comments about the charter via SecurePoll]] now through '''2 February 2024'''. Those of you who voiced your opinions during the development of the [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|UCoC Enforcement Guidelines]] will find this process familiar.
The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|current version of the U4C Charter]] is on Meta-wiki with translations available.
Read the charter, go vote and share this note with others in your community. I can confidently say the U4C Building Committee looks forward to your participation.
On behalf of the UCoC Project team,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 18:09, 19 dhen Fhaoilleach 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25853527 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Last days to vote on the Charter for the Universal Code of Conduct Coordinating Committee</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - voting reminder|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - voting reminder}}&language=&action=page&filter= {{int:please-translate}}]''
Hello all,
I am reaching out to you today to remind you that the voting period for the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) charter will close on '''2 February 2024'''. Community members may [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter/Voter_information|cast their vote and provide comments about the charter via SecurePoll]]. Those of you who voiced your opinions during the development of the [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|UCoC Enforcement Guidelines]] will find this process familiar.
The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|current version of the U4C charter]] is on Meta-wiki with translations available.
Read the charter, go vote and share this note with others in your community. I can confidently say the U4C Building Committee looks forward to your participation.
On behalf of the UCoC Project team,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 17:01, 31 dhen Fhaoilleach 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25853527 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Announcing the results of the UCoC Coordinating Committee Charter ratification vote</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - results|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - results}}&language=&action=page&filter= {{int:please-translate}}]''
Dear all,
Thank you everyone for following the progress of the Universal Code of Conduct. I am writing to you today to announce the outcome of the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter/Voter_information|ratification vote]] on the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|Universal Code of Conduct Coordinating Committee Charter]]. 1746 contributors voted in this ratification vote with 1249 voters supporting the Charter and 420 voters not. The ratification vote process allowed for voters to provide comments about the Charter.
A report of voting statistics and a summary of voter comments will be published on Meta-wiki in the coming weeks.
Please look forward to hearing about the next steps soon.
On behalf of the UCoC Project team,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 18:24, 12 dhen Ghearran 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26160150 -->
== <span lang="en" dir="ltr" class="mw-content-ltr"> Report of the U4C Charter ratification and U4C Call for Candidates now available</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – call for candidates| You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – call for candidates}}&language=&action=page&filter= {{int:please-translate}}]''
Hello all,
I am writing to you today with two important pieces of information. First, the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter/Vote results|report of the comments from the Universal Code of Conduct Coordinating Committee (U4C) Charter ratification]] is now available. Secondly, the call for candidates for the U4C is open now through April 1, 2024.
The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. Community members are invited to submit their applications for the U4C. For more information and the responsibilities of the U4C, please [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|review the U4C Charter]].
Per the charter, there are 16 seats on the U4C: eight community-at-large seats and eight regional seats to ensure the U4C represents the diversity of the movement.
Read more and submit your application on [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024|Meta-wiki]].
On behalf of the UCoC project team,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 16:25, 5 dhen Mhàrt 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26276337 -->
== <span lang="en" dir="ltr" class="mw-content-ltr"> Wikimedia Foundation Board of Trustees 2024 Selection</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
: ''[[m:Special:MyLanguage/Wikimedia Foundation elections/2024/Announcement/Selection announcement| You can find this message translated into additional languages on Meta-wiki.]]''
: ''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2024/Announcement/Selection announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2024/Announcement/Selection announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>''
Dear all,
This year, the term of 4 (four) Community- and Affiliate-selected Trustees on the Wikimedia Foundation Board of Trustees will come to an end [1]. The Board invites the whole movement to participate in this year’s selection process and vote to fill those seats.
The [[m:Special:MyLanguage/Wikimedia Foundation elections committee|Elections Committee]] will oversee this process with support from Foundation staff [2]. The Board Governance Committee created a Board Selection Working Group from Trustees who cannot be candidates in the 2024 community- and affiliate-selected trustee selection process composed of Dariusz Jemielniak, Nataliia Tymkiv, Esra'a Al Shafei, Kathy Collins, and Shani Evenstein Sigalov [3]. The group is tasked with providing Board oversight for the 2024 trustee selection process, and for keeping the Board informed. More details on the roles of the Elections Committee, Board, and staff are here [4].
Here are the key planned dates:
* May 2024: Call for candidates and call for questions
* June 2024: Affiliates vote to shortlist 12 candidates (no shortlisting if 15 or less candidates apply) [5]
* June-August 2024: Campaign period
* End of August / beginning of September 2024: Two-week community voting period
* October–November 2024: Background check of selected candidates
* Board's Meeting in December 2024: New trustees seated
Learn more about the 2024 selection process - including the detailed timeline, the candidacy process, the campaign rules, and the voter eligibility criteria - on [[m:Special:MyLanguage/Wikimedia Foundation elections/2024|this Meta-wiki page]], and make your plan.
'''Election Volunteers'''
Another way to be involved with the 2024 selection process is to be an Election Volunteer. Election Volunteers are a bridge between the Elections Committee and their respective community. They help ensure their community is represented and mobilize them to vote. Learn more about the program and how to join on this [[m:Special:MyLanguage/Wikimedia Foundation elections/2024/Election Volunteers|Meta-wiki page]].
Best regards,
[[m:Special:MyLanguage/User:Pundit|Dariusz Jemielniak]] (Governance Committee Chair, Board Selection Working Group)
[1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2021/Results#Elected
[2] https://foundation.wikimedia.org/wiki/Committee:Elections_Committee_Charter
[3] https://foundation.wikimedia.org/wiki/Minutes:2023-08-15#Governance_Committee
[4] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections_committee/Roles
[5] Even though the ideal number is 12 candidates for 4 open seats, the shortlisting process will be triggered if there are more than 15 candidates because the 1-3 candidates that are removed might feel ostracized and it would be a lot of work for affiliates to carry out the shortlisting process to only eliminate 1-3 candidates from the candidate list.<section end="announcement-content" />
</div>
[[User:MPossoupe_(WMF)|MPossoupe_(WMF)]]19:57, 12 dhen Mhàrt 2024 (UTC)
<!-- Message sent by User:MPossoupe (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26349432 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Your wiki will be in read-only soon</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] will switch the traffic between its data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster.
All traffic will switch on '''{{#time:j xg|2024-03-20|en}}'''. The test will start at '''[https://zonestamp.toolforge.org/{{#time:U|2024-03-20T14:00|en}} {{#time:H:i e|2024-03-20T14:00}}]'''.
Unfortunately, because of some limitations in [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on {{#time:l j xg Y|2024-03-20|en}}.
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
* We expect the code deployments to happen as any other week. However, some case-by-case code freezes could punctually happen if the operation require them afterwards.
* [[mw:Special:MyLanguage/GitLab|GitLab]] will be unavailable for about 90 minutes.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule. There will be more notifications about this. A banner will be displayed on all wikis 30 minutes before this operation happens. '''Please share this information with your community.'''</div><section end="server-switch"/>
</div>
[[user:Trizek (WMF)|Trizek (WMF)]], 00:00, 15 dhen Mhàrt 2024 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=25636619 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Vote now to select members of the first U4C</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – vote opens|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – vote opens}}&language=&action=page&filter= {{int:please-translate}}]''
Dear all,
I am writing to you to let you know the voting period for the Universal Code of Conduct Coordinating Committee (U4C) is open now through May 9, 2024. Read the information on the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024|voting page on Meta-wiki]] to learn more about voting and voter eligibility.
The Universal Code of Conduct Coordinating Committee (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. Community members were invited to submit their applications for the U4C. For more information and the responsibilities of the U4C, please [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|review the U4C Charter]].
Please share this message with members of your community so they can participate as well.
On behalf of the UCoC project team,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 20:21, 25 dhen Ghiblean 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Sign up for the language community meeting on May 31st, 16:00 UTC</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="message"/>Hello all,
The next language community meeting is scheduled in a few weeks - May 31st at 16:00 UTC. If you're interested, you can [https://www.mediawiki.org/w/index.php?title=Wikimedia_Language_engineering/Community_meetings#31_May_2024 sign up on this wiki page].
This is a participant-driven meeting, where we share language-specific updates related to various projects, collectively discuss technical issues related to language wikis, and work together to find possible solutions. For example, in the last meeting, the topics included the machine translation service (MinT) and the languages and models it currently supports, localization efforts from the Kiwix team, and technical challenges with numerical sorting in files used on Bengali Wikisource.
Do you have any ideas for topics to share technical updates related to your project? Any problems that you would like to bring for discussion during the meeting? Do you need interpretation support from English to another language? Please reach out to me at ssethi(__AT__)wikimedia.org and [[etherpad:p/language-community-meeting-may-2024|add agenda items to the document here]].
We look forward to your participation!
<section end="message"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21:23, 14 dhen Chèitean 2024 (UTC)
<!-- Message sent by User:SSethi (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 -->
== <span lang="en" dir="ltr" class="mw-content-ltr"> Feedback invited on Procedure for Sibling Project Lifecycle</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle/Invitation for feedback (MM)|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle/Invitation for feedback (MM)}}&language=&action=page&filter= {{int:please-translate}}]''
[[File:Sibling Project Lifecycle Conversation 3.png|150px|right|link=:m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle]]
Dear community members,
The [[:m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee|Community Affairs Committee]] (CAC) of the [[:m:Special:MyLanguage/Wikimedia Foundation Board of Trustees|Wikimedia Foundation Board of Trustees]] invites you to give feedback on a '''[[:m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle|draft Procedure for Sibling Project Lifecycle]]'''. This draft Procedure outlines proposed steps and requirements for opening and closing Wikimedia Sibling Projects, and aims to ensure any newly approved projects are set up for success. This is separate from the procedures for opening or closing language versions of projects, which is handled by the [[:m:Special:MyLanguage/Language committee|Language Committee]] or [[m:Special:MyLanguage/Closing_projects_policy|closing projects policy]].
You can find the details on [[:m:Special:MyLanguage/Talk:Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle#Review|this page]], as well as the ways to give your feedback from today until the end of the day on '''June 23, 2024''', anywhere on Earth.
You can also share information about this with the interested project communities you work with or support, and you can also help us translate the procedure into more languages, so people can join the discussions in their own language.
On behalf of the CAC,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 02:26, 22 dhen Chèitean 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Announcing the first Universal Code of Conduct Coordinating Committee</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – results|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – results}}&language=&action=page&filter= {{int:please-translate}}]''
Hello,
The scrutineers have finished reviewing the vote results. We are following up with the results of the first [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024|Universal Code of Conduct Coordinating Committee (U4C) election]].
We are pleased to announce the following individuals as regional members of the U4C, who will fulfill a two-year term:
* North America (USA and Canada)
** –
* Northern and Western Europe
** [[m:Special:MyLanguage/User:Ghilt|Ghilt]]
* Latin America and Caribbean
** –
* Central and East Europe (CEE)
** —
* Sub-Saharan Africa
** –
* Middle East and North Africa
** [[m:Special:MyLanguage/User:Ibrahim.ID|Ibrahim.ID]]
* East, South East Asia and Pacific (ESEAP)
** [[m:Special:MyLanguage/User:0xDeadbeef|0xDeadbeef]]
* South Asia
** –
The following individuals are elected to be community-at-large members of the U4C, fulfilling a one-year term:
* [[m:Special:MyLanguage/User:Barkeep49|Barkeep49]]
* [[m:Special:MyLanguage/User:Superpes15|Superpes15]]
* [[m:Special:MyLanguage/User:Civvì|Civvì]]
* [[m:Special:MyLanguage/User:Luke081515|Luke081515]]
* –
* –
* –
* –
Thank you again to everyone who participated in this process and much appreciation to the candidates for your leadership and dedication to the Wikimedia movement and community.
Over the next few weeks, the U4C will begin meeting and planning the 2024-25 year in supporting the implementation and review of the UCoC and Enforcement Guidelines. Follow their work on [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Meta-wiki]].
On behalf of the UCoC project team,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 08:15, 3 dhen Ògmhios 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">The final text of the Wikimedia Movement Charter is now on Meta</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Announcement - Final draft available|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Announcement - Final draft available}}&language=&action=page&filter= {{int:please-translate}}]''
Hi everyone,
The final text of the [[m:Special:MyLanguage/Movement Charter|Wikimedia Movement Charter]] is now up on Meta in more than 20 languages for your reading.
'''What is the Wikimedia Movement Charter?'''
The Wikimedia Movement Charter is a proposed document to define roles and responsibilities for all the members and entities of the Wikimedia movement, including the creation of a new body – the Global Council – for movement governance.
'''Join the Wikimedia Movement Charter “Launch Party”'''
Join the [[m:Special:MyLanguage/Event:Movement Charter Launch Party|“Launch Party”]] on '''June 20, 2024''' at '''14.00-15.00 UTC''' ([https://zonestamp.toolforge.org/1718892000 your local time]). During this call, we will celebrate the release of the final Charter and present the content of the Charter. Join and learn about the Charter before casting your vote.
'''Movement Charter ratification vote'''
Voting will commence on SecurePoll on '''June 25, 2024''' at '''00:01 UTC''' and will conclude on '''July 9, 2024''' at '''23:59 UTC.''' You can read more about the [[m:Special:MyLanguage/Movement Charter/Ratification/Voting|voting process, eligibility criteria, and other details]] on Meta.
If you have any questions, please leave a comment on the [[m:Special:MyLanguage/Talk:Movement Charter|Meta talk page]] or email the MCDC at [mailto:mcdc@wikimedia.org mcdc@wikimedia.org].
On behalf of the MCDC,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 08:45, 11 dhen Ògmhios 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Voting to ratify the Wikimedia Movement Charter is now open – cast your vote</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Announcement - Ratification vote opens|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Announcement - Ratification vote opens}}&language=&action=page&filter= {{int:please-translate}}]''
Hello everyone,
The voting to ratify the [[m:Special:MyLanguage/Movement Charter|'''Wikimedia Movement Charter''']] is now open. The Wikimedia Movement Charter is a document to define roles and responsibilities for all the members and entities of the Wikimedia movement, including the creation of a new body – the Global Council – for movement governance.
The final version of the Wikimedia Movement Charter is [[m:Special:MyLanguage/Movement Charter|available on Meta in different languages]] and attached [https://commons.wikimedia.org/wiki/File:Wikimedia_Movement_Charter_(June_2024).pdf here in PDF format] for your reading.
Voting commenced on SecurePoll on '''June 25, 2024''' at '''00:01 UTC''' and will conclude on '''July 9, 2024''' at '''23:59 UTC'''. Please read more on the [[m:Special:MyLanguage/Movement Charter/Ratification/Voting|voter information and eligibility details]].
After reading the Charter, please [[Special:SecurePoll/vote/398|'''vote here''']] and share this note further.
If you have any questions about the ratification vote, please contact the Charter Electoral Commission at [mailto:cec@wikimedia.org '''cec@wikimedia.org'''].
On behalf of the CEC,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 10:52, 25 dhen Ògmhios 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26989444 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Voting to ratify the Wikimedia Movement Charter is ending soon</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Announcement - Final reminder|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Announcement - Final reminder}}&language=&action=page&filter= {{int:please-translate}}]''
Hello everyone,
This is a kind reminder that the voting period to ratify the [[m:Special:MyLanguage/Movement Charter|Wikimedia Movement Charter]] will be closed on '''July 9, 2024''', at '''23:59 UTC'''.
If you have not voted yet, please vote [[m:Special:SecurePoll/vote/398|on SecurePoll]].
On behalf of the [[m:Special:MyLanguage/Movement_Charter/Ratification/Voting#Electoral_Commission|Charter Electoral Commission]],<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 03:47, 8 dhen Iuchar 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26989444 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">U4C Special Election - Call for Candidates</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – call for candidates|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – call for candidates}}&language=&action=page&filter= {{int:please-translate}}]''
Hello all,
A special election has been called to fill additional vacancies on the U4C. The call for candidates phase is open from now through July 19, 2024.
The [[:m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the [[:foundation:Wikimedia Foundation Universal Code of Conduct|UCoC]]. Community members are invited to submit their applications in the special election for the U4C. For more information and the responsibilities of the U4C, please review the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|U4C Charter]].
In this special election, according to [[Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter#2. Elections and Terms|chapter 2 of the U4C charter]], there are 9 seats available on the U4C: '''four''' community-at-large seats and '''five''' regional seats to ensure the U4C represents the diversity of the movement. [[Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter#5. Glossary|No more than two members of the U4C can be elected from the same home wiki]]. Therefore, candidates must not have English Wikipedia, German Wikipedia, or Italian Wikipedia as their home wiki.
Read more and submit your application on [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election|Meta-wiki]].
In cooperation with the U4C,<section end="announcement-content" />
</div>
-- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 00:03, 10 dhen Iuchar 2024 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26989444 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Wikimedia Movement Charter ratification voting results</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Announcement - Results of the ratification vote|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Announcement - Results of the ratification vote}}&language=&action=page&filter= {{int:please-translate}}]''
Hello everyone,
After carefully tallying both individual and affiliate votes, the [[m:Special:MyLanguage/Movement Charter/Ratification/Voting#Electoral Commission|Charter Electoral Commission]] is pleased to announce the final results of the Wikimedia Movement Charter voting.
As [[m:Special:MyLanguage/Talk:Movement Charter#Thank you for your participation in the Movement Charter ratification vote!|communicated]] by the Charter Electoral Commission, we reached the quorum for both Affiliate and individual votes by the time the vote closed on '''July 9, 23:59 UTC'''. We thank all 2,451 individuals and 129 Affiliate representatives who voted in the ratification process. Your votes and comments are invaluable for the future steps in Movement Strategy.
The final results of the [[m:Special:MyLanguage/Movement Charter|Wikimedia Movement Charter]] ratification voting held between 25 June and 9 July 2024 are as follows:
'''Individual vote:'''
Out of 2,451 individuals who voted as of July 9 23:59 (UTC), 2,446 have been accepted as valid votes. Among these, '''1,710''' voted “yes”; '''623''' voted “no”; and '''113''' selected “–” (neutral). Because the neutral votes don’t count towards the total number of votes cast, 73.30% voted to approve the Charter (1710/2333), while 26.70% voted to reject the Charter (623/2333).
'''Affiliates vote:'''
Out of 129 Affiliates designated voters who voted as of July 9 23:59 (UTC), 129 votes are confirmed as valid votes. Among these, '''93''' voted “yes”; '''18''' voted “no”; and '''18''' selected “–” (neutral). Because the neutral votes don’t count towards the total number of votes cast, 83.78% voted to approve the Charter (93/111), while 16.22% voted to reject the Charter (18/111).
'''Board of Trustees of the Wikimedia Foundation:'''
The Wikimedia Foundation Board of Trustees voted '''not to ratify''' the proposed Charter during their special Board meeting on July 8, 2024. The Chair of the Wikimedia Foundation Board of Trustees, Nataliia Tymkiv, [[m:Special:MyLanguage/Wikimedia_Foundation_Board_noticeboard/Board_resolution_and_vote_on_the_proposed_Movement_Charter|shared the result of the vote, the resolution, meeting minutes and proposed next steps]].
With this, the Wikimedia Movement Charter in its current revision is '''not ratified'''.
We thank you for your participation in this important moment in our movement’s governance.
The Charter Electoral Commission,
[[m:User:Abhinav619|Abhinav619]], [[m:User:Borschts|Borschts]], [[m:User:Iwuala Lucy|Iwuala Lucy]], [[m:User:Tochiprecious|Tochiprecious]], [[m:User:Der-Wir-Ing|Der-Wir-Ing]]<section end="announcement-content" />
</div>
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 17:53, 18 dhen Iuchar 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26989444 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Vote now to fill vacancies of the first U4C</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – voting opens|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – voting opens}}&language=&action=page&filter= {{int:please-translate}}]''
Dear all,
I am writing to you to let you know the voting period for the Universal Code of Conduct Coordinating Committee (U4C) is open now through '''August 10, 2024'''. Read the information on the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election|voting page on Meta-wiki]] to learn more about voting and voter eligibility.
The Universal Code of Conduct Coordinating Committee (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. Community members were invited to submit their applications for the U4C. For more information and the responsibilities of the U4C, please [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|review the U4C Charter]].
Please share this message with members of your community so they can participate as well.
In cooperation with the U4C,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 02:47, 27 dhen Iuchar 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26989444 -->
== <span lang="en" dir="ltr" class="mw-content-ltr">Reminder! Vote closing soon to fill vacancies of the first U4C</span> ==
<div lang="en" dir="ltr" class="mw-content-ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – reminder to vote|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – reminder to vote}}&language=&action=page&filter= {{int:please-translate}}]''
Dear all,
The voting period for the Universal Code of Conduct Coordinating Committee (U4C) is closing soon. It is open through 10 August 2024. Read the information on [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2024_Special_Election#Voting|the voting page on Meta-wiki to learn more about voting and voter eligibility]]. If you are eligible to vote and have not voted in this special election, it is important that you vote now.
'''Why should you vote?''' The U4C is a global group dedicated to providing an equitable and consistent implementation of the UCoC. Community input into the committee membership is critical to the success of the UCoC.
Please share this message with members of your community so they can participate as well.
In cooperation with the U4C,<section end="announcement-content" />
</div>
-- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 15:30, 6 An Lùnastal 2024 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=27183190 -->
== <span lang="en" dir="ltr">Coming soon: A new sub-referencing feature – try it!</span> ==
<div lang="en" dir="ltr">
<section begin="Sub-referencing"/>
[[File:Sub-referencing reuse visual.png|{{#ifeq:{{#dir}}|ltr|right|left}}|400px]]
Hello. For many years, community members have requested an easy way to re-use references with different details. Now, a MediaWiki solution is coming: The new sub-referencing feature will work for wikitext and Visual Editor and will enhance the existing reference system. You can continue to use different ways of referencing, but you will probably encounter sub-references in articles written by other users. More information on [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|the project page]].
'''We want your feedback''' to make sure this feature works well for you:
* [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#Test|Please try]] the current state of development on beta wiki and [[m:Talk:WMDE Technical Wishes/Sub-referencing|let us know what you think]].
* [[m:WMDE Technical Wishes/Sub-referencing/Sign-up|Sign up here]] to get updates and/or invites to participate in user research activities.
[[m:Special:MyLanguage/Wikimedia Deutschland|Wikimedia Deutschland]]’s [[m:Special:MyLanguage/WMDE Technical Wishes|Technical Wishes]] team is planning to bring this feature to Wikimedia wikis later this year. We will reach out to creators/maintainers of tools and templates related to references beforehand.
Please help us spread the message. --[[m:User:Johannes Richter (WMDE)|Johannes Richter (WMDE)]] ([[m:User talk:Johannes Richter (WMDE)|talk]]) 10:36, 19 August 2024 (UTC)
<section end="Sub-referencing"/>
</div>
<!-- Message sent by User:Johannes Richter (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johannes_Richter_(WMDE)/Sub-referencing/massmessage_list&oldid=27309345 -->
== Sign up for the language community meeting on August 30th, 15:00 UTC ==
Hi all,
The next language community meeting is scheduled in a few weeks—on August 30th at 15:00 UTC. If you're interested in joining, you can [https://www.mediawiki.org/wiki/Wikimedia_Language_and_Product_Localization/Community_meetings#30_August_2024 sign up on this wiki page].
This participant-driven meeting will focus on sharing language-specific updates related to various projects, discussing technical issues related to language wikis, and working together to find possible solutions. For example, in the last meeting, topics included the Language Converter, the state of language research, updates on the Incubator conversations, and technical challenges around external links not working with special characters on Bengali sites.
Do you have any ideas for topics to share technical updates or discuss challenges? Please add agenda items to the document [https://etherpad.wikimedia.org/p/language-community-meeting-aug-2024 here] and reach out to ssethi(__AT__)wikimedia.org. We look forward to your participation!
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 23:20, 22 An Lùnastal 2024 (UTC)
<!-- Message sent by User:SSethi (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=27183190 -->
== <span lang="en" dir="ltr">Announcing the Universal Code of Conduct Coordinating Committee</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
:''[https://lists.wikimedia.org/hyperkitty/list/board-elections@lists.wikimedia.org/thread/OKCCN2CANIH2K7DXJOL2GPVDFWL27R7C/ Original message at wikimedia-l]. [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement - results|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement - results}}&language=&action=page&filter= {{int:please-translate}}]''
Hello all,
The scrutineers have finished reviewing the vote and the [[m:Special:MyLanguage/Elections Committee|Elections Committee]] have certified the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Results|results]] for the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election|Universal Code of Conduct Coordinating Committee (U4C) special election]].
I am pleased to announce the following individual as regional members of the U4C, who will fulfill a term until 15 June 2026:
* North America (USA and Canada)
** Ajraddatz
The following seats were not filled during this special election:
* Latin America and Caribbean
* Central and East Europe (CEE)
* Sub-Saharan Africa
* South Asia
* The four remaining Community-At-Large seats
Thank you again to everyone who participated in this process and much appreciation to the candidates for your leadership and dedication to the Wikimedia movement and community.
Over the next few weeks, the U4C will begin meeting and planning the 2024-25 year in supporting the implementation and review of the UCoC and Enforcement Guidelines. You can follow their work on [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Meta-Wiki]].
On behalf of the U4C and the Elections Committee,<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] 14:07, 2 dhen t-Sultain 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=27183190 -->
== <span lang="en" dir="ltr">Have your say: Vote for the 2024 Board of Trustees!</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
Hello all,
The voting period for the [[m:Special:MyLanguage/Wikimedia Foundation elections/2024|2024 Board of Trustees election]] is now open. There are twelve (12) candidates running for four (4) seats on the Board.
Learn more about the candidates by [[m:Special:MyLanguage/Wikimedia Foundation elections/2024/Candidates|reading their statements]] and their [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2024/Questions_for_candidates|answers to community questions]].
When you are ready, go to the [[Special:SecurePoll/vote/400|SecurePoll]] voting page to vote. '''The vote is open from September 3rd at 00:00 UTC to September 17th at 23:59 UTC'''.
To check your voter eligibility, please visit the [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2024/Voter_eligibility_guidelines|voter eligibility page]].
Best regards,
The Elections Committee and Board Selection Working Group<section end="announcement-content" />
</div>
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 12:15, 3 dhen t-Sultain 2024 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=27183190 -->
== <span lang="en" dir="ltr">Your wiki will be in read-only soon</span> ==
<div lang="en" dir="ltr">
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] will switch the traffic between its data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster.
All traffic will switch on '''{{#time:j xg|2024-09-25|en}}'''. The switch will start at '''[https://zonestamp.toolforge.org/{{#time:U|2024-09-25T15:00|en}} {{#time:H:i e|2024-09-25T15:00}}]'''.
Unfortunately, because of some limitations in [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
A banner will be displayed on all wikis 30 minutes before this operation happens. This banner will remain visible until the end of the operation.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on {{#time:l j xg Y|2024-09-25|en}}.
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
* We expect the code deployments to happen as any other week. However, some case-by-case code freezes could punctually happen if the operation require them afterwards.
* [[mw:Special:MyLanguage/GitLab|GitLab]] will be unavailable for about 90 minutes.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule.
'''Please share this information with your community.'''</div><section end="server-switch"/>
</div>
[[User:Trizek_(WMF)|Trizek_(WMF)]], 09:37, 20 dhen t-Sultain 2024 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=27248326 -->
== 'Wikidata item' link is moving. Find out where... ==
<div lang="en" dir="ltr" class="mw-content-ltr"><i>Apologies for cross-posting in English. Please consider translating this message.</i>{{tracked|T66315}}
Hello everyone, a small change will soon be coming to the user-interface of your Wikimedia project.
The [[d:Q16222597|Wikidata item]] [[w:|sitelink]] currently found under the <span style="color: #54595d;"><u>''General''</u></span> section of the '''Tools''' sidebar menu will move into the <span style="color: #54595d;"><u>''In Other Projects''</u></span> section.
We would like the Wiki communities feedback so please let us know or ask questions on the [[m:Talk:Wikidata_For_Wikimedia_Projects/Projects/Move_Wikidata_item_link|Discussion page]] before we enable the change which can take place October 4 2024, circa 15:00 UTC+2.
More information can be found on [[m:Wikidata_For_Wikimedia_Projects/Projects/Move_Wikidata_item_link|the project page]].<br><br>We welcome your feedback and questions.<br> [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 18:56, 27 dhen t-Sultain 2024 (UTC)
</div>
<!-- Message sent by User:Danny Benjafield (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_Test_List&oldid=27524260 -->
== Invitation to Participate in Wiki Loves Ramadan Community Engagement Survey ==
Dear all,
Apologies for writing in English. Please help to translate in your language.
We are excited to announce the upcoming [[m:Wiki Loves Ramadan|Wiki Loves Ramadan]] event, a global initiative aimed at celebrating Ramadan by enriching Wikipedia and its sister projects with content related to this significant time of year. As we plan to organize this event globally, your insights and experiences are crucial in shaping the best possible participation experience for the community.
To ensure that Wiki Loves Ramadan is engaging, inclusive, and impactful, we kindly invite you to participate in our community engagement survey. Your feedback will help us understand the needs of the community, set the event's focus, and guide our strategies for organizing this global event.
Survey link: https://forms.gle/f66MuzjcPpwzVymu5
Please take a few minutes to share your thoughts. Your input will make a difference!
Thank you for being a part of our journey to make Wiki Loves Ramadan a success.
Warm regards,
User:ZI Jony 03:19, 6 dhen Dàmhair 2024 (UTC)
Wiki Loves Ramadan Organizing Team
<!-- Message sent by User:ZI Jony@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=27510935 -->
== <span lang="en" dir="ltr">Preliminary results of the 2024 Wikimedia Foundation Board of Trustees elections</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
Hello all,
Thank you to everyone who participated in the [[m:Special:MyLanguage/Wikimedia Foundation elections/2024|2024 Wikimedia Foundation Board of Trustees election]]. Close to 6000 community members from more than 180 wiki projects have voted.
The following four candidates were the most voted:
# [[User:Kritzolina|Christel Steigenberger]]
# [[User:Nadzik|Maciej Artur Nadzikiewicz]]
# [[User:Victoria|Victoria Doronina]]
# [[User:Laurentius|Lorenzo Losa]]
While these candidates have been ranked through the vote, they still need to be appointed to the Board of Trustees. They need to pass a successful background check and meet the qualifications outlined in the Bylaws. New trustees will be appointed at the next Board meeting in December 2024.
[[m:Special:MyLanguage/Wikimedia_Foundation_elections/2024/Results|Learn more about the results on Meta-Wiki.]]
Best regards,
The Elections Committee and Board Selection Working Group
<section end="announcement-content" />
</div>
[[User:MPossoupe_(WMF)|MPossoupe_(WMF)]] 08:26, 14 dhen Dàmhair 2024 (UTC)
<!-- Message sent by User:MPossoupe (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=27183190 -->
== <span lang="en" dir="ltr">Seeking volunteers to join several of the movement’s committees</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
Each year, typically from October through December, several of the movement’s committees seek new volunteers.
Read more about the committees on their Meta-wiki pages:
* [[m:Special:MyLanguage/Affiliations_Committee|Affiliations Committee (AffCom)]]
* [[m:Special:MyLanguage/Ombuds_commission|Ombuds commission (OC)]]
* [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Community Resilience and Sustainability/Trust and Safety/Case Review Committee|Case Review Committee (CRC)]]
Applications for the committees open on 16 October 2024. Applications for the Affiliations Committee close on 18 November 2024, and applications for the Ombuds commission and the Case Review Committee close on 2 December 2024. Learn how to apply by [[m:Special:MyLanguage/Wikimedia_Foundation/Legal/Committee_appointments|visiting the appointment page on Meta-wiki]]. Post to the talk page or email [mailto:cst@wikimedia.org cst@wikimedia.org] with any questions you may have.
For the Committee Support team,
<section end="announcement-content" />
</div>
-- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:09, 16 dhen Dàmhair 2024 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=27601062 -->
== 'Wikidata item' link is moving, finally. ==
Hello everyone, I previously wrote on the 27th September to advise that the ''Wikidata item'' sitelink will change places in the sidebar menu, moving from the '''General''' section into the '''In Other Projects''' section. The scheduled rollout date of 04.10.2024 was delayed due to a necessary request for Mobile/MinervaNeue skin. I am happy to inform that the global rollout can now proceed and will occur later today, 22.10.2024 at 15:00 UTC-2. [[m:Talk:Wikidata_For_Wikimedia_Projects/Projects/Move_Wikidata_item_link|Please let us know]] if you notice any problems or bugs after this change. There should be no need for null-edits or purging cache for the changes to occur. Kind regards, -[[m:User:Danny Benjafield (WMDE)|Danny Benjafield (WMDE)]] 11:28, 22 dhen Dàmhair 2024 (UTC)
<!-- Message sent by User:Danny Benjafield (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_Test_List&oldid=27535421 -->
== Final Reminder: Join us in Making Wiki Loves Ramadan Success ==
Dear all,
We’re thrilled to announce the Wiki Loves Ramadan event, a global initiative to celebrate Ramadan by enhancing Wikipedia and its sister projects with valuable content related to this special time of year. As we organize this event globally, we need your valuable input to make it a memorable experience for the community.
Last Call to Participate in Our Survey: To ensure that Wiki Loves Ramadan is inclusive and impactful, we kindly request you to complete our community engagement survey. Your feedback will shape the event’s focus and guide our organizing strategies to better meet community needs.
* Survey Link: [https://docs.google.com/forms/d/e/1FAIpQLSffN4prPtR5DRSq9nH-t1z8hG3jZFBbySrv32YoxV8KbTwxig/viewform?usp=sf_link Complete the Survey]
* Deadline: November 10, 2024
Please take a few minutes to share your thoughts. Your input will truly make a difference!
'''Volunteer Opportunity''': Join the Wiki Loves Ramadan Team! We’re seeking dedicated volunteers for key team roles essential to the success of this initiative. If you’re interested in volunteer roles, we invite you to apply.
* Application Link: [https://docs.google.com/forms/d/e/1FAIpQLSfXiox_eEDH4yJ0gxVBgtL7jPe41TINAWYtpNp1JHSk8zhdgw/viewform?usp=sf_link Apply Here]
* Application Deadline: October 31, 2024
Explore Open Positions: For a detailed list of roles and their responsibilities, please refer to the position descriptions here: [https://docs.google.com/document/d/1oy0_tilC6kow5GGf6cEuFvdFpekcubCqJlaxkxh-jT4/ Position Descriptions]
Thank you for being part of this journey. We look forward to working together to make Wiki Loves Ramadan a success!
Warm regards,<br>
The Wiki Loves Ramadan Organizing Team 05:11, 29 dhen Dàmhair 2024 (UTC)
<!-- Message sent by User:ZI Jony@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=27568454 -->
== Sign up for the language community meeting on November 29th, 16:00 UTC ==
Hello everyone,
The next language community meeting is coming up next week, on November 29th, at 16:00 UTC (Zonestamp! For your timezone <https://zonestamp.toolforge.org/1732896000>). If you're interested in joining, you can sign up on this wiki page: <https://www.mediawiki.org/wiki/Wikimedia_Language_and_Product_Localization/Community_meetings#29_November_2024>.
This participant-driven meeting will be organized by the Wikimedia Foundation’s Language Product Localization team and the Language Diversity Hub. There will be presentations on topics like developing language keyboards, the creation of the Moore Wikipedia, and the language support track at Wiki Indaba. We will also have members from the Wayuunaiki community joining us to share their experiences with the Incubator and as a new community within our movement. This meeting will have a Spanish interpretation.
Looking forward to seeing you at the language community meeting! Cheers, [[User:SSethi (WMF)|Srishti]] 19:55, 21 dhen t-Samhain 2024 (UTC)
<!-- Message sent by User:SSethi (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=27746256 -->
== Launching! Join Us for Wiki Loves Ramadan 2025! ==
Dear All,
We’re happy to announce the launch of [[m:Wiki Loves Ramadan 2025|Wiki Loves Ramadan 2025]], an annual international campaign dedicated to celebrating and preserving Islamic cultures and history through the power of Wikipedia. As an active contributor to the Local Wikipedia, you are specially invited to participate in the launch.
This year’s campaign will be launched for you to join us write, edit, and improve articles that showcase the richness and diversity of Islamic traditions, history, and culture.
* Topic: [[m:Event:Wiki Loves Ramadan 2025 Campaign Launch|Wiki Loves Ramadan 2025 Campaign Launch]]
* When: Jan 19, 2025
* Time: 16:00 Universal Time UTC and runs throughout Ramadan (starting February 25, 2025).
* Join Zoom Meeting: https://us02web.zoom.us/j/88420056597?pwd=NdrpqIhrwAVPeWB8FNb258n7qngqqo.1
* Zoom meeting hosted by [[m:Wikimedia Bangladesh|Wikimedia Bangladesh]]
To get started, visit the [[m:Wiki Loves Ramadan 2025|campaign page]] for details, resources, and guidelines: Wiki Loves Ramadan 2025.
Add [[m:Wiki Loves Ramadan 2025/Participant|your community here]], and organized Wiki Loves Ramadan 2025 in your local language.
Whether you’re a first-time editor or an experienced Wikipedian, your contributions matter. Together, we can ensure Islamic cultures and traditions are well-represented and accessible to all.
Feel free to invite your community and friends too. Kindly reach out if you have any questions or need support as you prepare to participate.
Let’s make Wiki Loves Ramadan 2025 a success!
For the [[m:Wiki Loves Ramadan 2025/Team|International Team]] 12:08, 16 dhen Fhaoilleach 2025 (UTC)
<!-- Message sent by User:ZI Jony@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=27568454 -->
== Universal Code of Conduct annual review: provide your comments on the UCoC and Enforcement Guidelines ==
<div lang="en" dir="ltr" class="mw-content-ltr">
My apologies for writing in English.
{{Int:Please-translate}}.
I am writing to you to let you know the annual review period for the Universal Code of Conduct and Enforcement Guidelines is open now. You can make suggestions for changes through 3 February 2025. This is the first step of several to be taken for the annual review.
[[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review|Read more information and find a conversation to join on the UCoC page on Meta]].
The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|you may review the U4C Charter]].
Please share this information with other members in your community wherever else might be appropriate.
-- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 01:12, 24 dhen Fhaoilleach 2025 (UTC)
</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=27746256 -->
== Reminder: first part of the annual UCoC review closes soon ==
<div lang="en" dir="ltr" class="mw-content-ltr">
My apologies for writing in English.
{{Int:Please-translate}}.
This is a reminder that the first phase of the annual review period for the Universal Code of Conduct and Enforcement Guidelines will be closing soon. You can make suggestions for changes through [[d:Q614092|the end of day]], 3 February 2025. This is the first step of several to be taken for the annual review.
[[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review|Read more information and find a conversation to join on the UCoC page on Meta]]. After review of the feedback, proposals for updated text will be published on Meta in March for another round of community review.
Please share this information with other members in your community wherever else might be appropriate.
-- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 00:49, 3 dhen Ghearran 2025 (UTC)
</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28198931 -->
== <span lang="en" dir="ltr"> Upcoming Language Community Meeting (Feb 28th, 14:00 UTC) and Newsletter</span> ==
<div lang="en" dir="ltr">
<section begin="message"/>
Hello everyone!
[[File:WP20Symbols WIKI INCUBATOR.svg|right|frameless|150x150px|alt=An image symbolising multiple languages]]
We’re excited to announce that the next '''Language Community Meeting''' is happening soon, '''February 28th at 14:00 UTC'''! If you’d like to join, simply sign up on the '''[[mw:Wikimedia_Language_and_Product_Localization/Community_meetings#28_February_2025|wiki page]]'''.
This is a participant-driven meeting where we share updates on language-related projects, discuss technical challenges in language wikis, and collaborate on solutions. In our last meeting, we covered topics like developing language keyboards, creating the Moore Wikipedia, and updates from the language support track at Wiki Indaba.
'''Got a topic to share?''' Whether it’s a technical update from your project, a challenge you need help with, or a request for interpretation support, we’d love to hear from you! Feel free to '''reply to this message''' or add agenda items to the document '''[[etherpad:p/language-community-meeting-feb-2025|here]]'''.
Also, we wanted to highlight that the sixth edition of the Language & Internationalization newsletter (January 2025) is available here: [[:mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/January|Wikimedia Language and Product Localization/Newsletter/2025/January]]. This newsletter provides updates from the October–December 2024 quarter on new feature development, improvements in various language-related technical projects and support efforts, details about community meetings, and ideas for contributing to projects. To stay updated, you can subscribe to the newsletter on its wiki page: [[:mw:Wikimedia Language and Product Localization/Newsletter|Wikimedia Language and Product Localization/Newsletter]].
We look forward to your ideas and participation at the language community meeting, see you there!
<section end="message"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 08:30, 22 dhen Ghearran 2025 (UTC)
<!-- Message sent by User:SSethi (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28217779 -->
== Universal Code of Conduct annual review: proposed changes are available for comment ==
<div lang="en" dir="ltr" class="mw-content-ltr">
My apologies for writing in English.
{{Int:Please-translate}}.
I am writing to you to let you know that [[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review/Proposed_Changes|proposed changes]] to the [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|Universal Code of Conduct (UCoC) Enforcement Guidelines]] and [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|Universal Code of Conduct Coordinating Committee (U4C) Charter]] are open for review. '''[[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review/Proposed_Changes|You can provide feedback on suggested changes]]''' through the [[d:Q614092|end of day]] on Tuesday, 18 March 2025. This is the second step in the annual review process, the final step will be community voting on the proposed changes.
[[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review|Read more information and find relevant links about the process on the UCoC annual review page on Meta]].
The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|you may review the U4C Charter]].
Please share this information with other members in your community wherever else might be appropriate.
-- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] 18:52, 7 dhen Mhàrt 2025 (UTC)
</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28307738 -->
== <span lang="en" dir="ltr">Your wiki will be in read-only soon</span> ==
<div lang="en" dir="ltr">
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] will switch the traffic between its data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster.
All traffic will switch on '''{{#time:j xg|2025-03-19|en}}'''. The switch will start at '''[https://zonestamp.toolforge.org/{{#time:U|2025-03-19T14:00|en}} {{#time:H:i e|2025-03-19T14:00}}]'''.
Unfortunately, because of some limitations in [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
A banner will be displayed on all wikis 30 minutes before this operation happens. This banner will remain visible until the end of the operation.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on {{#time:l j xg Y|2025-03-19|en}}.
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
* We expect the code deployments to happen as any other week. However, some case-by-case code freezes could punctually happen if the operation require them afterwards.
* [[mw:Special:MyLanguage/GitLab|GitLab]] will be unavailable for about 90 minutes.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule.
'''Please share this information with your community.'''</div><section end="server-switch"/>
</div>
<bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 23:14, 14 dhen Mhàrt 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=28307742 -->
== Final proposed modifications to the Universal Code of Conduct Enforcement Guidelines and U4C Charter now posted ==
<div lang="en" dir="ltr" class="mw-content-ltr">
The proposed modifications to the [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|Universal Code of Conduct Enforcement Guidelines]] and the U4C Charter [[m:Universal_Code_of_Conduct/Annual_review/2025/Proposed_Changes|are now on Meta-wiki for community notice]] in advance of the voting period. This final draft was developed from the previous two rounds of community review. Community members will be able to vote on these modifications starting on 17 April 2025. The vote will close on 1 May 2025, and results will be announced no later than 12 May 2025. The U4C election period, starting with a call for candidates, will open immediately following the announcement of the review results. More information will be posted on [[m:Special:MyLanguage//Universal_Code_of_Conduct/Coordinating_Committee/Election|the wiki page for the election]] soon.
Please be advised that this process will require more messages to be sent here over the next two months.
The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, you may [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|review the U4C Charter]].
Please share this message with members of your community so they can participate as well.
-- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 02:05, 4 dhen Ghiblean 2025 (UTC)
</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28469465 -->
== Wikidata and Sister Projects: An online community event ==
''(Apologies for posting in English)''
Hello everyone, I am excited to share news of an upcoming online event called '''[[d:Event:Wikidata_and_Sister_Projects|Wikidata and Sister Projects]]''' celebrating the different ways Wikidata can be used to support or enhance with another Wikimedia project. The event takes place over 4 days between '''May 29 - June 1st, 2025'''.
We would like to invite speakers to present at this community event, to hear success stories, challenges, showcase tools or projects you may be working on, where Wikidata has been involved in Wikipedia, Commons, WikiSource and all other WM projects.
If you are interested in attending, please [[d:Special:RegisterForEvent/1291|register here]].
If you would like to speak at the event, please fill out this Session Proposal template on the [[d:Event_talk:Wikidata_and_Sister_Projects|event talk page]], where you can also ask any questions you may have.
I hope to see you at the event, in the audience or as a speaker, - [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 09:18, 11 dhen Ghiblean 2025 (UTC)
<!-- Message sent by User:Danny Benjafield (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_Send_List&oldid=28525705 -->
== Vote now on the revised UCoC Enforcement Guidelines and U4C Charter ==
<div lang="en" dir="ltr" class="mw-content-ltr">
The voting period for the revisions to the Universal Code of Conduct Enforcement Guidelines ("UCoC EG") and the UCoC's Coordinating Committee Charter is open now through the end of 1 May (UTC) ([https://zonestamp.toolforge.org/1746162000 find in your time zone]). [[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review/2025/Voter_information|Read the information on how to participate and read over the proposal before voting]] on the UCoC page on Meta-wiki.
The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review of the EG and Charter was planned and implemented by the U4C. Further information will be provided in the coming months about the review of the UCoC itself. For more information and the responsibilities of the U4C, you may [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|review the U4C Charter]].
Please share this message with members of your community so they can participate as well.
In cooperation with the U4C -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 00:35, 17 dhen Ghiblean 2025 (UTC)
</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28469465 -->
== <span lang="en" dir="ltr">Vote on proposed modifications to the UCoC Enforcement Guidelines and U4C Charter</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
The voting period for the revisions to the Universal Code of Conduct Enforcement Guidelines and U4C Charter closes on 1 May 2025 at 23:59 UTC ([https://zonestamp.toolforge.org/1746162000 find in your time zone]). [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2025/Voter information|Read the information on how to participate and read over the proposal before voting]] on the UCoC page on Meta-wiki.
The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee (U4C)]] is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, you may [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|review the U4C Charter]].
Please share this message with members of your community in your language, as appropriate, so they can participate as well.
In cooperation with the U4C -- <section end="announcement-content" />
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
[[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 03:42, 29 dhen Ghiblean 2025 (UTC)</div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28618011 -->
== We will be enabling the new Charts extension on your wiki soon! ==
''(Apologies for posting in English)''
Hi all! We have good news to share regarding the ongoing problem with graphs and charts affecting all wikis that use them.
As you probably know, the [[:mw:Special:MyLanguage/Extension:Graph|old Graph extension]] was disabled in 2023 [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/EWL4AGBEZEDMNNFTM4FRD4MHOU3CVESO/|due to security reasons]]. We’ve worked in these two years to find a solution that could replace the old extension, and provide a safer and better solution to users who wanted to showcase graphs and charts in their articles. We therefore developed the [[:mw:Special:MyLanguage/Extension:Chart|Charts extension]], which will be replacing the old Graph extension and potentially also the [[:mw:Extension:EasyTimeline|EasyTimeline extension]].
After successfully deploying the extension on Italian, Swedish, and Hebrew Wikipedia, as well as on MediaWiki.org, as part of a pilot phase, we are now happy to announce that we are moving forward with the next phase of deployment, which will also include your wiki.
The deployment will happen in batches, and will start from '''May 6'''. Please, consult [[:mw:Special:MyLanguage/Extension:Chart/Project#Deployment Timeline|our page on MediaWiki.org]] to discover when the new Charts extension will be deployed on your wiki. You can also [[:mw:Special:MyLanguage/Extension:Chart|consult the documentation]] about the extension on MediaWiki.org.
If you have questions, need clarifications, or just want to express your opinion about it, please refer to the [[:mw:Special:MyLanguage/Extension_talk:Chart/Project|project’s talk page on Mediawiki.org]], or ping me directly under this thread. If you encounter issues using Charts once it gets enabled on your wiki, please report it on the [[:mw:Extension_talk:Chart/Project|talk page]] or at [[phab:tag/charts|Phabricator]].
Thank you in advance! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 15:07, 6 dhen Chèitean 2025 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=28663781 -->
== <span lang="en" dir="ltr">Call for Candidates for the Universal Code of Conduct Coordinating Committee (U4C)</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
The results of voting on the Universal Code of Conduct Enforcement Guidelines and Universal Code of Conduct Coordinating Committee (U4C) Charter is [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2025#Results|available on Meta-wiki]].
You may now [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2025/Candidates|submit your candidacy to serve on the U4C]] through 29 May 2025 at 12:00 UTC. Information about [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2025|eligibility, process, and the timeline are on Meta-wiki]]. Voting on candidates will open on 1 June 2025 and run for two weeks, closing on 15 June 2025 at 12:00 UTC.
If you have any questions, you can ask on [[m:Talk:Universal Code of Conduct/Coordinating Committee/Election/2025|the discussion page for the election]]. -- in cooperation with the U4C, </div><section end="announcement-content" />
</div>
<bdi lang="en" dir="ltr">[[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|deasbaireachd]])</bdi> 22:08, 15 dhen Chèitean 2025 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28618011 -->
== RfC ongoing regarding Abstract Wikipedia (and your project) ==
<div lang="en" dir="ltr" class="mw-content-ltr">
''(Apologies for posting in English, if this is not your first language)''
Hello all! We opened a discussion on Meta about a very delicate issue for the development of [[:m:Special:MyLanguage/Abstract Wikipedia|Abstract Wikipedia]]: where to store the abstract content that will be developed through functions from Wikifunctions and data from Wikidata. Since some of the hypothesis involve your project, we wanted to hear your thoughts too.
We want to make the decision process clear: we do not yet know which option we want to use, which is why we are consulting here. We will take the arguments from the Wikimedia communities into account, and we want to consult with the different communities and hear arguments that will help us with the decision. The decision will be made and communicated after the consultation period by the Foundation.
You can read the various hypothesis and have your say at [[:m:Abstract Wikipedia/Location of Abstract Content|Abstract Wikipedia/Location of Abstract Content]]. Thank you in advance! -- [[User:Sannita (WMF)|Sannita (WMF)]] ([[User talk:Sannita (WMF)|<span class="signature-talk">{{int:Talkpagelinktext}}</span>]]) 15:27, 22 dhen Chèitean 2025 (UTC)
</div>
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=28768453 -->
== <span lang="en" dir="ltr">Wikimedia Foundation Board of Trustees 2025 Selection & Call for Questions</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Selection announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Selection announcement}}&language=&action=page&filter= {{int:please-translate}}]''
Dear all,
This year, the term of 2 (two) Community- and Affiliate-selected Trustees on the Wikimedia Foundation Board of Trustees will come to an end [1]. The Board invites the whole movement to participate in this year’s selection process and vote to fill those seats.
The Elections Committee will oversee this process with support from Foundation staff [2]. The Governance Committee, composed of trustees who are not candidates in the 2025 community-and-affiliate-selected trustee selection process (Raju Narisetti, Shani Evenstein Sigalov, Lorenzo Losa, Kathy Collins, Victoria Doronina and Esra’a Al Shafei) [3], is tasked with providing Board oversight for the 2025 trustee selection process and for keeping the Board informed. More details on the roles of the Elections Committee, Board, and staff are here [4].
Here are the key planned dates:
* May 22 – June 5: Announcement (this communication) and call for questions period [6]
* June 17 – July 1, 2025: Call for candidates
* July 2025: If needed, affiliates vote to shortlist candidates if more than 10 apply [5]
* August 2025: Campaign period
* August – September 2025: Two-week community voting period
* October – November 2025: Background check of selected candidates
* Board’s Meeting in December 2025: New trustees seated
Learn more about the 2025 selection process - including the detailed timeline, the candidacy process, the campaign rules, and the voter eligibility criteria - on this Meta-wiki page [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2025|[link]]].
'''Call for Questions'''
In each selection process, the community has the opportunity to submit questions for the Board of Trustees candidates to answer. The Election Committee selects questions from the list developed by the community for the candidates to answer. Candidates must answer all the required questions in the application in order to be eligible; otherwise their application will be disqualified. This year, the Election Committee will select 5 questions for the candidates to answer. The selected questions may be a combination of what’s been submitted from the community, if they’re alike or related. [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2025/Questions_for_candidates|[link]]]
'''Election Volunteers'''
Another way to be involved with the 2025 selection process is to be an Election Volunteer. Election Volunteers are a bridge between the Elections Committee and their respective community. They help ensure their community is represented and mobilize them to vote. Learn more about the program and how to join on this Meta-wiki page [[m:Wikimedia_Foundation_elections/2025/Election_volunteers|[link].]]
Thank you!
[1] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2022/Results
[2] https://foundation.wikimedia.org/wiki/Committee:Elections_Committee_Charter
[3] https://foundation.wikimedia.org/wiki/Resolution:Committee_Membership,_December_2024
[4] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections_committee/Roles
[5] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2025/FAQ
[6] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2025/Questions_for_candidates
Best regards,
Victoria Doronina
Board Liaison to the Elections Committee
Governance Committee<section end="announcement-content" />
</div>
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 03:08, 28 dhen Chèitean 2025 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28618011 -->
== Vote now in the 2025 U4C Election ==
<div lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English.
{{Int:Please-translate}}
Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC].
Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 23:01, 13 dhen Ògmhios 2025 (UTC) </div>
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28848819 -->
== <span lang="en" dir="ltr">Wikimedia Foundation Board of Trustees 2025 - Call for Candidates</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
:''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div>
Hello all,
The [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|call for candidates for the 2025 Wikimedia Foundation Board of Trustees selection is now open]] from June 17, 2025 – July 2, 2025 at 11:59 UTC [1]. The Board of Trustees oversees the Wikimedia Foundation's work, and each Trustee serves a three-year term [2]. This is a volunteer position.
This year, the Wikimedia community will vote in late August through September 2025 to fill two (2) seats on the Foundation Board. Could you – or someone you know – be a good fit to join the Wikimedia Foundation's Board of Trustees? [3]
Learn more about what it takes to stand for these leadership positions and how to submit your candidacy on [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|this Meta-wiki page]] or encourage someone else to run in this year's election.
Best regards,
Abhishek Suryawanshi<br />
Chair of the Elections Committee
On behalf of the Elections Committee and Governance Committee
[1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates
[2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term.
[3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" />
</div>
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 17:44, 17 dhen Ògmhios 2025 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=28866958 -->
== <span lang="en" dir="ltr">Sister Projects Task Force reviews Wikispore and Wikinews</span> ==
<div lang="en" dir="ltr">
<section begin="message"/>
Dear Wikimedia Community,
The [[m:Wikimedia Foundation Community Affairs Committee|Community Affairs Committee (CAC)]] of the Wikimedia Foundation Board of Trustees assigned [[m:Wikimedia Foundation Community Affairs Committee/Sister Projects Task Force|the Sister Projects Task Force (SPTF)]] to update and implement a procedure for assessing the lifecycle of Sister Projects – wiki [[m:Wikimedia projects|projects supported by Wikimedia Foundation (WMF)]].
A vision of relevant, accessible, and impactful free knowledge has always guided the Wikimedia Movement. As the ecosystem of Wikimedia projects continues to evolve, it is crucial that we periodically review existing projects to ensure they still align with our goals and community capacity.
Despite their noble intent, some projects may no longer effectively serve their original purpose. '''Reviewing such projects is not about giving up – it's about responsible stewardship of shared resources'''. Volunteer time, staff support, infrastructure, and community attention are finite, and the non-technical costs tend to grow significantly as our ecosystem has entered a different age of the internet than the one we were founded in. Supporting inactive projects or projects that didn't meet our ambitions can unintentionally divert these resources from areas with more potential impact.
Moreover, maintaining projects that no longer reflect the quality and reliability of the Wikimedia name stands for, involves a reputational risk. An abandoned or less reliable project affects trust in the Wikimedia movement.
Lastly, '''failing to sunset or reimagine projects that are no longer working can make it much harder to start new ones'''. When the community feels bound to every past decision – no matter how outdated – we risk stagnation. A healthy ecosystem must allow for evolution, adaptation, and, when necessary, letting go. If we create the expectation that every project must exist indefinitely, we limit our ability to experiment and innovate.
Because of this, SPTF reviewed two requests concerning the lifecycle of the Sister Projects to work through and demonstrate the review process. We chose Wikispore as a case study for a possible new Sister Project opening and Wikinews as a case study for a review of an existing project. Preliminary findings were discussed with the CAC, and a community consultation on both proposals was recommended.
=== Wikispore ===
The [[m:Wikispore|application to consider Wikispore]] was submitted in 2019. SPTF decided to review this request in more depth because rather than being concentrated on a specific topic, as most of the proposals for the new Sister Projects are, Wikispore has the potential to nurture multiple start-up Sister Projects.
After careful consideration, the SPTF has decided '''not to recommend''' Wikispore as a Wikimedia Sister Project. Considering the current activity level, the current arrangement allows '''better flexibility''' and experimentation while WMF provides core infrastructural support.
We acknowledge the initiative's potential and seek community input on what would constitute a sufficient level of activity and engagement to reconsider its status in the future.
As part of the process, we shared the decision with the Wikispore community and invited one of its leaders, Pharos, to an SPTF meeting.
Currently, we especially invite feedback on measurable criteria indicating the project's readiness, such as contributor numbers, content volume, and sustained community support. This would clarify the criteria sufficient for opening a new Sister Project, including possible future Wikispore re-application. However, the numbers will always be a guide because any number can be gamed.
=== Wikinews ===
We chose to review Wikinews among existing Sister Projects because it is the one for which we have observed the highest level of concern in multiple ways.
Since the SPTF was convened in 2023, its members have asked for the community's opinions during conferences and community calls about Sister Projects that did not fulfil their promise in the Wikimedia movement.[https://commons.wikimedia.org/wiki/File:WCNA_2024._Sister_Projects_-_opening%3F_closing%3F_merging%3F_splitting%3F.pdf <nowiki>[1]</nowiki>][https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Community_Affairs_Committee/Sister_Projects_Task_Force#Wikimania_2023_session_%22Sister_Projects:_past,_present_and_the_glorious_future%22 <nowiki>[2]</nowiki>][https://meta.wikimedia.org/wiki/WikiConvention_francophone/2024/Programme/Quelle_proc%C3%A9dure_pour_ouvrir_ou_fermer_un_projet_%3F <nowiki>[3]</nowiki>] Wikinews was the leading candidate for an evaluation because people from multiple language communities proposed it. Additionally, by most measures, it is the least active Sister Project, with the greatest drop in activity over the years.
While the Language Committee routinely opens and closes language versions of the Sister Projects in small languages, there has never been a valid proposal to close Wikipedia in major languages or any project in English. This is not true for Wikinews, where there was a proposal to close English Wikinews, which gained some traction but did not result in any action[https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_English_Wikinews <nowiki>[4]</nowiki>][https://meta.wikimedia.org/wiki/WikiConvention_francophone/2024/Programme/Quelle_proc%C3%A9dure_pour_ouvrir_ou_fermer_un_projet_%3F <nowiki>[5]</nowiki>, see section 5] as well as a draft proposal to close all languages of Wikinews[https://meta.wikimedia.org/wiki/Talk:Proposals_for_closing_projects/Archive_2#Close_Wikinews_completely,_all_languages? <nowiki>[6]</nowiki>].
[[:c:File:Sister Projects Taskforce Wikinews review 2024.pdf|Initial metrics]] compiled by WMF staff also support the community's concerns about Wikinews.
Based on this report, SPTF recommends a community reevaluation of Wikinews. We conclude that its current structure and activity levels are the lowest among the existing sister projects. SPTF also recommends pausing the opening of new language editions while the consultation runs.
SPTF brings this analysis to a discussion and welcomes discussions of alternative outcomes, including potential restructuring efforts or integration with other Wikimedia initiatives.
'''Options''' mentioned so far (which might be applied to just low-activity languages or all languages) include but are not limited to:
*Restructure how Wikinews works and is linked to other current events efforts on the projects,
*Merge the content of Wikinews into the relevant language Wikipedias, possibly in a new namespace,
*Merge content into compatibly licensed external projects,
*Archive Wikinews projects.
Your insights and perspectives are invaluable in shaping the future of these projects. We encourage all interested community members to share their thoughts on the relevant discussion pages or through other designated feedback channels.
=== Feedback and next steps ===
We'd be grateful if you want to take part in a conversation on the future of these projects and the review process. We are setting up two different project pages: [[m:Public consultation about Wikispore|Public consultation about Wikispore]] and [[m:Public consultation about Wikinews|Public consultation about Wikinews]]. Please participate between 27 June 2025 and 27 July 2025, after which we will summarize the discussion to move forward. You can write in your own language.
I will also host a community conversation 16th July Wednesday 11.00 UTC and 17th July Thursday 17.00 UTC (call links to follow shortly) and will be around at Wikimania for more discussions.
<section end="message"/>
</div>
-- [[User:Victoria|Victoria]] on behalf of the Sister Project Task Force, 20:57, 27 dhen Ògmhios 2025 (UTC)
<!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/Sister_project_MassMassage_on_behalf_of_Victoria/Target_list&oldid=28911188 -->
== Wikidata Item and Property labels soon displayed in Wiki Watchlist/Recent Changes ==
''(Apologies for posting in English, you can help by translating into your language)''
Hello everyone, the [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Resolve_Labels|Wikidata For Wikimedia Projects]] team is excited to announce an upcoming change in how Wikidata edit changelogs are displayed in your [[Special:Watchlist|Watchlists]] and [[Special:RecentChanges|Recent Changes]] lists. If an edit is made on Wikidata that affects a page in another Wikimedia Project, the changelog will contain some information about the nature of the edit. This can include a QID (or Q-number), a PID (or P-number) and a value (which can be text, numbers, dates, or also QID or PID’s). Confused by these terms? See the [[d:Special:MyLanguage/Wikidata:Glossary|Wikidata:Glossary]] for further explanations.
The upcoming change is scheduled for '''17.07.2025''', between '''1300 - 1500 UTC'''.
The change will display the label (item name) alongside any QID or PIDs, as seen in the image below:
[[File:Apr10 edit summary on Wikidata.png|An edit sum entry on Wikidata, labels display alongside their P- and Q-no.'s]]
These changes will only be visible if you have Wikidata edits enabled in your User Preferences for Watchlists and Recent Changes, or have the active filter ‘Wikidata edits’ checkbox toggled on, directly on the Watchlist and Recent Changes pages.
Your bot and gadget may be affected! There are thousands of bots, gadgets and user-scripts and whilst we have researched potential effects to many of them, we cannot guarantee there won’t be some that are broken or affected by this change.
Further information and context about this change, including how your bot may be affected can be found on this [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Resolve_Labels|project task page]]. We welcome your questions and feedback, please write to us on this dedicated [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Resolve_Labels|Talk page]].
Thank you, - [[m:User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] on behalf of the Wikidata For Wikimedia Projects Team. [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 12:46, 14 dhen Iuchar 2025 (UTC)
<!-- Message sent by User:Danny Benjafield (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_Test_List&oldid=28981877 -->
== <span lang="en" dir="ltr">Temporary accounts will be rolled out soon</span> ==
<div lang="en" dir="ltr">
<section begin="body"/>
Hello, we are the Wikimedia Foundation [[mw:Special:MyLanguage/Product Safety and Integrity|Product Safety and Integrity]] team. We would like to announce that '''we plan to enable [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] for this wiki in the week of September 1'''.
Temporary accounts are successfully live on 30 wikis, including many large ones like German, Japanese, and French. The change they bring is especially relevant to logged-out editors, who this feature is designed to protect. But it is also relevant to community members like mentors, patrollers, and admins – anyone who reverts edits, blocks users, or otherwise interacts with logged-out editors as part of keeping the wikis safe and accurate.
'''Why we are building temporary accounts'''
Our wikis should be safer to edit by default for logged-out editors. Temporary accounts allow people to continue editing the wikis without creating an account, while avoiding publicly tying their edits to their IP address. We believe this is in the best interest of our logged-out editors, who make valuable contributions to the wikis and who may later create accounts and grow our community of editors, admins, and other roles. Even though the wikis do warn logged-out editors that their IP address will be associated with their edit, many people may not understand what an IP address is, or that it could be used to connect them to other information about them in ways they might not expect.
Additionally, our moderation software and tools rely too heavily on network origin (IP addresses) to identify users and patterns of activity, especially as IP addresses themselves are becoming less stable as identifiers. Temporary accounts allow for more precise interactions with logged-out editors, including more precise blocks, and can help limit how often we unintentionally end up blocking good-faith users who use the same IP addresses as bad-faith users.
'''How temporary accounts work'''
[[File:Temporary account banner and empty talk page.png|thumb]]
Any time a logged-out user publishes an edit on this wiki, a cookie will be set in this user's browser, and a temporary account tied with this cookie will be automatically created. This account's name will follow the pattern: <code dir=ltr>~2025-12345-67</code> (a tilde, current year, a number). On pages like Recent Changes or page history, this name will be displayed. The cookie will expire 90 days after its creation. As long as it exists, all edits made from this device will be attributed to this temporary account. It will be the same account even if the IP address changes, unless the user clears their cookies or uses a different device or web browser. A record of the IP address used at the time of each edit will be stored for 90 days after the edit. However, only some logged-in users will be able to see it.
'''What does this mean for different groups of users?'''
'''For logged-out editors'''
* This increases privacy: currently, if you do not use a registered account to edit, then everybody can see the IP address for the edits you made, even after 90 days. That will no longer be possible on this wiki.
* If you use a temporary account to edit from different locations in the last 90 days (for example at home and at a coffee shop), the edit history and the IP addresses for all those locations will now be recorded together, for the same temporary account. Users who [[foundation:Special:MyLanguage/Policy:Access_to_temporary_account_IP_addresses|meet the relevant requirements]] will be able to view this data. If this creates any personal security concerns for you, please contact talktohumanrights at wikimedia.org for advice.
'''For community members interacting with logged-out editors'''
* A temporary account is uniquely linked to a device. In comparison, an IP address can be shared with different devices and people (for example, different people at school or at work might have the same IP address).
* Compared to the current situation, it will be safer to assume that a temporary user's talk page belongs to only one person, and messages left there will be read by them. As you can see in the screenshot, temporary account users will receive notifications. It will also be possible to thank them for their edits, ping them in discussions, and invite them to get more involved in the community.
'''For users who use IP address data to moderate and maintain the wiki'''
* '''For patrollers''' who track persistent abusers, investigate violations of policies, etc.: Users who [[foundation:Special:MyLanguage/Policy:Access_to_temporary_account_IP_addresses|meet the requirements]] will be able to reveal temporary users' IP addresses and all contributions made by temporary accounts from a specific IP address or range ([[Special:IPContributions]]). They will also have access to useful information about the IP addresses thanks to the [[mw:Special:MyLanguage/Trust and Safety Product/IP Info|IP Info]] feature. Many other pieces of software have been built or adjusted to work with temporary accounts, including AbuseFilter, global blocks, Global User Contributions, and more. (For information for volunteer developers on how to update the code of your tools – see the last part of the message.)
* '''For admins blocking logged-out editors''':
** It will be possible to block many abusers by just blocking their temporary accounts. A blocked person won't be able to create new temporary accounts quickly if the admin selects the [[mw:Special:MyLanguage/Autoblock|autoblock]] option.
** It will still be possible to block an IP address or IP range.
* Temporary accounts will not be retroactively applied to contributions made before the deployment. On Special:Contributions, you will be able to see existing IP user contributions, but not new contributions made by temporary accounts on that IP address. Instead, you should use Special:IPContributions for this.
'''Our requests for you, and next steps'''
* If you know of any tools, bots, gadgets etc. using data about IP addresses or being available for logged-out users, you may want to test if they work on [[testwiki:Main_Page|testwiki]] or [[test2wiki:Main_Page|test2wiki]]. If you are a volunteer developer, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|read our documentation for developers]], and in particular, the section on [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers#How should I update my code?|how your code might need to be updated]].
* If you want to test the temporary account experience, for example just to check what it feels like, go to testwiki or test2wiki and edit without logging in.
* Tell us if you know of any difficulties that need to be addressed. We will try to help, and if we are not able, we will consider the available options.
* Look at our [[m:Meta:Babel#Temporary_Accounts:_access_to_IP_addresses_and_next_steps|previous message]] about requirements for users without extended rights who may need access to IP addresses.
To learn more about the project, check out [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/FAQ|our FAQ]] – you will find many useful answers there. You may also [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|look at the updates]] (we have just posted one) and [[mw:Newsletter:Product Safety and Integrity|subscribe to our new newsletter]]. If you'd like to talk to me (Szymon) off-wiki, you will find me on Discord and Telegram. Thank you!<section end="body" />
</div>
<bdi lang="en" dir="ltr">[[m:user:NKohli (WMF)|NKohli (WMF)]], [[m:user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]]</bdi> 21:37, 26 An Lùnastal 2025 (UTC)
<!-- Message sent by User:Quiddity (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Quiddity_(WMF)/sandbox6&oldid=29181713 -->
== <span lang="en" dir="ltr">Server switch - Your wiki will be read-only for a short time soon</span> ==
<div lang="en" dir="ltr">
<section begin="server-switch"/><div class="plainlinks">
[[:m:Special:MyLanguage/Tech/Server switch|Read this message in another language]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}]
The [[foundation:|Wikimedia Foundation]] will switch the traffic between its data centers. This will make sure that Wikipedia and the other Wikimedia wikis can stay online even after a disaster.
All traffic will switch on '''{{#time:j xg|2025-09-24|en}}'''. The switch will start at '''[https://zonestamp.toolforge.org/{{#time:U|2025-09-24T15:00|en}} {{#time:H:i e|2025-09-24T15:00}}]'''.
Unfortunately, because of some limitations in [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], all editing must stop while the switch is made. We apologize for this disruption, and we are working to minimize it in the future.
A banner will be displayed on all wikis 30 minutes before this operation happens. This banner will remain visible until the end of the operation.
You can contribute to the [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate translation or proofreading] of this banner text.
'''You will be able to read, but not edit, all wikis for a short period of time.'''
*You will not be able to edit for up to an hour on {{#time:l j xg Y|2025-09-24|en}}.
*If you try to edit or save during these times, you will see an error message. We hope that no edits will be lost during these minutes, but we can't guarantee it. If you see the error message, then please wait until everything is back to normal. Then you should be able to save your edit. But, we recommend that you make a copy of your changes first, just in case.
''Other effects'':
*Background jobs will be slower and some may be dropped. Red links might not be updated as quickly as normal. If you create an article that is already linked somewhere else, the link will stay red longer than usual. Some long-running scripts will have to be stopped.
* We expect the code deployments to happen as any other week. However, some case-by-case code freezes could punctually happen if the operation require them afterwards.
* [[mw:Special:MyLanguage/GitLab|GitLab]] will be unavailable for about 90 minutes.
This project may be postponed if necessary. You can [[wikitech:Switch_Datacenter|read the schedule at wikitech.wikimedia.org]]. Any changes will be announced in the schedule.
'''Please share this information with your community.'''</div><section end="server-switch"/>
</div>
<span dir=ltr>[[m:User:Trizek (WMF)|Trizek (WMF)]] ([[m:User talk:Trizek (WMF)|{{int:talk}}]])</span> 15:41, 18 dhen t-Sultain 2025 (UTC)
<!-- Message sent by User:Trizek (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29170715 -->
== <span lang="en" dir="ltr">Have your say: vote for the 2025 Board of Trustees</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
Hello all,
The voting period for the [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|2025 Board of Trustees election]] is now open. Candidates are running for two (2) seats on the Board.
To check your voter eligibility, please visit the [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Voter eligibility guidelines|voter eligibility page]].
Learn more about them by [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidates|reading their application statements and watch their candidacy videos]].
When you are ready, go to the [[m:Special:SecurePoll/vote/405|SecurePoll voting page to vote]].
'''The vote is open from October 8 at 00:00 UTC to October 22 at 23:59 UTC.'''
Best regards,
Abhishek Suryawanshi<br />Chair, Elections Committee<section end="announcement-content" />
</div>
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 04:49, 9 dhen Dàmhair 2025 (UTC)
<!-- Message sent by User:RamzyM (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29360896 -->
== <span lang="en" dir="ltr">Help us decide the name of the new Abstract Wikipedia project</span> ==
<div lang="en" dir="ltr">
<section begin="function1"/>
{{int:Hello}}. Please help pick a name for the new Abstract Wikipedia wiki project. This project will be a wiki that will enable users to combine functions from [[:f:|Wikifunctions]] and data from Wikidata in order to generate natural language sentences in any supported languages. These sentences can then be used by any Wikipedia (or elsewhere).
There will be two rounds of voting, each followed by legal review of candidates, with votes beginning on 20 October and 17 November 2025. Our goal is to have a final project name selected on mid-December 2025. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Abstract Wikipedia naming contest|please learn more and vote now]]''' at meta-wiki.
{{Int:Feedback-thanks-title}}
<section end="function1"/>
</div>
-- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 11:44, 20 dhen Dàmhair 2025 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29432175 -->
== <span lang="en" dir="ltr">Seeking volunteers to join several of the movement’s committees</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
Each year, typically from October through December, several of the movement’s committees seek new volunteers.
Read more about the committees on their Meta-wiki pages:
* [[m:Special:MyLanguage/Affiliations Committee|Affiliations Committee (AffCom)]]
* [[m:Special:MyLanguage/Ombuds commission|Ombuds commission (OC)]]
* [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Community Resilience and Sustainability/Trust and Safety/Case Review Committee|Case Review Committee (CRC)]]
Applications for the committees open on October 30, 2025. Applications for the Affiliations Committee, Ombuds commission and the Case Review Committee close on December 11, 2025. Learn how to apply by [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Committee appointments|visiting the appointment page on Meta-wiki]]. Post to the talk page or email cst[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org with any questions you may have.
For the Committee Support team,
<section end="announcement-content" />
</div>
-[[m:User:MKaur (WMF)| MKaur (WMF)]] 14:13, 30 dhen Dàmhair 2025 (UTC)
<!-- Message sent by User:MKaur (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29517125 -->
== <span lang="en" dir="ltr">Reminder: Help us decide the name of the new Abstract Wikipedia project</span> ==
<div lang="en" dir="ltr">
<section begin="function2"/>
{{int:Hello}}. Reminder: Please help to choose name for the new Abstract Wikipedia wiki project. The finalist vote starts today. The finalists for the name are: <span lang="en" dir="ltr" class="mw-content-ltr">Abstract Wikipedia, Multilingual Wikipedia, Wikiabstracts, Wikigenerator, Proto-Wiki</span>. If you would like to participate, then '''[[m:Special:MyLanguage/Abstract Wikipedia/Abstract Wikipedia naming contest|please learn more and vote now]]''' at meta-wiki.
{{Int:Feedback-thanks-title}}
<section end="function2"/>
</div>
-- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 14:23, 20 dhen t-Samhain 2025 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29583860 -->
== Thank You for Last Year – Join Wiki Loves Ramadan 2026 ==
Dear Wikimedia communities,
We hope you are doing well, and we wish you a happy New Year.
''Last year, we captured light. This year, we’ll capture legacy.''
In 2025, communities around the world shared the glow of Ramadan nights and the warmth of collective iftars. In 2026, ''Wiki Loves Ramadan'' is expanding, bringing more stories, more cultures, and deeper global connections across Wikimedia projects.
We invite you to explore the ''Wiki Loves Ramadan 2026'' [[m:Special:MyLanguage/Wiki Loves Ramadan 2026|Meta page]] to learn how you can participate and [[m:Special:MyLanguage/Wiki Loves Ramadan 2026/Participating communities|sign up]] your community.
📷 ''Photo campaign on '' [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan 2026|Wikimedia Commons]]
If you have questions about the project, please refer to the FAQs:
* [[m:Special:MyLanguage/Wiki Loves Ramadan/FAQ/|Meta-Wiki]]
* [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan/FAQ|Wikimedia Commons]]
''Early registration for updates is now open via the '''[[m:Special:RegisterForEvent/2710|Event page]]'''''
''Stay connected and receive updates:''
* [https://t.me/WikiLovesRamadan Telegram channel]
* [https://lists.wikimedia.org/postorius/lists/wikilovesramadan.lists.wikimedia.org/ Mailing list]
We look forward to collaborating with you and your community.
'''The Wiki Loves Ramadan 2026 Organizing Team''' 19:45, 16 dhen Fhaoilleach 2026 (UTC)
<!-- Message sent by User:ZI Jony@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29879549 -->
== <span lang="en" dir="ltr">Annual review of the Universal Code of Conduct and Enforcement Guidelines</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
I am writing to you to let you know the annual review period for the Universal Code of Conduct and Enforcement Guidelines is open now. You can make suggestions for changes through 9 February 2026. This is the first step of several to be taken for the annual review. [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2026|Read more information and find a conversation to join on the UCoC page on Meta]].
The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|you may review the U4C Charter]].
Please share this information with other members in your community wherever else might be appropriate.
-- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]])<section end="announcement-content" />
</div>
21:02, 19 dhen Fhaoilleach 2026 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29905753 -->
== Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) ==
Hello everyone,
This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>).
'''The Change:'''<br />
Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]].
We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''.
'''What You Need To Do:'''<br />
To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search.
'''Deadline:'''<br />
We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles.
Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 17:11, 3 dhen Ghiblean 2026 (UTC)
<!-- Message sent by User:ZI Jony@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 -->
== Request for comment (global AI policy) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English. {{int:Please-translate}}
A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}}
[[Cleachdaiche:MediaWiki message delivery|MediaWiki message delivery]] ([[Deasbaireachd a' chleachdaiche:MediaWiki message delivery|an deasbaireachd]]) 00:58, 26 dhen Ghiblean 2026 (UTC)
</bdi>
<!-- Message sent by User:Codename Noreste@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 -->
== <span lang="en" dir="ltr">Vote now in the 2026 U4C election</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
Eligible voters are asked to participate in the 2026 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|2026 Election information page]]. The vote closes on 2 June 2026 at [https://zonestamp.toolforge.org/1780358400 00:00 UTC].
Please vote if your account is eligible. Results will be available by 14 June 2026. -- In cooperation with the U4C,<section end="announcement-content" />
</div>
[[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 17:15, 27 dhen Chèitean 2026 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== RFC about AI-generated content in Wikimedia Commons ==
<bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|deasbaireachd]])</bdi> 17:12, 23 dhen Ògmhios 2026 (UTC)
<!-- Message sent by User:Codename Noreste@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== <span lang="en" dir="ltr">Deployment of Legal and Safety Contacts Link in the Footer of Your Wiki</span> ==
<div lang="en" dir="ltr">
<section begin="Message"/>
'''Legal & Safety Contacts'''
Hello community, the Wikimedia Foundation has provided a [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|single legal and safety contact page]], to be linked in the footer of your wiki, to ensure access to accurate legal information. This is a regulatory requirement. We have already rolled out links to English, German, Italian, Spanish and other wikis and we will deploy to your wiki soon. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Please read more on the project page]] and leave any comments in this thread or on the [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|talk page]].
<section end="Message"/>
</div>
-- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 13:31, 25 dhen Ògmhios 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=30731267 -->
== Active editors/admins ==
Are there any still active admins/editors on this wiki? I've been adding/updating a lot of templates and lua modules on the English Wiktionary for Gaelic, and I was wondering if there was some way to import them into this one as well. [[Cleachdaiche:Altronic|Altronic]] ([[Deasbaireachd a' chleachdaiche:Altronic|an deasbaireachd]]) 15:20, 25 dhen Ògmhios 2026 (UTC)
== Request for adminship - Altronic ==
I am an active contributor on the English Wiktionary for Scottish Gaelic and Irish, and have been creating and updating entries, templates and lua modules on there, and want to import them to here and update the already existing lua modules. As the previous topic I posted got no response and the last admin ([[User:Kibi78704]]) seems to be no longer active, having no activity for over 5 years, I would like to become an admin on here in order to more effectively contribute all of these to the Wiki.
If anyone on here has any objections, leave them in a comment here. I'll also go and make a request at the WikiMedia request page. https://meta.wikimedia.org/wiki/Steward_requests/Permissions [[Cleachdaiche:Altronic|Altronic]] ([[Deasbaireachd a' chleachdaiche:Altronic|an deasbaireachd]]) 06:31, 14 dhen Iuchar 2026 (UTC)
== Importer rights ==
Also requesting getting importer rights. Leave a comment if you object to this. [[Cleachdaiche:Altronic|Altronic]] ([[Deasbaireachd a' chleachdaiche:Altronic|an deasbaireachd]]) 11:08, 23 dhen Iuchar 2026 (UTC)
qz66cyk26xs6aozgscbzgoqub0bt2x6
Teamplaid:IPA
10
3339
86248
74313
2026-07-21T22:51:55Z
Altronic
4137
Chaidh "{{#invoke:IPA/templates|IPA}}<noinclude>{{documentation}}</noinclude>" a chur an àite na susbaint
86248
wikitext
text/x-wiki
{{#invoke:IPA/templates|IPA}}<noinclude>{{documentation}}</noinclude>
89vo0lipntiooai0iqj2f5iydncvruz
Mòideal:languages
828
3584
86202
70763
2026-07-21T10:58:22Z
Altronic
4137
Copy from English Wiktionary
86202
Scribunto
text/plain
--[==[ intro:
This module implements fetching of language-specific information and processing text in a given language.
===Types of languages===
There are two types of languages: full languages and etymology-only languages. The essential difference is that only
full languages appear in L2 headings in vocabulary entries, and hence categories like [[:Category:French nouns]] exist
only for full languages. Etymology-only languages have either a full language or another etymology-only language as
their parent (in the parent-child inheritance sense), and for etymology-only languages with another etymology-only
language as their parent, a full language can always be derived by following the parent links upwards. For example,
"Canadian French", code `fr-CA`, is an etymology-only language whose parent is the full language "French", code `fr`.
An example of an etymology-only language with another etymology-only parent is "Northumbrian Old English", code
`ang-nor`, which has "Anglian Old English", code `ang-ang` as its parent; this is an etymology-only language whose
parent is "Old English", code `ang`, which is a full language. (This is because Northumbrian Old English is considered
a variety of Anglian Old English.) Sometimes the parent is the "Undetermined" language, code `und`; this is the case,
for example, for "substrate" languages such as "Pre-Greek", code `qsb-grc`, and "the BMAC substrate", code `qsb-bma`.
It is important to distinguish language ''parents'' from language ''ancestors''. The parent-child relationship is one
of containment, i.e. if X is a child of Y, X is considered a variety of Y. On the other hand, the ancestor-descendant
relationship is one of descent in time. For example, "Classical Latin", code `la-cla`, and "Late Latin", code `la-lat`,
are both etymology-only languages with "Latin", code `la`, as their parents, because both of the former are varieties
of Latin. However, Late Latin does *NOT* have Classical Latin as its parent because Late Latin is *not* a variety of
Classical Latin; rather, it is a descendant. There is in fact a separate `ancestors` field that is used to express the
ancestor-descendant relationship, and Late Latin's ancestor is given as Classical Latin. It is also important to note
that sometimes an etymology-only language is actually the conceptual ancestor of its parent language. This happens,
for example, with "Old Italian" (code `roa-oit`), which is an etymology-only variant of full language "Italian" (code
`it`), and with "Old Latin" (code `itc-ola`), which is an etymology-only variant of Latin. In both cases, the full
language has the etymology-only variant listed as an ancestor. This allows a Latin term to inherit from Old Latin
using the {{tl|inh}} template (where in this template, "inheritance" refers to ancestral inheritance, i.e. inheritance
in time, rather than in the parent-child sense); likewise for Italian and Old Italian.
Full languages come in three subtypes:
* {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted in the
main namespace. There may also be reconstructed terms for the language, which are placed in the
{Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full languages
are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto and Volapük,
among others) are also allowed in the mainspace and considered regular languages.
* {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the
{Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed with
*. Languages such as Proto-Indo-European and Proto-Germanic are in this category.
* {appendix-constructed}: This language is attested but does not meet the additional requirements set out for
constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore be in
the Appendix namespace, but they are not reconstructed and therefore should not have *
prefixed in links. Most constructed languages are of this subtype.
Both full languages and etymology-only languages have a {Language} object associated with them, which is fetched using
the {getByCode} function in [[Module:languages]] to convert a language code to a {Language} object. Depending on the
options supplied to this function, etymology-only languages may or may not be accepted, and family codes may be
accepted (returning a {Family} object as described in [[Module:families]]). There are also separate {getByCanonicalName}
functions in [[Module:languages]] and [[Module:etymology languages]] to convert a language's canonical name to a
{Language} object (depending on whether the canonical name refers to a full or etymology-only language).
===Textual representations===
Textual strings belonging to a given language come in several different ''text variants'':
# The ''input text'' is what the user supplies in wikitext, in the parameters to {{tl|m}}, {{tl|l}}, {{tl|ux}},
{{tl|t}}, {{tl|lang}} and the like.
# The ''corrected input text'' is the input text with some corrections and/or normalizations applied, such as
bad-character replacements for certain languages, like replacing `l` or `1` to [[palochka]] in some languages written
in Cyrillic. (FIXME: This currently goes under the name ''display text'' but that will be repurposed below. Also,
[[User:Surjection]] suggests renaming this to ''normalized input text'', but "normalized" is used in a different sense
in [[Module:usex]].)
# The ''display text'' is the text in the form as it will be displayed to the user. This is what appears in headwords,
in usexes, in displayed internal links, etc. This can include accent marks that are removed to form the stripped
display text (see below), as well as embedded bracketed links that are variously processed further. The display text
is generated from the corrected input text by applying language-specific transformations; for most languages, there
will be no such transformations. The general reason for having a difference between input and display text is to allow
for extra information in the input text that is not displayed to the user but is sent to the transliteration module.
Note that having different display and input text is only supported currently through special-casing but will be
generalized. Examples of transformations are: (1) Removing the {{cd|^}} that is used in certain East Asian (and
possibly other unicameral) languages to indicate capitalization of the transliteration (which is currently
special-cased); (2) for Korean, removing or otherwise processing hyphens (which is currently special-cased); (3) for
Arabic, removing a ''sukūn'' diacritic placed over a ''tāʔ marbūṭa'' (like this: ةْ) to indicate that the
''tāʔ marbūṭa'' is pronounced and transliterated as /t/ instead of being silent [NOTE, NOT IMPLEMENTED YET]; (4) for
Thai and Khmer, converting space-separated words to bracketed words and resolving respelling substitutions such as
`[กรีน/กฺรีน]`, which indicate how to transliterate given words [NOTE, NOT IMPLEMENTED YET except in language-specific
templates like {{tl|th-usex}}].
## The ''right-resolved display text'' is the result of removing brackets around one-part embedded links and resolving
two-part embedded links into their right-hand components (i.e. converting two-part links into the displayed form).
The process of right-resolution is what happens when you call {{cd|remove_links()}} in [[Module:links]] on some text.
When applied to the display text, it produces exactly what the user sees, without any link markup.
# The ''stripped display text'' is the result of applying diacritic-stripping to the display text.
## The ''left-resolved stripped display text'' [NEED BETTER NAME] is the result of applying left-resolution to the
stripped display text, i.e. similar to right-resolution but resolving two-part embedded links into their left-hand
components (i.e. the linked-to page). If the display text refers to a single page, the resulting of applying
diacritic stripping and left-resolution produces the ''logical pagename''.
# The ''physical pagename text'' is the result of converting the stripped display text into physical page links. If the
stripped display text contains embedded links, the left side of those links is converted into physical page links;
otherwise, the entire text is considered a pagename and converted in the same fashion. The conversion does three
things: (1) converts characters not allowed in pagenames into their "unsupported title" representation, e.g.
{{cd|Unsupported titles/`gt`}} in place of the logical name {{cd|>}}; (2) handles certain special-cased
unsupported-title logical pagenames, such as {{cd|Unsupported titles/Space}} in place of {{cd|[space]}} and
{{cd|Unsupported titles/Ancient Greek dish}} in place of a very long Greek name for a gourmet dish as found in
Aristophanes; (3) converts "mammoth" pagenames such as [[a]] into their appropriate split component, e.g.
[[a/languages A to L]].
# The ''source translit text'' is the text as supplied to the language-specific {{cd|transliterate()}} method. The form
of the source translit text may need to be language-specific, e.g Thai and Khmer will need the corrected input text,
whereas other languages may need to work off the display text. [FIXME: It's still unclear to me how embedded bracketed
links are handled in the existing code.] In general, embedded links need to be right-resolved (see above), but when
this happens is unclear to me [FIXME]. Some languages have a chop-up-and-paste-together scheme that sends parts of the
text through the transliterate mechanism, and for others (those listed with "cont" in {{cd|substitution}} in
[[Module:languages/data]]) they receive the full input text, but preprocessed in certain ways. (The wisdom of this is
still unclear to me.)
# The ''transliterated text'' (or ''transliteration'') is the result of transliterating the source translit text. Unlike
for all the other text variants except the transcribed text, it is always in the Latin script.
# The ''transcribed text'' (or ''transcription'') is the result of transcribing the source translit text, where
"transcription" here means a close approximation to the phonetic form of the language in languages (e.g. Akkadian,
Sumerian, Ancient Egyptian, maybe Tibetan) that have a wide difference between the written letters and spoken form.
Unlike for all the other text variants other than the transliterated text, it is always in the Latin script.
Currently, the transcribed text is always supplied manually be the user; there is no such thing as a
{{cd|transcribe()}} method on language objects.
# The ''sort key'' is the text used in sort keys for determining the placing of pages in categories they belong to. The
sort key is generated from the pagename or a specified ''sort base'' by lowercasing, doing language-specific
transformations and then uppercasing the result. If the sort base is supplied and is generated from input text, it
needs to be converted to display text, have embedded links removed through right-resolution and have
diacritic-stripping applied.
# There are other text variants that occur in usexes (specifically, there are normalized variants of several of the
above text variants), but we can skip them for now.
The following methods exist on {Language} objects to convert between different text variants:
# {correctInputText} (currently called {makeDisplayText}): This converts input text to corrected input text.
# {stripDiacritics}: This converts to stripped display text. [FIXME: This needs some rethinking. In particular,
{stripDiacritics} is sometimes called on input text, corrected input text or display text (in various paths inside of
[[Module:links]], and, in the case of input text, usually from other modules). We need to make sure we don't try to
convert input text to display text twice, but at the same time we need to support calling it directly on input text
since so many modules do this. This means we need to add a parameter indicating whether the passed-in text is input,
corrected input, or display text; if the former two, we call {correctInputText} ourselves.]
# {logicalToPhysical}: This converts logical pagenames to physical pagenames.
# {transliterate}: This appears to convert input text with embedded brackets removed into a transliteration.
[FIXME: This needs some rethinking. In particular, it calls {processDisplayText} on its input, which won't work
for Thai and Khmer, so we may need language-specific flags indicating whether to pass the input text directly to the
language transliterate method. In addition, I'm not sure how embedded links are handled in the existing translit code;
a lot of callers remove the links themselves before calling {transliterate()}, which I assume is wrong.]
# {makeSortKey}: This converts display text (?) to a sort key. [FIXME: Clarify this.]
]==]
local export = {}
local debug_track_module = "Module:debug/track"
local etymology_languages_data_module = "Module:etymology languages/data"
local families_module = "Module:families"
local headword_page_module = "Module:headword/page"
local json_module = "Module:JSON"
local language_like_module = "Module:language-like"
local languages_data_module = "Module:languages/data"
local languages_data_patterns_module = "Module:languages/data/patterns"
local links_data_module = "Module:links/data"
local load_module = "Module:load"
local scripts_module = "Module:scripts"
local scripts_data_module = "Module:scripts/data"
local string_encode_entities_module = "Module:string/encode entities"
local string_pattern_escape_module = "Module:string/patternEscape"
local string_replacement_escape_module = "Module:string/replacementEscape"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local wikimedia_languages_module = "Module:wikimedia languages"
local mw = mw
local string = string
local table = table
local char = string.char
local concat = table.concat
local find = string.find
local floor = math.floor
local get_by_code -- Defined below.
local get_data_module_name -- Defined below.
local get_extra_data_module_name -- Defined below.
local getmetatable = getmetatable
local gmatch = string.gmatch
local gsub = string.gsub
local insert = table.insert
local ipairs = ipairs
local is_known_language_tag = mw.language.isKnownLanguageTag
local make_object -- Defined below.
local match = string.match
local next = next
local pairs = pairs
local remove = table.remove
local require = require
local select = select
local setmetatable = setmetatable
local sub = string.sub
local type = type
local unstrip = mw.text.unstrip
-- Loaded as needed by findBestScript.
local Hans_chars
local Hant_chars
local function check_object(...)
check_object = require(utilities_module).check_object
return check_object(...)
end
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function decode_entities(...)
decode_entities = require(string_utilities_module).decode_entities
return decode_entities(...)
end
local function decode_uri(...)
decode_uri = require(string_utilities_module).decode_uri
return decode_uri(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function encode_entities(...)
encode_entities = require(string_encode_entities_module)
return encode_entities(...)
end
local function get_L2_sort_key(...)
get_L2_sort_key = require(headword_page_module).get_L2_sort_key
return get_L2_sort_key(...)
end
local function get_script(...)
get_script = require(scripts_module).getByCode
return get_script(...)
end
local function find_best_script_without_lang(...)
find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang
return find_best_script_without_lang(...)
end
local function get_family(...)
get_family = require(families_module).getByCode
return get_family(...)
end
local function get_plaintext(...)
get_plaintext = require(utilities_module).get_plaintext
return get_plaintext(...)
end
local function get_wikimedia_lang(...)
get_wikimedia_lang = require(wikimedia_languages_module).getByCode
return get_wikimedia_lang(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function list_to_set(...)
list_to_set = require(table_module).listToSet
return list_to_set(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function make_family_object(...)
make_family_object = require(families_module).makeObject
return make_family_object(...)
end
local function pattern_escape(...)
pattern_escape = require(string_pattern_escape_module)
return pattern_escape(...)
end
local function replacement_escape(...)
replacement_escape = require(string_replacement_escape_module)
return replacement_escape(...)
end
local function safe_require(...)
safe_require = require(load_module).safe_require
return safe_require(...)
end
local function shallow_copy(...)
shallow_copy = require(table_module).shallowCopy
return shallow_copy(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function to_json(...)
to_json = require(json_module).toJSON
return to_json(...)
end
local function u(...)
u = require(string_utilities_module).char
return u(...)
end
local function ugsub(...)
ugsub = require(string_utilities_module).gsub
return ugsub(...)
end
local function ulen(...)
ulen = require(string_utilities_module).len
return ulen(...)
end
local function ulower(...)
ulower = require(string_utilities_module).lower
return ulower(...)
end
local function umatch(...)
umatch = require(string_utilities_module).match
return umatch(...)
end
local function uupper(...)
uupper = require(string_utilities_module).upper
return uupper(...)
end
local function track(page)
debug_track("languages/" .. page)
return true
end
local function normalize_code(code)
return load_data(languages_data_module).aliases[code] or code
end
local function check_inputs(self, check, default, ...)
local n = select("#", ...)
if n == 0 then
return false
end
local ret = check(self, (...))
if ret ~= nil then
return ret
elseif n > 1 then
local inputs = {...}
for i = 2, n do
ret = check(self, inputs[i])
if ret ~= nil then
return ret
end
end
end
return default
end
local function make_link(self, target, display)
local prefix, main
if self:getFamilyCode() == "qfa-sub" then
prefix, main = display:match("^(the )(.*)")
if not prefix then
prefix, main = display:match("^(a )(.*)")
end
end
return (prefix or "") .. "[[" .. target .. "|" .. (main or display) .. "]]"
end
-- Convert risky characters to HTML entities, which minimizes interference once returned (e.g. for "sms:a", "<!-- -->" etc.).
local function escape_risky_characters(text)
-- Spacing characters in isolation generally need to be escaped in order to be properly processed by the MediaWiki software.
if umatch(text, "^%s*$") then
return encode_entities(text, text)
end
return encode_entities(text, "!#%&*+/:;<=>?@[\\]_{|}")
end
-- Temporarily convert various formatting characters to PUA to prevent them from being disrupted by the substitution process.
local function doTempSubstitutions(text, subbedChars, keepCarets, noTrim)
-- Clone so that we don't insert any extra patterns into the table in package.loaded. For some reason, using require seems to keep memory use down; probably because the table is always cloned.
local patterns = shallow_copy(require(languages_data_patterns_module))
if keepCarets then
insert(patterns, "((\\+)%^)")
insert(patterns, "((%^))")
end
-- Ensure any whitespace at the beginning and end is temp substituted, to prevent it from being accidentally trimmed. We only want to trim any final spaces added during the substitution process (e.g. by a module), which means we only do this during the first round of temp substitutions.
if not noTrim then
insert(patterns, "^([\128-\191\244]*(%s+))")
insert(patterns, "((%s+)[\128-\191\244]*)$")
end
-- Pre-substitution, of "[[" and "]]", which makes pattern matching more accurate.
text = gsub(text, "%f[%[]%[%[", "\1"):gsub("%f[%]]%]%]", "\2")
local i = #subbedChars
for _, pattern in ipairs(patterns) do
-- Patterns ending in \0 stand are for things like "[[" or "]]"), so the inserted PUA are treated as breaks between terms by modules that scrape info from pages.
local term_divider
pattern = gsub(pattern, "%z$", function(divider)
term_divider = divider == "\0"
return ""
end)
text = gsub(text, pattern, function(...)
local m = {...}
local m1New = m[1]
for k = 2, #m do
local n = i + k - 1
subbedChars[n] = m[k]
local byte2 = floor(n / 4096) % 64 + (term_divider and 128 or 136)
local byte3 = floor(n / 64) % 64 + 128
local byte4 = n % 64 + 128
m1New = gsub(m1New, pattern_escape(m[k]), "\244" .. char(byte2) .. char(byte3) .. char(byte4), 1)
end
i = i + #m - 1
return m1New
end)
end
text = gsub(text, "\1", "%[%["):gsub("\2", "%]%]")
return text, subbedChars
end
-- Reinsert any formatting that was temporarily substituted.
local function undoTempSubstitutions(text, subbedChars)
for i = 1, #subbedChars do
local byte2 = floor(i / 4096) % 64 + 128
local byte3 = floor(i / 64) % 64 + 128
local byte4 = i % 64 + 128
text = gsub(text, "\244[" .. char(byte2) .. char(byte2+8) .. "]" .. char(byte3) .. char(byte4),
replacement_escape(subbedChars[i]))
end
text = gsub(text, "\1", "%[%["):gsub("\2", "%]%]")
return text
end
-- Check if the raw text is an unsupported title, and if so return that. Otherwise, remove HTML entities. We do the pre-conversion to avoid loading the unsupported title list unnecessarily.
local function checkNoEntities(self, text)
local textNoEnc = decode_entities(text)
if textNoEnc ~= text and load_data(links_data_module).unsupported_titles[text] then
return text
else
return textNoEnc
end
end
-- If no script object is provided (or if it's invalid or None), get one.
local function checkScript(text, self, sc)
if not check_object("script", true, sc) or sc:getCode() == "None" then
return self:findBestScript(text)
end
return sc
end
local function normalize(text, sc)
text = sc:fixDiscouragedSequences(text)
return sc:toFixedNFD(text)
end
-- Subfunction of iterateSectionSubstitutions(). Process an individual chunk of text according to the specifications in
-- `substitution_data`. The input parameters are all as in the documentation of iterateSectionSubstitutions() except for
-- `recursed`, which is set to true if we called ourselves recursively to process a script-specific setting or
-- script-wide fallback. Returns two values: the processed text and the actual substitution data used to do the
-- substitutions (same as the `actual_substitution_data` return value to iterateSectionSubstitutions()).
local function doSubstitutions(self, text, sc, substitution_data, data_field, function_name, recursed)
-- BE CAREFUL in this function because the value at any level can be `false`, which causes no processing to be done
-- and blocks any further fallback processing.
local actual_substitution_data = substitution_data
-- If there are language-specific substitutes given in the data module, use those.
if type(substitution_data) == "table" then
-- If a script is specified, run this function with the script-specific data before continuing.
local sc_code = sc:getCode()
local has_substitution_data = false
if substitution_data[sc_code] ~= nil then
has_substitution_data = true
if substitution_data[sc_code] then
text, actual_substitution_data = doSubstitutions(self, text, sc, substitution_data[sc_code], data_field,
function_name, true)
end
-- Hant, Hans and Hani are usually treated the same, so add a special case to avoid having to specify each one
-- separately.
elseif sc_code:match("^Han") and substitution_data.Hani ~= nil then
has_substitution_data = true
if substitution_data.Hani then
text, actual_substitution_data = doSubstitutions(self, text, sc, substitution_data.Hani, data_field,
function_name, true)
end
-- Substitution data with key 1 in the outer table may be given as a fallback.
elseif substitution_data[1] ~= nil then
has_substitution_data = true
if substitution_data[1] then
text, actual_substitution_data = doSubstitutions(self, text, sc, substitution_data[1], data_field,
function_name, true)
end
end
-- Iterate over all strings in the "from" subtable, and gsub with the corresponding string in "to". We work with
-- the NFD decomposed forms, as this simplifies many substitutions.
if substitution_data.from then
has_substitution_data = true
for i, from in ipairs(substitution_data.from) do
-- Normalize each loop, to ensure multi-stage substitutions work correctly.
text = sc:toFixedNFD(text)
text = ugsub(text, sc:toFixedNFD(from), substitution_data.to[i] or "")
end
end
if substitution_data.remove_diacritics then
has_substitution_data = true
text = sc:toFixedNFD(text)
-- Convert exceptions to PUA.
local remove_exceptions, substitutes = substitution_data.remove_exceptions
if remove_exceptions then
substitutes = {}
local i = 0
for _, exception in ipairs(remove_exceptions) do
exception = sc:toFixedNFD(exception)
text = ugsub(text, exception, function(m)
i = i + 1
local subst = u(0x80000 + i)
substitutes[subst] = m
return subst
end)
end
end
-- Strip diacritics.
text = ugsub(text, "[" .. substitution_data.remove_diacritics .. "]", "")
-- Convert exceptions back.
if remove_exceptions then
text = text:gsub("\242[\128-\191]*", substitutes)
end
end
if not has_substitution_data and sc._data[data_field] then
-- If language-specific sort key (etc.) is nil, fall back to script-wide sort key (etc.).
text, actual_substitution_data = doSubstitutions(self, text, sc, sc._data[data_field], data_field,
function_name, true)
end
elseif type(substitution_data) == "string" then
-- If there is a dedicated function module, use that.
local module = safe_require("Module:" .. substitution_data)
if module then
-- TODO: translit functions should take objects, not codes.
-- TODO: translit functions should be called with form NFD.
if function_name == "tr" then
if not module[function_name] then
error(("Internal error: Module [[%s]] has no function named 'tr'"):format(substitution_data))
end
text = module[function_name](text, self._code, sc:getCode())
elseif function_name == "stripDiacritics" then
-- FIXME, get rid of this arm after renaming makeEntryName -> stripDiacritics.
if module[function_name] then
text = module[function_name](sc:toFixedNFD(text), self, sc)
elseif module.makeEntryName then
text = module.makeEntryName(sc:toFixedNFD(text), self, sc)
else
error(("Internal error: Module [[%s]] has no function named 'stripDiacritics' or 'makeEntryName'"
):format(substitution_data))
end
else
if not module[function_name] then
error(("Internal error: Module [[%s]] has no function named '%s'"):format(
substitution_data, function_name))
end
text = module[function_name](sc:toFixedNFD(text), self, sc)
end
else
error("Substitution data '" .. substitution_data .. "' does not match an existing module.")
end
elseif substitution_data == nil and sc._data[data_field] then
-- If language-specific sort key (etc.) is nil, fall back to script-wide sort key (etc.).
text, actual_substitution_data = doSubstitutions(self, text, sc, sc._data[data_field], data_field,
function_name, true)
end
-- Don't normalize to NFC if this is the inner loop or if a module returned nil.
if recursed or not text then
return text, actual_substitution_data
end
-- Fix any discouraged sequences created during the substitution process, and normalize into the final form.
return sc:toFixedNFC(sc:fixDiscouragedSequences(text)), actual_substitution_data
end
-- Split the text into sections, based on the presence of temporarily substituted formatting characters, then iterate
-- over each section to apply substitutions (e.g. transliteration or diacritic stripping). This avoids putting PUA
-- characters through language-specific modules, which may be unequipped for them. This function is passed the following
-- values:
-- * `self` (the Language object);
-- * `text` (the text to process);
-- * `sc` (the script of the text, which must be specified; callers should call checkScript() as needed to autodetect the
-- script of the text if not given explicitly by the user);
-- * `subbedChars` (an array of the same length as the text, indicating which characters have been substituted and by
-- what, or {nil} if no substitutions are to happen);
-- * `keepCarets` (DOCUMENT ME);
-- * `substitution_data` (the data indicating which substitutions to apply, taken directly from `data_field` in the
-- language's data structure in a submodule of [[Module:languages/data]]);
-- * `data_field` (the data field from which `substitution_data` was fetched, such as "sort_key" or "strip_diacritics");
-- * `function_name` (the name of the function to call to do the substitution, in case `substitution_data` specifies a
-- module to do the substitution);
-- * `notrim` (don't trim whitespace at the edges of `text`; set when computing the sort key, because whitespace at the
-- beginning of a sort key is significant and causes the resulting page to be sorted at the beginning of the category
-- it's in).
-- Returns three values:
-- (1) the processed text;
-- (2) the value of `subbedChars` that was passed in, possibly modified with additional character substitutions; will be
-- {nil} if {nil} was passed in;
-- (3) the actual substitution data that was used to apply substitutions to `text`; this may be different from the value
-- of `substitution_data` passed in if that value recursively specified script-specific substitutions or if no
-- substitution data could be found in the language-specific data (e.g. {nil} was passed in or a structure was passed
-- in that had no setting for the script given in `sc`), but a script-wide fallback value was set; currently it is
-- only used by makeSortKey().
local function iterateSectionSubstitutions(self, text, sc, subbedChars, keepCarets, substitution_data, data_field,
function_name, notrim)
local sections
-- See [[Module:languages/data]].
if not find(text, "\244") or load_data(languages_data_module).substitution[self._code] == "cont" then
sections = {text}
else
sections = split(text, "\244[\128-\143][\128-\191]*", true)
end
local actual_substitution_data
for _, section in ipairs(sections) do
-- Don't bother processing empty strings or whitespace (which may also not be handled well by dedicated
-- modules).
if gsub(section, "%s+", "") ~= "" then
local sub, this_actual_substitution_data = doSubstitutions(self, section, sc, substitution_data, data_field,
function_name)
actual_substitution_data = this_actual_substitution_data
-- Second round of temporary substitutions, in case any formatting was added by the main substitution
-- process. However, don't do this if the section contains formatting already (as it would have had to have
-- been escaped to reach this stage, and therefore should be given as raw text).
if sub and subbedChars then
local noSub
for _, pattern in ipairs(require(languages_data_patterns_module)) do
if match(section, pattern .. "%z?") then
noSub = true
end
end
if not noSub then
sub, subbedChars = doTempSubstitutions(sub, subbedChars, keepCarets, true)
end
end
if not sub then
text = sub
break
end
text = sub and gsub(text, pattern_escape(section), replacement_escape(sub), 1) or text
end
end
if not notrim then
-- Trim, unless there are only spacing characters, while ignoring any final formatting characters.
-- Do not trim sort keys because spaces at the beginning are significant.
text = text and text:gsub("^([\128-\191\244]*)%s+(%S)", "%1%2"):gsub("(%S)%s+([\128-\191\244]*)$", "%1%2") or
nil
end
return text, subbedChars, actual_substitution_data
end
-- Process carets (and any escapes). Default to simple removal, if no pattern/replacement is given.
local function processCarets(text, pattern, repl)
local rep
repeat
text, rep = gsub(text, "\\\\(\\*^)", "\3%1")
until rep == 0
return (text:gsub("\\^", "\4")
:gsub(pattern or "%^", repl or "")
:gsub("\3", "\\")
:gsub("\4", "^"))
end
-- Remove carets if they are used to capitalize parts of transliterations (unless they have been escaped).
local function removeCarets(text, sc)
if not sc:hasCapitalization() and sc:isTransliterated() and text:find("^", 1, true) then
return processCarets(text)
else
return text
end
end
local Language = {}
--[==[Returns the language code of the language. Example: {{code|lua|"fr"}} for French.]==]
function Language:getCode()
return self._code
end
--[==[Returns the canonical name of the language. This is the name used to represent that language on Wiktionary, and is guaranteed to be unique to that language alone. Example: {{code|lua|"French"}} for French.]==]
function Language:getCanonicalName()
local name = self._name
if name == nil then
name = self._data[1]
self._name = name
end
return name
end
--[==[
Return the display form of the language. The display form of a language, family or script is the form it takes when
appearing as the <code><var>source</var></code> in categories such as <code>English terms derived from
<var>source</var></code> or <code>English given names from <var>source</var></code>, and is also the displayed text
in {makeCategoryLink()} links. For full and etymology-only languages, this is the same as the canonical name, but
for families, it reads <code>"<var>name</var> languages"</code> (e.g. {"Indo-Iranian languages"}), and for scripts,
it reads <code>"<var>name</var> script"</code> (e.g. {"Arabic script"}).
]==]
function Language:getDisplayForm()
local form = self._displayForm
if form == nil then
form = self:getCanonicalName()
-- Add article and " substrate" to substrates that lack them.
if self:getFamilyCode() == "qfa-sub" then
if not (sub(form, 1, 4) == "the " or sub(form, 1, 2) == "a ") then
form = "a " .. form
end
if not match(form, " [Ss]ubstrate") then
form = form .. " substrate"
end
end
self._displayForm = form
end
return form
end
--[==[Returns the value which should be used in the HTML lang= attribute for tagged text in the language.]==]
function Language:getHTMLAttribute(sc, region)
local code = self._code
if not find(code, "-", 1, true) then
return code .. "-" .. sc:getCode() .. (region and "-" .. region or "")
end
local parent = self:getParent()
region = region or match(code, "%f[%u][%u-]+%f[%U]")
if parent then
return parent:getHTMLAttribute(sc, region)
end
-- TODO: ISO family codes can also be used.
return "mis-" .. sc:getCode() .. (region and "-" .. region or "")
end
--[==[Returns a table of the aliases that the language is known by, excluding the canonical name. Aliases are synonyms for the language in question. The names are not guaranteed to be unique, in that sometimes more than one language is known by the same name. Example: {{code|lua|{"High German", "New High German", "Deutsch"} }} for [[:Category:German language|German]].]==]
function Language:getAliases()
self:loadInExtraData()
return require(language_like_module).getAliases(self)
end
--[==[
Return a table of the known subvarieties of a given language, excluding subvarieties that have been given
explicit etymology-only language codes. The names are not guaranteed to be unique, in that sometimes a given name
refers to a subvariety of more than one language. Example: {{code|lua|{"Southern Aymara", "Central Aymara"} }} for
[[:Category:Aymara language|Aymara]]. Note that the returned value can have nested tables in it, when a subvariety
goes by more than one name. Example: {{code|lua|{"North Azerbaijani", "South Azerbaijani", {"Afshar", "Afshari",
"Afshar Azerbaijani", "Afchar"}, {"Qashqa'i", "Qashqai", "Kashkay"}, "Sonqor"} }} for
[[:Category:Azerbaijani language|Azerbaijani]]. Here, for example, Afshar, Afshari, Afshar Azerbaijani and Afchar
all refer to the same subvariety, whose preferred name is Afshar (the one listed first). To avoid a return value
with nested tables in it, specify a non-{{code|lua|nil}} value for the <code>flatten</code> parameter; in that case,
the return value would be {{code|lua|{"North Azerbaijani", "South Azerbaijani", "Afshar", "Afshari",
"Afshar Azerbaijani", "Afchar", "Qashqa'i", "Qashqai", "Kashkay", "Sonqor"} }}.
]==]
function Language:getVarieties(flatten)
self:loadInExtraData()
return require(language_like_module).getVarieties(self, flatten)
end
--[==[Returns a table of the "other names" that the language is known by, which are listed in the <code>otherNames</code> field. It should be noted that the <code>otherNames</code> field itself is deprecated, and entries listed there should eventually be moved to either <code>aliases</code> or <code>varieties</code>.]==]
function Language:getOtherNames() -- To be eventually removed, once there are no more uses of the `otherNames` field.
self:loadInExtraData()
return require(language_like_module).getOtherNames(self)
end
--[==[
Return a combined table of the canonical name, aliases, varieties and other names of a given language.]==]
function Language:getAllNames()
self:loadInExtraData()
return require(language_like_module).getAllNames(self)
end
--[==[Returns a table of types as a lookup table (with the types as keys).
The possible types are
* {language}: This is a language, either full or etymology-only.
* {full}: This is a "full" (not etymology-only) language, i.e. the union of {regular}, {reconstructed} and
{appendix-constructed}. Note that the types {full} and {etymology-only} also exist for families, so if you
want to check specifically for a full language and you have an object that might be a family, you should
use {{lua|hasType("language", "full")}} and not simply {{lua|hasType("full")}}.
* {etymology-only}: This is an etymology-only (not full) language, whose parent is another etymology-only
language or a full language. Note that the types {full} and {etymology-only} also exist for
families, so if you want to check specifically for an etymology-only language and you have an
object that might be a family, you should use {{lua|hasType("language", "etymology-only")}}
and not simply {{lua|hasType("etymology-only")}}.
* {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted
in the main namespace. There may also be reconstructed terms for the language, which are placed in
the {Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full
languages are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto
and Volapük, among others) are also allowed in the mainspace and considered regular languages.
* {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the
{Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed
with *. Languages such as Proto-Indo-European and Proto-Germanic are in this category.
* {appendix-constructed}: This language is attested but does not meet the additional requirements set out for
constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore
be in the Appendix namespace, but they are not reconstructed and therefore should
not have * prefixed in links.
]==]
function Language:getTypes()
local types = self._types
if types == nil then
types = {language = true}
if self:getFullCode() == self._code then
types.full = true
else
types["etymology-only"] = true
end
for t in gmatch(self._data.type, "[^,]+") do
types[t] = true
end
self._types = types
end
return types
end
--[==[Given a list of types as strings, returns true if the language has all of them.]==]
function Language:hasType(...)
Language.hasType = require(language_like_module).hasType
return self:hasType(...)
end
--[==[Returns a table containing <code>WikimediaLanguage</code> objects (see [[Module:wikimedia languages]]), which represent languages and their codes as they are used in Wikimedia projects for interwiki linking and such. More than one object may be returned, as a single Wiktionary language may correspond to multiple Wikimedia languages. For example, Wiktionary's single code <code>sh</code> (Serbo-Croatian) maps to four Wikimedia codes: <code>sh</code> (Serbo-Croatian), <code>bs</code> (Bosnian), <code>hr</code> (Croatian) and <code>sr</code> (Serbian).
The code for the Wikimedia language is retrieved from the <code>wikimedia_codes</code> property in the data modules. If that property is not present, the code of the current language is used. If none of the available codes is actually a valid Wikimedia code, an empty table is returned.]==]
function Language:getWikimediaLanguages()
local wm_langs = self._wikimediaLanguageObjects
if wm_langs == nil then
local codes = self:getWikimediaLanguageCodes()
wm_langs = {}
for i = 1, #codes do
wm_langs[i] = get_wikimedia_lang(codes[i])
end
self._wikimediaLanguageObjects = wm_langs
end
return wm_langs
end
function Language:getWikimediaLanguageCodes()
local wm_langs = self._wikimediaLanguageCodes
if wm_langs == nil then
wm_langs = self._data.wikimedia_codes
if wm_langs then
wm_langs = split(wm_langs, ",", true, true)
else
local code = self._code
if is_known_language_tag(code) then
wm_langs = {code}
else
-- Inherit, but only if no codes are specified in the data *and*
-- the language code isn't a valid Wikimedia language code.
local parent = self:getParent()
wm_langs = parent and parent:getWikimediaLanguageCodes() or {}
end
end
self._wikimediaLanguageCodes = wm_langs
end
return wm_langs
end
--[==[
Returns the name of the Wikipedia article for the language. `project` specifies the language and project to retrieve
the article from, defaulting to {"enwiki"} for the English Wikipedia. Normally if specified it should be the project
code for a specific-language Wikipedia e.g. "zhwiki" for the Chinese Wikipedia, but it can be any project, including
non-Wikipedia ones. If the project is the English Wikipedia and the property {wikipedia_article} is present in the data
module it will be used first. In all other cases, a sitelink will be generated from {:getWikidataItem} (if set). The
resulting value (or lack of value) is cached so that subsequent calls are fast. If no value could be determined, and
`noCategoryFallback` is {false}, {:getCategoryName} is used as fallback; otherwise, {nil} is returned. Note that if
`noCategoryFallback` is {nil} or omitted, it defaults to {false} if the project is the English Wikipedia, otherwise
to {true}. In other words, under normal circumstances, if the English Wikipedia article couldn't be retrieved, the
return value will fall back to a link to the language's category, but this won't normally happen for any other project.
]==]
function Language:getWikipediaArticle(noCategoryFallback, project)
Language.getWikipediaArticle = require(language_like_module).getWikipediaArticle
return self:getWikipediaArticle(noCategoryFallback, project)
end
function Language:makeWikipediaLink()
return make_link(self, "w:" .. self:getWikipediaArticle(), self:getCanonicalName())
end
--[==[Returns the name of the Wikimedia Commons category page for the language.]==]
function Language:getCommonsCategory()
Language.getCommonsCategory = require(language_like_module).getCommonsCategory
return self:getCommonsCategory()
end
--[==[Returns the Wikidata item id for the language or <code>nil</code>. This corresponds to the the second field in the data modules.]==]
function Language:getWikidataItem()
Language.getWikidataItem = require(language_like_module).getWikidataItem
return self:getWikidataItem()
end
--[==[Returns a table of <code>Script</code> objects for all scripts that the language is written in. See [[Module:scripts]].]==]
function Language:getScripts()
local scripts = self._scriptObjects
if scripts == nil then
local codes = self:getScriptCodes()
if codes[1] == "All" then
scripts = load_data(scripts_data_module)
else
scripts = {}
for i = 1, #codes do
scripts[i] = get_script(codes[i])
end
end
self._scriptObjects = scripts
end
return scripts
end
--[==[Returns the table of script codes in the language's data file.]==]
function Language:getScriptCodes()
local scripts = self._scriptCodes
if scripts == nil then
scripts = self._data[4]
if scripts then
local codes, n = {}, 0
for code in gmatch(scripts, "[^,]+") do
n = n + 1
-- Special handling of "Hants", which represents "Hani", "Hant" and "Hans" collectively.
if code == "Hants" then
codes[n] = "Hani"
codes[n + 1] = "Hant"
codes[n + 2] = "Hans"
n = n + 2
else
codes[n] = code
end
end
scripts = codes
else
scripts = {"None"}
end
self._scriptCodes = scripts
end
return scripts
end
--[==[Given some text, this function iterates through the scripts of a given language and tries to find the script that best matches the text. It returns a {{code|lua|Script}} object representing the script. If no match is found at all, it returns the {{code|lua|None}} script object.]==]
function Language:findBestScript(text, forceDetect)
if not text or text == "" or text == "-" then
return get_script("None")
end
-- Differs from table returned by getScriptCodes, as Hants is not normalized into its constituents.
local codes = self._bestScriptCodes
if codes == nil then
codes = self._data[4]
codes = codes and split(codes, ",", true, true) or {"None"}
self._bestScriptCodes = codes
end
local first_sc = codes[1]
if first_sc == "All" then
return find_best_script_without_lang(text)
end
local codes_len = #codes
if not (forceDetect or first_sc == "Hants" or codes_len > 1) then
first_sc = get_script(first_sc)
local charset = first_sc.characters
return charset and umatch(text, "[" .. charset .. "]") and first_sc or get_script("None")
end
-- Remove all formatting characters.
text = get_plaintext(text)
-- Remove all spaces and any ASCII punctuation. Some non-ASCII punctuation is script-specific, so can't be removed.
text = ugsub(text, "[%s!\"#%%&'()*,%-./:;?@[\\%]_{}]+", "")
if #text == 0 then
return get_script("None")
end
-- Try to match every script against the text,
-- and return the one with the most matching characters.
local bestcount, bestscript, length = 0
for i = 1, codes_len do
local sc = codes[i]
-- Special case for "Hants", which is a special code that represents whichever of "Hant" or "Hans" best matches, or "Hani" if they match equally. This avoids having to list all three. In addition, "Hants" will be treated as the best match if there is at least one matching character, under the assumption that a Han script is desirable in terms that contain a mix of Han and other scripts (not counting those which use Jpan or Kore).
if sc == "Hants" then
local Hani = get_script("Hani")
if not Hant_chars then
Hant_chars = load_data("Module:zh/data/ts")
Hans_chars = load_data("Module:zh/data/st")
end
local t, s, found = 0, 0
-- This is faster than using mw.ustring.gmatch directly.
for ch in gmatch((ugsub(text, "[" .. Hani.characters .. "]", "\255%0")), "\255(.[\128-\191]*)") do
found = true
if Hant_chars[ch] then
t = t + 1
if Hans_chars[ch] then
s = s + 1
end
elseif Hans_chars[ch] then
s = s + 1
else
t, s = t + 1, s + 1
end
end
if found then
if t == s then
return Hani
end
return get_script(t > s and "Hant" or "Hans")
end
else
sc = get_script(sc)
if not length then
length = ulen(text)
end
-- Count characters by removing everything in the script's charset and comparing to the original length.
local charset = sc.characters
local count = charset and length - ulen((ugsub(text, "[" .. charset .. "]+", ""))) or 0
if count >= length then
return sc
elseif count > bestcount then
bestcount = count
bestscript = sc
end
end
end
-- Return best matching script, or otherwise None.
return bestscript or get_script("None")
end
--[==[Returns a <code>Family</code> object for the language family that the language belongs to. See [[Module:families]].]==]
function Language:getFamily()
local family = self._familyObject
if family == nil then
family = self:getFamilyCode()
-- If the value is nil, it's cached as false.
family = family and get_family(family) or false
self._familyObject = family
end
return family or nil
end
--[==[Returns the family code in the language's data file.]==]
function Language:getFamilyCode()
local family = self._familyCode
if family == nil then
-- If the value is nil, it's cached as false.
family = self._data[3] or false
self._familyCode = family
end
return family or nil
end
function Language:getFamilyName()
local family = self._familyName
if family == nil then
family = self:getFamily()
-- If the value is nil, it's cached as false.
family = family and family:getCanonicalName() or false
self._familyName = family
end
return family or nil
end
do
local function check_family(self, family)
if type(family) == "table" then
family = family:getCode()
end
if self:getFamilyCode() == family then
return true
end
local self_family = self:getFamily()
if self_family:inFamily(family) then
return true
-- If the family isn't a real family (e.g. creoles) check any ancestors.
elseif self_family:inFamily("qfa-not") then
local ancestors = self:getAncestors()
for _, ancestor in ipairs(ancestors) do
if ancestor:inFamily(family) then
return true
end
end
end
end
--[==[Check whether the language belongs to `family` (which can be a family code or object). A list of objects can be given in place of `family`; in that case, return true if the language belongs to any of the specified families. Note that some languages (in particular, certain creoles) can have multiple immediate ancestors potentially belonging to different families; in that case, return true if the language belongs to any of the specified families.]==]
function Language:inFamily(...)
if self:getFamilyCode() == nil then
return false
end
return check_inputs(self, check_family, false, ...)
end
end
function Language:getParent()
local parent = self._parentObject
if parent == nil then
parent = self:getParentCode()
-- If the value is nil, it's cached as false.
parent = parent and get_by_code(parent, nil, true, true) or false
self._parentObject = parent
end
return parent or nil
end
function Language:getParentCode()
local parent = self._parentCode
if parent == nil then
-- If the value is nil, it's cached as false.
parent = self._data.parent or false
self._parentCode = parent
end
return parent or nil
end
function Language:getParentName()
local parent = self._parentName
if parent == nil then
parent = self:getParent()
-- If the value is nil, it's cached as false.
parent = parent and parent:getCanonicalName() or false
self._parentName = parent
end
return parent or nil
end
function Language:getParentChain()
local chain = self._parentChain
if chain == nil then
chain = {}
local parent, n = self:getParent(), 0
while parent do
n = n + 1
chain[n] = parent
parent = parent:getParent()
end
self._parentChain = chain
end
return chain
end
do
local function check_lang(self, lang)
for _, parent in ipairs(self:getParentChain()) do
if (type(lang) == "string" and lang or lang:getCode()) == parent:getCode() then
return true
end
end
end
function Language:hasParent(...)
return check_inputs(self, check_lang, false, ...)
end
end
--[==[
If the language is etymology-only, this iterates through parents until a full language or family is found, and the
corresponding object is returned. If the language is a full language, then it simply returns itself.
]==]
function Language:getFull()
local full = self._fullObject
if full == nil then
full = self:getFullCode()
full = full == self._code and self or get_by_code(full)
self._fullObject = full
end
return full
end
--[==[
If the language is an etymology-only language, this iterates through parents until a full language or family is
found, and the corresponding code is returned. If the language is a full language, then it simply returns the
language code.
]==]
function Language:getFullCode()
return self._fullCode or self._code
end
--[==[
If the language is an etymology-only language, this iterates through parents until a full language or family is
found, and the corresponding canonical name is returned. If the language is a full language, then it simply returns
the canonical name of the language.
]==]
function Language:getFullName()
local full = self._fullName
if full == nil then
full = self:getFull():getCanonicalName()
self._fullName = full
end
return full
end
--[==[Returns a table of <code class="nf">Language</code> objects for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==]
function Language:getAncestors()
local ancestors = self._ancestorObjects
if ancestors == nil then
ancestors = {}
local ancestor_codes = self:getAncestorCodes()
if #ancestor_codes > 0 then
for _, ancestor in ipairs(ancestor_codes) do
insert(ancestors, get_by_code(ancestor, nil, true))
end
else
local fam = self:getFamily()
local protoLang = fam and fam:getProtoLanguage() or nil
-- For the cases where the current language is the proto-language
-- of its family, or an etymology-only language that is ancestral to that
-- proto-language, we need to step up a level higher right from the
-- start.
if protoLang and (
protoLang:getCode() == self._code or
(self:hasType("etymology-only") and protoLang:hasAncestor(self))
) then
fam = fam:getFamily()
protoLang = fam and fam:getProtoLanguage() or nil
end
while not protoLang and not (not fam or fam:getCode() == "qfa-not") do
fam = fam:getFamily()
protoLang = fam and fam:getProtoLanguage() or nil
end
insert(ancestors, protoLang)
end
self._ancestorObjects = ancestors
end
return ancestors
end
do
-- Avoid a language being its own ancestor via class inheritance. We only need to check for this if the language has inherited an ancestor table from its parent, because we never want to drop ancestors that have been explicitly set in the data.
-- Recursively iterate over ancestors until we either find self or run out. If self is found, return true.
local function check_ancestor(self, lang)
local codes = lang:getAncestorCodes()
if not codes then
return nil
end
for i = 1, #codes do
local code = codes[i]
if code == self._code then
return true
end
local anc = get_by_code(code, nil, true)
if check_ancestor(self, anc) then
return true
end
end
end
--[==[Returns a table of <code class="nf">Language</code> codes for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==]
function Language:getAncestorCodes()
if self._ancestorCodes then
return self._ancestorCodes
end
local data = self._data
local codes = data.ancestors
if codes == nil then
codes = {}
self._ancestorCodes = codes
return codes
end
codes = split(codes, ",", true, true)
self._ancestorCodes = codes
-- If there are no codes or the ancestors weren't inherited data, there's nothing left to check.
if #codes == 0 or self:getData(false, "raw").ancestors ~= nil then
return codes
end
local i, code = 1
while i <= #codes do
code = codes[i]
if check_ancestor(self, self) then
remove(codes, i)
else
i = i + 1
end
end
return codes
end
end
--[==[Given a list of language objects or codes, returns true if at least one of them is an ancestor. This includes any etymology-only children of that ancestor. If the language's ancestor(s) are etymology-only languages, it will also return true for those language parent(s) (e.g. if Vulgar Latin is the ancestor, it will also return true for its parent, Latin). However, a parent is excluded from this if the ancestor is also ancestral to that parent (e.g. if Classical Persian is the ancestor, Persian would return false, because Classical Persian is also ancestral to Persian).]==]
function Language:hasAncestor(...)
local function iterateOverAncestorTree(node, func, parent_check)
local ancestors = node:getAncestors()
local ancestorsParents = {}
for _, ancestor in ipairs(ancestors) do
-- When checking the parents of the other language, and the ancestor is also a parent, skip to the next ancestor, so that we exclude any etymology-only children of that parent that are not directly related (see below).
local ret = (parent_check or not node:hasParent(ancestor)) and
func(ancestor) or iterateOverAncestorTree(ancestor, func, parent_check)
if ret then
return ret
end
end
-- Check the parents of any ancestors. We don't do this if checking the parents of the other language, so that we exclude any etymology-only children of those parents that are not directly related (e.g. if the ancestor is Vulgar Latin and we are checking New Latin, we want it to return false because they are on different ancestral branches. As such, if we're already checking the parent of New Latin (Latin) we don't want to compare it to the parent of the ancestor (Latin), as this would be a false positive; it should be one or the other).
if not parent_check then
return nil
end
for _, ancestor in ipairs(ancestors) do
local ancestorParents = ancestor:getParentChain()
for _, ancestorParent in ipairs(ancestorParents) do
if ancestorParent:getCode() == self._code or ancestorParent:hasAncestor(ancestor) then
break
else
insert(ancestorsParents, ancestorParent)
end
end
end
for _, ancestorParent in ipairs(ancestorsParents) do
local ret = func(ancestorParent)
if ret then
return ret
end
end
end
local function do_iteration(otherlang, parent_check)
-- otherlang can't be self
if (type(otherlang) == "string" and otherlang or otherlang:getCode()) == self._code then
return false
end
repeat
if iterateOverAncestorTree(
self,
function(ancestor)
return ancestor:getCode() == (type(otherlang) == "string" and otherlang or otherlang:getCode())
end,
parent_check
) then
return true
elseif type(otherlang) == "string" then
otherlang = get_by_code(otherlang, nil, true)
end
otherlang = otherlang:getParent()
parent_check = false
until not otherlang
end
local parent_check = true
for _, otherlang in ipairs{...} do
local ret = do_iteration(otherlang, parent_check)
if ret then
return true
end
end
return false
end
do
local function construct_node(lang, memo)
local branch, ancestors = {lang = lang:getCode()}
memo[lang:getCode()] = branch
for _, ancestor in ipairs(lang:getAncestors()) do
if ancestors == nil then
ancestors = {}
end
insert(ancestors, memo[ancestor:getCode()] or construct_node(ancestor, memo))
end
branch.ancestors = ancestors
return branch
end
function Language:getAncestorChain()
local chain = self._ancestorChain
if chain == nil then
chain = construct_node(self, {})
self._ancestorChain = chain
end
return chain
end
end
function Language:getAncestorChainOld()
local chain = self._ancestorChain
if chain == nil then
chain = {}
local step = self
while true do
local ancestors = step:getAncestors()
step = #ancestors == 1 and ancestors[1] or nil
if not step then
break
end
insert(chain, step)
end
self._ancestorChain = chain
end
return chain
end
local function fetch_descendants(self, fmt)
local descendants, family = {}, self:getFamily()
-- Iterate over all three datasets.
for _, data in ipairs{
require("Module:languages/code to canonical name"),
require("Module:etymology languages/code to canonical name"),
require("Module:families/code to canonical name"),
} do
for code in pairs(data) do
local lang = get_by_code(code, nil, true, true)
-- Test for a descendant. Earlier tests weed out most candidates, while the more intensive tests are only used sparingly.
if (
code ~= self._code and -- Not self.
lang:inFamily(family) and -- In the same family.
(
family:getProtoLanguageCode() == self._code or -- Self is the protolanguage.
self:hasDescendant(lang) or -- Full hasDescendant check.
(lang:getFullCode() == self._code and not self:hasAncestor(lang)) -- Etymology-only child which isn't an ancestor.
)
) then
if fmt == "object" then
insert(descendants, lang)
elseif fmt == "code" then
insert(descendants, code)
elseif fmt == "name" then
insert(descendants, lang:getCanonicalName())
end
end
end
end
return descendants
end
function Language:getDescendants()
local descendants = self._descendantObjects
if descendants == nil then
descendants = fetch_descendants(self, "object")
self._descendantObjects = descendants
end
return descendants
end
function Language:getDescendantCodes()
local descendants = self._descendantCodes
if descendants == nil then
descendants = fetch_descendants(self, "code")
self._descendantCodes = descendants
end
return descendants
end
function Language:getDescendantNames()
local descendants = self._descendantNames
if descendants == nil then
descendants = fetch_descendants(self, "name")
self._descendantNames = descendants
end
return descendants
end
do
local function check_lang(self, lang)
if type(lang) == "string" then
lang = get_by_code(lang, nil, true)
end
if lang:hasAncestor(self) then
return true
end
end
function Language:hasDescendant(...)
return check_inputs(self, check_lang, false, ...)
end
end
local function fetch_children(self, fmt)
local m_etym_data = require(etymology_languages_data_module)
local self_code, children = self._code, {}
for code, lang in pairs(m_etym_data) do
local _lang = lang
repeat
local parent = _lang.parent
if parent == self_code then
if fmt == "object" then
insert(children, get_by_code(code, nil, true))
elseif fmt == "code" then
insert(children, code)
elseif fmt == "name" then
insert(children, lang[1])
end
break
end
_lang = m_etym_data[parent]
until not _lang
end
return children
end
function Language:getChildren()
local children = self._childObjects
if children == nil then
children = fetch_children(self, "object")
self._childObjects = children
end
return children
end
function Language:getChildrenCodes()
local children = self._childCodes
if children == nil then
children = fetch_children(self, "code")
self._childCodes = children
end
return children
end
function Language:getChildrenNames()
local children = self._childNames
if children == nil then
children = fetch_children(self, "name")
self._childNames = children
end
return children
end
function Language:hasChild(...)
local lang = ...
if not lang then
return false
elseif type(lang) == "string" then
lang = get_by_code(lang, nil, true)
end
if lang:hasParent(self) then
return true
end
return self:hasChild(select(2, ...))
end
--[==[Returns the name of the main category of that language. Example: {{code|lua|"French language"}} for French, whose category is at [[:Category:French language]]. Unless optional argument <code>nocap</code> is given, the language name at the beginning of the returned value will be capitalized. This capitalization is correct for category names, but not if the language name is lowercase and the returned value of this function is used in the middle of a sentence.]==]
function Language:getCategoryName(nocap)
local name = self._categoryName
if name == nil then
name = self:getCanonicalName()
-- If a substrate, omit any leading article.
if self:getFamilyCode() == "qfa-sub" then
name = name:gsub("^the ", ""):gsub("^a ", "")
end
-- Only add " language" if a full language.
if self:hasType("full") then
-- Unless the canonical name already ends with "language", "lect" or their derivatives, add " language".
if not (match(name, "[Ll]anguage$") or match(name, "[Ll]ect$")) then
name = name .. " language"
end
end
self._categoryName = name
end
if nocap then
return name
end
return mw.getContentLanguage():ucfirst(name)
end
--[==[Creates a link to the category; the link text is the canonical name.]==]
function Language:makeCategoryLink()
return make_link(self, ":Category:" .. self:getCategoryName(), self:getDisplayForm())
end
function Language:getStandardCharacters(sc)
local standard_chars = self._data.standard_chars
if type(standard_chars) ~= "table" then
return standard_chars
elseif sc and type(sc) ~= "string" then
check_object("script", nil, sc)
sc = sc:getCode()
end
if (not sc) or sc == "None" then
local scripts = {}
for _, script in pairs(standard_chars) do
insert(scripts, script)
end
return concat(scripts)
end
if standard_chars[sc] then
return standard_chars[sc] .. (standard_chars[1] or "")
end
end
--[==[
Strip diacritics from display text `text` (in a language-specific fashion), which is in the script `sc`. If `sc` is
omitted or {nil}, the script is autodetected. This also strips certain punctuation characters from the end and (in the
case of Spanish upside-down question mark and exclamation points) from the beginning; strips any whitespace at the
end of the text or between the text and final stripped punctuation characters; and applies some language-specific
Unicode normalizations to replace discouraged characters with their prescribed alternatives. Return the stripped text.
]==]
function Language:stripDiacritics(text, sc)
if (not text) or text == "" then
return text
end
sc = checkScript(text, self, sc)
text = normalize(text, sc)
-- FIXME, rename makeEntryName to stripDiacritics and get rid of second and third return values
-- everywhere
text, _, _ = iterateSectionSubstitutions(self, text, sc, nil, nil,
self._data.strip_diacritics or self._data.entry_name, "strip_diacritics", "stripDiacritics")
text = umatch(text, "^[¿¡]?(.-[^%s%p].-)%s*[؟?!;՛՜ ՞ ՟?!︖︕।॥။၊་།]?$") or text
return text
end
--[==[
Convert a ''logical'' pagename (the pagename as it appears to the user, after diacritics and punctuation have been
stripped) to a ''physical'' pagename (the pagename as it appears in the MediaWiki database). Reasons for a difference
between the two are (a) unsupported titles such as `[ ]` (with square brackets in them), `#` (pound/hash sign) and
`¯\_(ツ)_/¯` (with underscores), as well as overly long titles of various sorts; (b) "mammoth" pages that are split into
parts (e.g. `a`, which is split into physical pagenames `a/languages A to L` and `a/languages M to Z`). For almost all
purposes, you should work with logical and not physical pagenames. But there are certain use cases that require physical
pagenames, such as checking the existence of a page or retrieving a page's contents.
`pagename` is the logical pagename to be converted. `is_reconstructed_or_appendix` indicates whether the page is in the
`Reconstruction` or `Appendix` namespaces. If it is omitted or has the value {nil}, the pagename is checked for an
initial asterisk, and if found, the page is assumed to be a `Reconstruction` page. Setting a value of `false` or `true`
to `is_reconstructed_or_appendix` disables this check and allows for mainspace pagenames that begin with an asterisk.
]==]
function Language:logicalToPhysical(pagename, is_reconstructed_or_appendix)
-- FIXME: This probably shouldn't happen but it happens when makeEntryName() receives nil.
if pagename == nil then
track("nil-passed-to-logicalToPhysical")
return nil
end
local initial_asterisk
if is_reconstructed_or_appendix == nil then
local pagename_minus_initial_asterisk
initial_asterisk, pagename_minus_initial_asterisk = pagename:match("^(%*)(.*)$")
if pagename_minus_initial_asterisk then
is_reconstructed_or_appendix = true
pagename = pagename_minus_initial_asterisk
elseif self:hasType("appendix-constructed") then
is_reconstructed_or_appendix = true
end
end
if not is_reconstructed_or_appendix then
-- Check if the pagename is a listed unsupported title.
local unsupportedTitles = load_data(links_data_module).unsupported_titles
if unsupportedTitles[pagename] then
return "Unsupported titles/" .. unsupportedTitles[pagename]
end
end
-- Set `unsupported` as true if certain conditions are met.
local unsupported
-- Check if there's an unsupported character. \239\191\189 is the replacement character U+FFFD, which can't be typed
-- directly here due to an abuse filter. Unix-style dot-slash notation is also unsupported, as it is used for
-- relative paths in links, as are 3 or more consecutive tildes. Note: match is faster with magic
-- characters/charsets; find is faster with plaintext.
if (
match(pagename, "[#<>%[%]_{|}]") or
find(pagename, "\239\191\189") or
match(pagename, "%f[^%z/]%.%.?%f[%z/]") or
find(pagename, "~~~")
) then
unsupported = true
-- If it looks like an interwiki link.
elseif find(pagename, ":") then
local prefix = gsub(pagename, "^:*(.-):.*", ulower)
if (
load_data("Module:data/namespaces")[prefix] or
load_data("Module:data/interwikis")[prefix]
) then
unsupported = true
end
end
-- Escape unsupported characters so they can be used in titles. ` is used as a delimiter for this, so a raw use of
-- it in an unsupported title is also escaped here to prevent interference; this is only done with unsupported
-- titles, though, so inclusion won't in itself mean a title is treated as unsupported (which is why it's excluded
-- from the earlier test).
if unsupported then
-- FIXME: This conversion needs to be different for reconstructed pages with unsupported characters. There
-- aren't any currently, but if there ever are, we need to fix this e.g. to put them in something like
-- Reconstruction:Proto-Indo-European/Unsupported titles/`lowbar``num`.
local unsupported_characters = load_data(links_data_module).unsupported_characters
pagename = pagename:gsub("[#<>%[%]_`{|}\239]\191?\189?", unsupported_characters)
:gsub("%f[^%z/]%.%.?%f[%z/]", function(m)
return (gsub(m, "%.", "`period`"))
end)
:gsub("~~~+", function(m)
return (gsub(m, "~", "`tilde`"))
end)
pagename = "Unsupported titles/" .. pagename
elseif not is_reconstructed_or_appendix then
-- Check if this is a mammoth page. If so, which subpage should we link to?
local m_links_data = load_data(links_data_module)
local mammoth_page_type = m_links_data.mammoth_pages[pagename]
if mammoth_page_type then
local canonical_name = self:getFullName()
if canonical_name ~= "Translingual" and canonical_name ~= "English" then
local this_subpage
local L2_sort_key = get_L2_sort_key(canonical_name)
for _, subpage_spec in ipairs(m_links_data.mammoth_page_subpage_types[mammoth_page_type]) do
-- unpack() fails utterly on data loaded using mw.loadData() even if offsets are given
local subpage, pattern = subpage_spec[1], subpage_spec[2]
if pattern == true or L2_sort_key:match(pattern) then
this_subpage = subpage
break
end
end
if not this_subpage then
error(("Internal error: Bad data in mammoth_page_subpage_pages in [[Module:links/data]] for mammoth page %s, type %s; last entry didn't have 'true' in it"):format(
pagename, mammoth_page_type))
end
pagename = pagename .. "/" .. this_subpage
end
end
end
return (initial_asterisk or "") .. pagename
end
--[==[
Strip the diacritics from a display pagename and convert the resulting logical pagename into a physical pagename.
This allows you, for example, to retrieve the contents of the page or check its existence. WARNING: This is deprecated
and will be going away. It is a simple composition of `self:stripDiacritics` and `self:logicalToPhysical`; most callers
only want the former, and if you need both, call them both yourself.
`text` and `sc` are as in `self:stripDiacritics`, and `is_reconstructed_or_appendix` is as in `self:logicalToPhysical`.
]==]
function Language:makeEntryName(text, sc, is_reconstructed_or_appendix)
return self:logicalToPhysical(self:stripDiacritics(text, sc), is_reconstructed_or_appendix)
end
--[==[Generates alternative forms using a specified method, and returns them as a table. If no method is specified, returns a table containing only the input term.]==]
function Language:generateForms(text, sc)
local generate_forms = self._data.generate_forms
if generate_forms == nil then
return {text}
end
sc = checkScript(text, self, sc)
return require("Module:" .. self._data.generate_forms).generateForms(text, self, sc)
end
--[==[Creates a sort key for the given stripped text, following the rules appropriate for the language. This removes
diacritical marks from the stripped text if they are not considered significant for sorting, and may perform some other
changes. Any initial hyphen is also removed, and anything in parentheses is removed as well.
The <code>sort_key</code> setting for each language in the data modules defines the replacements made by this function, or it gives the name of the module that takes the stripped text and returns a sortkey.]==]
function Language:makeSortKey(text, sc)
if (not text) or text == "" then
return text
end
if match(text, "<[^<>]+>") then
track("track HTML tag")
end
-- Remove directional characters, bold, italics, soft hyphens, strip markers and HTML tags.
-- FIXME: Partly duplicated with remove_formatting() in [[Module:links]].
text = ugsub(text, "[\194\173\226\128\170-\226\128\174\226\129\166-\226\129\169]", "")
text = text:gsub("('*)'''(.-'*)'''", "%1%2"):gsub("('*)''(.-'*)''", "%1%2")
text = gsub(unstrip(text), "<[^<>]+>", "")
text = decode_uri(text, "PATH")
text = checkNoEntities(self, text)
-- Remove initial hyphens and * unless the term only consists of spacing + punctuation characters.
text = ugsub(text, "^([-]*)[-־ـ᠊*]+([-]*)(.*[^%s%p].*)", "%1%2%3")
sc = checkScript(text, self, sc)
text = normalize(text, sc)
text = removeCarets(text, sc)
-- For languages with dotted dotless i, ensure that "İ" is sorted as "i", and "I" is sorted as "ı".
if self:hasDottedDotlessI() then
text = gsub(text, "I\204\135", "i") -- decomposed "İ"
:gsub("I", "ı")
text = sc:toFixedNFD(text)
end
-- Convert to lowercase, make the sortkey, then convert to uppercase. Where the language has dotted dotless i, it is
-- usually not necessary to convert "i" to "İ" and "ı" to "I" first, because "I" will always be interpreted as
-- conventional "I" (not dotless "İ") by any sorting algorithms, which will have been taken into account by the
-- sortkey substitutions themselves. However, if no sortkey substitutions have been specified, then conversion is
-- necessary so as to prevent "i" and "ı" both being sorted as "I".
--
-- An exception is made for scripts that (sometimes) sort by scraping page content, as that means they are sensitive
-- to changes in capitalization (as it changes the target page).
if not sc:sortByScraping() then
text = ulower(text)
end
local actual_substitution_data
-- Don't trim whitespace here because it's significant at the beginning of a sort key or sort base.
text, _, actual_substitution_data = iterateSectionSubstitutions(self, text, sc, nil, nil, self._data.sort_key,
"sort_key", "makeSortKey", "notrim")
if not sc:sortByScraping() then
if self:hasDottedDotlessI() and not actual_substitution_data then
text = text:gsub("ı", "I"):gsub("i", "İ")
text = sc:toFixedNFC(text)
end
text = uupper(text)
end
-- Remove parentheses, as long as they are either preceded or followed by something.
text = gsub(text, "(.)[()]+", "%1"):gsub("[()]+(.)", "%1")
text = escape_risky_characters(text)
return text
end
--[==[Create the form used as as a basis for display text and transliteration. FIXME: Rename to correctInputText().]==]
local function processDisplayText(text, self, sc, keepCarets, keepPrefixes)
local subbedChars = {}
text, subbedChars = doTempSubstitutions(text, subbedChars, keepCarets)
text = decode_uri(text, "PATH")
text = checkNoEntities(self, text)
sc = checkScript(text, self, sc)
text = normalize(text, sc)
text, subbedChars = iterateSectionSubstitutions(self, text, sc, subbedChars, keepCarets, self._data.display_text,
"display_text", "makeDisplayText")
text = removeCarets(text, sc)
-- Remove any interwiki link prefixes (unless they have been escaped or this has been disabled).
if find(text, ":") and not keepPrefixes then
local rep
repeat
text, rep = gsub(text, "\\\\(\\*:)", "\3%1")
until rep == 0
text = gsub(text, "\\:", "\4")
while true do
local prefix = gsub(text, "^(.-):.+", function(m1)
return (gsub(m1, "\244[\128-\191]*", ""))
end)
-- Check if the prefix is an interwiki, though ignore capitalised Wiktionary:, which is a namespace.
if not prefix or prefix == text or prefix == "Wiktionary"
or not (load_data("Module:data/interwikis")[ulower(prefix)] or prefix == "") then
break
end
text = gsub(text, "^(.-):(.*)", function(m1, m2)
local ret = {}
for subbedChar in gmatch(m1, "\244[\128-\191]*") do
insert(ret, subbedChar)
end
return concat(ret) .. m2
end)
end
text = gsub(text, "\3", "\\"):gsub("\4", ":")
end
return text, subbedChars
end
--[==[Make the display text (i.e. what is displayed on the page).]==]
function Language:makeDisplayText(text, sc, keepPrefixes)
if not text or text == "" then
return text
end
local subbedChars
text, subbedChars = processDisplayText(text, self, sc, nil, keepPrefixes)
text = escape_risky_characters(text)
return undoTempSubstitutions(text, subbedChars)
end
--[==[Transliterates the text from the given script into the Latin script (see
[[Wiktionary:Transliteration and romanization]]). The language must have the <code>translit</code> property for this to
work; if it is not present, {{code|lua|nil}} is returned.
The <code>sc</code> parameter is handled by the transliteration module, and how it is handled is specific to that
module. Some transliteration modules may tolerate {{code|lua|nil}} as the script, others require it to be one of the
possible scripts that the module can transliterate, and will throw an error if it's not one of them. For this reason,
the <code>sc</code> parameter should always be provided when writing non-language-specific code.
The <code>module_override</code> parameter is used to override the default module that is used to provide the
transliteration. This is useful in cases where you need to demonstrate a particular module in use, but there is no
default module yet, or you want to demonstrate an alternative version of a transliteration module before making it
official. It should not be used in real modules or templates, only for testing. All uses of this parameter are tracked
by [[Wiktionary:Tracking/languages/module_override]].
'''Known bugs''':
* This function assumes {tr(s1) .. tr(s2) == tr(s1 .. s2)}. When this assertion fails, wikitext markups like <nowiki>'''</nowiki> can cause wrong transliterations.
* HTML entities like <code>&apos;</code>, often used to escape wikitext markups, do not work.
]==]
function Language:transliterate(text, sc, module_override)
-- If there is no text, or the language doesn't have transliteration data and there's no override, return nil.
if not text or text == "" or text == "-" then
return text
end
-- If the script is not transliteratable (and no override is given), return nil.
sc = checkScript(text, self, sc)
if not (sc:isTransliterated() or module_override) then
-- temporary tracking to see if/when this gets triggered
track("non-transliterable")
track("non-transliterable/" .. self._code)
track("non-transliterable/" .. sc:getCode())
track("non-transliterable/" .. sc:getCode() .. "/" .. self._code)
return nil
end
-- Remove any strip markers.
text = unstrip(text)
-- Do not process the formatting into PUA characters for certain languages.
local processed = load_data(languages_data_module).substitution[self._code] ~= "none"
-- Get the display text with the keepCarets flag set.
local subbedChars
if processed then
text, subbedChars = processDisplayText(text, self, sc, true)
end
-- Transliterate (using the module override if applicable).
text, subbedChars = iterateSectionSubstitutions(self, text, sc, subbedChars, true, module_override or
self._data.translit, "translit", "tr")
if not text then
return nil
end
-- Incomplete transliterations return nil.
local charset = sc.characters
if charset and umatch(text, "[" .. charset .. "]") then
-- Remove any characters in Latin, which includes Latin characters also included in other scripts (as these are
-- false positives), as well as any PUA substitutions. Anything remaining should only be script code "None"
-- (e.g. numerals).
local check_text = ugsub(text, "[" .. get_script("Latn").characters .. "-]+", "")
-- Set none_is_last_resort_only flag, so that any non-None chars will cause a script other than "None" to be
-- returned.
if find_best_script_without_lang(check_text, true):getCode() ~= "None" then
return nil
end
end
if processed then
text = escape_risky_characters(text)
text = undoTempSubstitutions(text, subbedChars)
end
-- If the script does not use capitalization, then capitalize any letters of the transliteration which are
-- immediately preceded by a caret (and remove the caret).
if text and not sc:hasCapitalization() and text:find("^", 1, true) then
text = processCarets(text, "%^([\128-\191\244]*%*?)([^\128-\191\244][\128-\191]*)", function(m1, m2)
return m1 .. uupper(m2)
end)
end
-- Track module overrides.
if module_override ~= nil then
track("module_override")
end
return text
end
do
local function handle_language_spec(self, spec, sc)
local ret = self["_" .. spec]
if ret == nil then
ret = self._data[spec]
if type(ret) == "string" then
ret = list_to_set(split(ret, ",", true, true))
end
self["_" .. spec] = ret
end
if type(ret) == "table" then
ret = ret[sc:getCode()]
end
return not not ret
end
function Language:overrideManualTranslit(sc)
return handle_language_spec(self, "override_translit", sc)
end
function Language:link_tr(sc)
return handle_language_spec(self, "link_tr", sc)
end
end
--[==[Returns {{code|lua|true}} if the language has a transliteration module, or {{code|lua|false}} if it doesn't.]==]
function Language:hasTranslit()
return not not self._data.translit
end
--[==[Returns {{code|lua|true}} if the language uses the letters I/ı and İ/i, or {{code|lua|false}} if it doesn't.]==]
function Language:hasDottedDotlessI()
return not not self._data.dotted_dotless_i
end
function Language:toJSON(opts)
local strip_diacritics, strip_diacritics_patterns, strip_diacritics_remove_diacritics = self._data.strip_diacritics
if strip_diacritics then
if strip_diacritics.from then
strip_diacritics_patterns = {}
for i, from in ipairs(strip_diacritics.from) do
insert(strip_diacritics_patterns, {from = from, to = strip_diacritics.to[i] or ""})
end
end
strip_diacritics_remove_diacritics = strip_diacritics.remove_diacritics
end
-- mainCode should only end up non-nil if dontCanonicalizeAliases is passed to make_object().
-- props should either contain zero-argument functions to compute the value, or the value itself.
local props = {
ancestors = function() return self:getAncestorCodes() end,
canonicalName = function() return self:getCanonicalName() end,
categoryName = function() return self:getCategoryName("nocap") end,
code = self._code,
mainCode = self._mainCode,
parent = function() return self:getParentCode() end,
full = function() return self:getFullCode() end,
stripDiacriticsPatterns = strip_diacritics_patterns,
stripDiacriticsRemoveDiacritics = strip_diacritics_remove_diacritics,
family = function() return self:getFamilyCode() end,
aliases = function() return self:getAliases() end,
varieties = function() return self:getVarieties() end,
otherNames = function() return self:getOtherNames() end,
scripts = function() return self:getScriptCodes() end,
type = function() return keys_to_list(self:getTypes()) end,
wikimediaLanguages = function() return self:getWikimediaLanguageCodes() end,
wikidataItem = function() return self:getWikidataItem() end,
wikipediaArticle = function() return self:getWikipediaArticle(true) end,
}
local ret = {}
for prop, val in pairs(props) do
if not opts.skip_fields or not opts.skip_fields[prop] then
if type(val) == "function" then
ret[prop] = val()
else
ret[prop] = val
end
end
end
-- Use `deep_copy` when returning a table, so that there are no editing restrictions imposed by `mw.loadData`.
return opts and opts.lua_table and deep_copy(ret) or to_json(ret, opts)
end
function export.getDataModuleName(code)
local letter = match(code, "^(%l)%l%l?$")
return "Module:" .. (
letter == nil and "languages/data/exceptional" or
#code == 2 and "languages/data/2" or
"languages/data/3/" .. letter
)
end
get_data_module_name = export.getDataModuleName
function export.getExtraDataModuleName(code)
return get_data_module_name(code) .. "/extra"
end
get_extra_data_module_name = export.getExtraDataModuleName
do
local function make_stack(data)
local key_types = {
[2] = "unique",
aliases = "unique",
otherNames = "unique",
type = "append",
varieties = "unique",
wikipedia_article = "unique",
wikimedia_codes = "unique"
}
local function __index(self, k)
local stack, key_type = getmetatable(self), key_types[k]
-- Data that isn't inherited from the parent.
if key_type == "unique" then
local v = stack[stack[make_stack]][k]
if v == nil then
local layer = stack[0]
if layer then -- Could be false if there's no extra data.
v = layer[k]
end
end
return v
-- Data that is appended by each generation.
elseif key_type == "append" then
local parts, offset, n = {}, 0, stack[make_stack]
for i = 1, n do
local part = stack[i][k]
if part == nil then
offset = offset + 1
else
parts[i - offset] = part
end
end
return offset ~= n and concat(parts, ",") or nil
end
local n = stack[make_stack]
while true do
local layer = stack[n]
if not layer then -- Could be false if there's no extra data.
return nil
end
local v = layer[k]
if v ~= nil then
return v
end
n = n - 1
end
end
local function __newindex()
error("table is read-only")
end
local function __pairs(self)
-- Iterate down the stack, caching keys to avoid duplicate returns.
local stack, seen = getmetatable(self), {}
local n = stack[make_stack]
local iter, state, k, v = pairs(stack[n])
return function()
repeat
repeat
k = iter(state, k)
if k == nil then
n = n - 1
local layer = stack[n]
if not layer then -- Could be false if there's no extra data.
return nil
end
iter, state, k = pairs(layer)
end
until not (k == nil or seen[k])
-- Get the value via a lookup, as the one returned by the
-- iterator will be the raw value from the current layer,
-- which may not be the one __index will return for that
-- key. Also memoize the key in `seen` (even if the lookup
-- returns nil) so that it doesn't get looked up again.
-- TODO: store values in `self`, avoiding the need to create
-- the `seen` table. The iterator will need to iterate over
-- `self` with `next` first to find these on future loops.
v, seen[k] = self[k], true
until v ~= nil
return k, v
end
end
local __ipairs = require(table_module).indexIpairs
function make_stack(data)
local stack = {
data,
[make_stack] = 1, -- stores the length and acts as a sentinel to confirm a given metatable is a stack.
__index = __index,
__newindex = __newindex,
__pairs = __pairs,
__ipairs = __ipairs,
}
stack.__metatable = stack
return setmetatable({}, stack), stack
end
return make_stack(data)
end
local function get_stack(data)
local stack = getmetatable(data)
return stack and type(stack) == "table" and stack[make_stack] and stack or nil
end
--[==[
<span style="color: var(--wikt-palette-red,#BA0000)">This function is not for use in entries or other content pages.</span>
Returns a blob of data about the language. The format of this blob is undocumented, and perhaps unstable; it's intended for things like the module's own unit-tests, which are "close friends" with the module and will be kept up-to-date as the format changes. If `extra` is set, any extra data in the relevant `/extra` module will be included. (Note that it will be included anyway if it has already been loaded into the language object.) If `raw` is set, then the returned data will not contain any data inherited from parent objects.
-- Do NOT use these methods!
-- All uses should be pre-approved on the talk page!
]==]
function Language:getData(extra, raw)
if extra then
self:loadInExtraData()
end
local data = self._data
-- If raw is not set, just return the data.
if not raw then
return data
end
local stack = get_stack(data)
-- If there isn't a stack or its length is 1, return the data. Extra data (if any) will be included, as it's stored at key 0 and doesn't affect the reported length.
if stack == nil then
return data
end
local n = stack[make_stack]
if n == 1 then
return data
end
local extra = stack[0]
-- If there isn't any extra data, return the top layer of the stack.
if extra == nil then
return stack[n]
end
-- If there is, return a new stack which has the top layer at key 1 and the extra data at key 0.
data, stack = make_stack(stack[n])
stack[0] = extra
return data
end
function Language:loadInExtraData()
-- Only full languages have extra data.
if not self:hasType("language", "full") then
return
end
local data = self._data
-- If there's no stack, create one.
local stack = get_stack(self._data)
if stack == nil then
data, stack = make_stack(data)
-- If already loaded, return.
elseif stack[0] ~= nil then
return
end
self._data = data
-- Load extra data from the relevant module and add it to the stack at key 0, so that the __index and __pairs metamethods will pick it up, since they iterate down the stack until they run out of layers.
local code = self._code
local modulename = get_extra_data_module_name(code)
-- No data cached as false.
stack[0] = modulename and load_data(modulename)[code] or false
end
--[==[Returns the name of the module containing the language's data. Currently, this is always [[Module:scripts/data]].]==]
function Language:getDataModuleName()
local name = self._dataModuleName
if name == nil then
name = self:hasType("etymology-only") and etymology_languages_data_module or
get_data_module_name(self._mainCode or self._code)
self._dataModuleName = name
end
return name
end
--[==[Returns the name of the module containing the language's data. Currently, this is always [[Module:scripts/data]].]==]
function Language:getExtraDataModuleName()
local name = self._extraDataModuleName
if name == nil then
name = not self:hasType("etymology-only") and get_extra_data_module_name(self._mainCode or self._code) or false
self._extraDataModuleName = name
end
return name or nil
end
function export.makeObject(code, data, dontCanonicalizeAliases)
local data_type = type(data)
if data_type ~= "table" then
error(("bad argument #2 to 'makeObject' (table expected, got %s)"):format(data_type))
end
-- Convert any aliases.
local input_code = code
code = normalize_code(code)
input_code = dontCanonicalizeAliases and input_code or code
local parent
if data.parent then
parent = get_by_code(data.parent, nil, true, true)
else
parent = Language
end
parent.__index = parent
local lang = {_code = input_code}
-- This can only happen if dontCanonicalizeAliases is passed to make_object().
if code ~= input_code then
lang._mainCode = code
end
local parent_data = parent._data
if parent_data == nil then
-- Full code is the same as the code.
lang._fullCode = parent._code or code
else
-- Copy full code.
lang._fullCode = parent._fullCode
local stack = get_stack(parent_data)
if stack == nil then
parent_data, stack = make_stack(parent_data)
end
-- Insert the input data as the new top layer of the stack.
local n = stack[make_stack] + 1
data, stack[n], stack[make_stack] = parent_data, data, n
end
lang._data = data
return setmetatable(lang, parent)
end
make_object = export.makeObject
end
--[==[Finds the language whose code matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">paramForError</code> is {{code|lua|true}}, a generic error message mentioning the bad code is generated; otherwise <code class="n">paramForError</code> should be a string or number specifying the parameter that the code came from, and this parameter will be mentioned in the error message along with the bad code. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.]==]
function export.getByCode(code, paramForError, allowEtymLang, allowFamily)
-- Track uses of paramForError, ultimately so it can be removed, as error-handling should be done by [[Module:parameters]], not here.
if paramForError ~= nil then
track("paramForError")
end
if type(code) ~= "string" then
local typ
if not code then
typ = "nil"
elseif check_object("language", true, code) then
typ = "a language object"
elseif check_object("family", true, code) then
typ = "a family object"
else
typ = "a " .. type(code)
end
error("The function getByCode expects a string as its first argument, but received " .. typ .. ".")
end
local m_data = load_data(languages_data_module)
if m_data.aliases[code] or m_data.track[code] then
track(code)
end
local norm_code = normalize_code(code)
-- Get the data, checking for etymology-only languages if allowEtymLang is set.
local data = load_data(get_data_module_name(norm_code))[norm_code] or
allowEtymLang and load_data(etymology_languages_data_module)[norm_code]
-- If no data was found and allowFamily is set, check the family data. If the main family data was found, make the object with [[Module:families]] instead, as family objects have different methods. However, if it's an etymology-only family, use make_object in this module (which handles object inheritance), and the family-specific methods will be inherited from the parent object.
if data == nil and allowFamily then
data = load_data("Module:families/data")[norm_code]
if data ~= nil then
if data.parent == nil then
return make_family_object(norm_code, data)
elseif not allowEtymLang then
data = nil
end
end
end
local retval = code and data and make_object(code, data)
if not retval and paramForError then
require("Module:languages/errorGetBy").code(code, paramForError, allowEtymLang, allowFamily)
end
return retval
end
get_by_code = export.getByCode
--[==[Finds the language whose canonical name (the name used to represent that language on Wiktionary) or other name matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.
The canonical name of languages should always be unique (it is an error for two languages on Wiktionary to share the same canonical name), so this is guaranteed to give at most one result.
This function is powered by [[Module:languages/canonical names]], which contains a pre-generated mapping of full-language canonical names to codes. It is generated by going through the [[:Category:Language data modules]] for full languages. When <code class="n">allowEtymLang</code> is specified for the above function, [[Module:etymology languages/canonical names]] may also be used, and when <code class="n">allowFamily</code> is specified for the above function, [[Module:families/canonical names]] may also be used.]==]
function export.getByCanonicalName(name, errorIfInvalid, allowEtymLang, allowFamily)
local byName = load_data("Module:languages/canonical names")
local code = byName and byName[name]
if not code and allowEtymLang then
byName = load_data("Module:etymology languages/canonical names")
code = byName and byName[name] or
byName[gsub(name, " [Ss]ubstrate$", "")] or
byName[gsub(name, "^a ", "")] or
byName[gsub(name, "^a ", ""):gsub(" [Ss]ubstrate$", "")] or
-- For etymology families like "ira-pro".
-- FIXME: This is not ideal, as it allows " languages" to be appended to any etymology-only language, too.
byName[match(name, "^(.*) languages$")]
end
if not code and allowFamily then
byName = load_data("Module:families/canonical names")
code = byName[name] or byName[match(name, "^(.*) languages$")]
end
local retval = code and get_by_code(code, errorIfInvalid, allowEtymLang, allowFamily)
if not retval and errorIfInvalid then
require("Module:languages/errorGetBy").canonicalName(name, allowEtymLang, allowFamily)
end
return retval
end
--[==[Used by [[Module:languages/data/2]] (et al.) and [[Module:etymology languages/data]], [[Module:families/data]], [[Module:scripts/data]] and [[Module:writing systems/data]] to finalize the data into the format that is actually returned.]==]
function export.finalizeData(data, main_type, variety)
local fields = {"type"}
if main_type == "language" then
insert(fields, 4) -- script codes
insert(fields, "ancestors")
insert(fields, "link_tr")
insert(fields, "override_translit")
insert(fields, "wikimedia_codes")
elseif main_type == "script" then
insert(fields, 3) -- writing system codes
end -- Families and writing systems have no extra fields to process.
local fields_len = #fields
for _, entity in next, data do
if variety then
-- Move parent from 3 to "parent" and family from "family" to 3. These are different for the sake of convenience, since very few varieties have the family specified, whereas all of them have a parent.
entity.parent, entity[3], entity.family = entity[3], entity.family
-- Give the type "regular" iff not a variety and no other types are assigned.
elseif not (entity.type or entity.parent) then
entity.type = "regular"
end
for i = 1, fields_len do
local key = fields[i]
local field = entity[key]
if field and type(field) == "string" then
entity[key] = gsub(field, "%s*,%s*", ",")
end
end
end
return data
end
--[==[For backwards compatibility only; modules should require the error themselves.]==]
function export.err(lang_code, param, code_desc, template_tag, not_real_lang)
return require("Module:languages/error")(lang_code, param, code_desc, template_tag, not_real_lang)
end
return export
hen6s6wbv7hthor9k3teh6x7me72099
Mòideal:languages/doc
828
3593
86203
75279
2026-07-21T11:00:06Z
Altronic
4137
Copy from English Wiktionary
86203
wikitext
text/x-wiki
{{language data search}}
This module is used to retrieve and manage the languages that can have Wiktionary entries, and the information associated with them. See [[Wiktionary:Languages]] for more information.
For the languages and language varieties that may be used in etymologies, see [[Module:etymology languages]]. For language families, which sometimes also appear in etymologies, see [[Module:families]].
This module provides access to other modules. To access the information from within a template, see [[Module:languages/templates]].
The information itself is stored in the various data modules that are subpages of this module. These modules should '''not''' be used directly by any other module, the data should only be accessed through the functions provided by this module.
Data submodules:
* [[Module:languages/data/2|Two-letter codes]]
* Three-letter codes by their first letter: {{#invoke:string/templates|gsub|abcdefghijklmnopqrstuvwxyz|%a|<nowiki /> [[Module:languages/data/3/%1| %1 ]]}}
* [[Module:languages/data/exceptional|Longer codes containing hyphens (<code>-</code>)]]
Extra data submodules (for less frequently used data):
* [[Module:languages/data/2/extra|Two-letter codes]]
* Three-letter codes by their first letter: {{#invoke:string/templates|gsub|abcdefghijklmnopqrstuvwxyz|%a|<nowiki /> [[Module:languages/data/3/%1/extra| %1 ]]}}
* [[Module:languages/data/exceptional/extra|Longer codes containing hyphens (<code>-</code>)]]
==Finding and retrieving languages==
The module exports a number of functions that are used to find languages.
{{module documentation|section_level=3|identifier=^export}}
==Language objects==
A <code class="nf">Language</code> object is returned from one of the functions above. It is a Lua representation of a language and the data associated with it. It has a number of methods that can be called on it, using the <code>:</code> syntax. For example:
<syntaxhighlight lang="lua">
local m_languages = require("Module:languages")
local lang = m_languages.getByCode("fr")
local name = lang:getCanonicalName()
-- "name" will now be "French"
</syntaxhighlight>
{{module documentation|section_level=3|identifier=^Language|omit_intro=1}}
==Error function==
See [[Module:languages/error]].
==Subpages==
{{subpages|Module:languages}}
==See also==
* [[Module:families]]
<includeonly>
{{module cat|-|Language and script,JSON-generating}}
</includeonly>
ozfb44egvrsll6kcf9f1s53umjfstom
Teamplaid:documentation
10
3600
86211
76381
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation]] gu [[Teamplaid:documentation]]
76381
wikitext
text/x-wiki
{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude>
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
<!--
{{Documentation}}
-->
</noinclude>
cums0lo5ougx6r80l0ruenn442zkej0
86280
86211
2026-07-22T06:39:02Z
Altronic
4137
86280
wikitext
text/x-wiki
{{#invoke:documentation|show|hr=above}}
j0s13scsii7qihzcaj44tsxynimxx68
Mòideal:documentation
828
3601
86249
67449
2026-07-21T22:57:56Z
Altronic
4137
Copy from English Wiktionary
86249
Scribunto
text/plain
local export = {}
local array_module = "Module:array"
local debug_track_module = "Module:debug/track"
local frame_module = "Module:frame"
local fun_is_callable_module = "Module:fun/isCallable"
local languages_module = "Module:languages"
local links_module = "Module:links"
local load_module = "Module:load"
local module_categorization_module = "Module:module categorization"
local number_list_show_module = "Module:number list/show"
local chemical_element_list_show_module = "Module:chemical element list/show"
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
local scripts_module = "Module:scripts"
local string_endswith_module = "Module:string/endswith"
local string_gline_module = "Module:string/gline"
local string_insert_module = "Module:string/insert"
local string_startswith_module = "Module:string/startswith"
local string_utilities_module = "Module:string utilities"
local template_parser_module = "Module:template parser"
local title_exists_module = "Module:title/exists"
local title_new_title_module = "Module:title/newTitle"
local concat = table.concat
local error = error
local full_url = mw.uri.fullUrl
local get_current_title = mw.title.getCurrentTitle
local insert = table.insert
local ipairs = ipairs
local list_to_text = mw.text.listToText
local new_message = mw.message.new
local pcall = pcall
local require = require
local tonumber = tonumber
local tostring = tostring
local type = type
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function Array(...)
Array = require(array_module)
return Array(...)
end
local function categorize_module(...)
categorize_module = require(module_categorization_module).categorize
return categorize_module(...)
end
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function endswith(...)
endswith = require(string_endswith_module)
return endswith(...)
end
local function expand_template(...)
expand_template = require(frame_module).expandTemplate
return expand_template(...)
end
local function find_templates(...)
find_templates = require(template_parser_module).find_templates
return find_templates(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function get_lang(...)
get_lang = require(languages_module).getByCode
return get_lang(...)
end
local function get_pagetype(...)
get_pagetype = require(pages_module).get_pagetype
return get_pagetype(...)
end
local function get_script(...)
get_script = require(scripts_module).getByCode
return get_script(...)
end
local function gline(...)
gline = require(string_gline_module)
return gline(...)
end
local function is_callable(...)
is_callable = require(fun_is_callable_module)
return is_callable(...)
end
local function is_documentation(...)
is_documentation = require(pages_module).is_documentation
return is_documentation(...)
end
local function is_sandbox(...)
is_sandbox = require(pages_module).is_sandbox
return is_sandbox(...)
end
local function new_title(...)
new_title = require(title_new_title_module)
return new_title(...)
end
local function number_list_show_table(...)
number_list_show_table = require(number_list_show_module).table
return number_list_show_table(...)
end
local function chemical_element_list_show_table(...)
chemical_element_list_show_table = require(chemical_element_list_show_module).table
return chemical_element_list_show_table(...)
end
local function preprocess(...)
preprocess = require(frame_module).preprocess
return preprocess(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function safe_load_data(...)
safe_load_data = require(load_module).safe_load_data
return safe_load_data(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function startswith(...)
startswith = require(string_startswith_module)
return startswith(...)
end
local function string_insert(...)
string_insert = require(string_insert_module)
return string_insert(...)
end
local function title_exists(...)
title_exists = require(title_exists_module)
return title_exists(...)
end
local function ugsub(...)
ugsub = require(string_utilities_module).gsub
return ugsub(...)
end
local function umatch(...)
umatch = require(string_utilities_module).match
return umatch(...)
end
local skins = {
["common"] = "",
["vector"] = "Vector",
["monobook"] = "Monobook",
["cologneblue"] = "Cologne Blue",
["modern"] = "Modern",
}
local function track(page)
debug_track("documentation/" .. page)
return true
end
local function compare_pages(page1, page2, text)
return "[" .. tostring(
full_url("Special:ComparePages", { page1 = page1, page2 = page2 }))
.. " " .. text .. "]"
end
-- Avoid transcluding [[Module:languages/cache]] everywhere.
local lang_cache = setmetatable({}, {
__index = function(self, k)
return require("Module:languages/cache")[k]
end
})
local function zh_link(word)
return full_link {
lang = lang_cache.zh,
term = word
}
end
local function make_languages_data_documentation(title, cats, division)
local doc_template, module_cat
if endswith(division, "/extra") then
division = division:sub(1, -7)
doc_template = "language extradata documentation"
module_cat = "Language extra data modules"
else
doc_template = "language data documentation"
module_cat = "Language data modules"
end
local sort_key
if division == "exceptional" then
sort_key = "x"
else
sort_key = division:gsub("/", "")
end
cats:insert(module_cat .. "|" .. sort_key)
return {
title = doc_template
}
end
local function make_Unicode_data_documentation(title, cats)
local subpage, first_three_of_code_point
= title.fullText:match("^Module:Unicode data/([^/]+)/(%x%x%x)$")
if subpage == "names" or subpage == "images" or subpage == "emoji images" then
local low, high =
tonumber(first_three_of_code_point .. "000", 16),
tonumber(first_three_of_code_point .. "FFF", 16)
local text, text_type
if subpage == "names" then
text_type = "titles of images"
elseif subpage == "images" then
text_type = "titles of images"
elseif subpage == "emoji images" then
text_type = "emoji-style images"
end
text = string.format(
"This data module contains the " .. text_type .. " of " ..
"[[Appendix:Unicode|Unicode]] code points within the range U+%04X to U+%04X.",
low, high)
if subpage == "images" and safe_load_data("Module:Unicode data/emoji images/" .. first_three_of_code_point) then
text = text ..
" This list includes the text variants of emojis. For the list of emoji variants of those characters, see [[Module:Unicode data/emoji images/" ..
first_three_of_code_point .. "]]."
elseif subpage == "emoji images" then
text = text ..
" For text-style images, see [[Module:Unicode data/images/" .. first_three_of_code_point .. "]]."
end
return text
end
end
local function insert_lang_data_module_cats(cats, langcode, overall_data_module_cat)
local lang = lang_cache[langcode]
if lang then
local langname
if lang._fullCode then
langname = lang_cache[lang._fullCode]:getCanonicalName()
else
langname = lang:getCanonicalName()
end
cats:insert(overall_data_module_cat .. "|" .. langname)
cats:insert(langname .. " modules")
cats:insert(langname .. " data modules")
return lang, langname
end
end
--[=[
This provides categories and documentation for various data modules, so that [[Category:Uncategorized modules]] isn't
unnecessarily cluttered. It is a list of tables, each of which have the following possible fields:
`regex` (required): A Lua pattern to match the module's title. If it matches, the data in this entry will be used.
Any captures in the pattern can by referenced in the `cat` field using %1 for the first capture, %2 for the
second, etc. (often used for creating the sortkey for the category). In addition, the captures are passed to the
`process` function as the third and subsequent parameters.
`process` (optional): This may be a function or a string. If it is a function, it is called as follows:
`process(TITLE, CATS, CAPTURE1, CAPTURE2, ...)`
where:
* TITLE is a title object describing the module's title; see
[https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Title_objects].
* CATS is an array object (see [[Module:array]]) of categories that the module will be added to.
* CAPTURE1, CAPTURE2, ... contain any captures in the `regex` field.
The return value of `process` should either be a string (which will be used as the module's documentation), or a
table specifying the name of a template to expand to get the documentation, along with the arguments to that
template. In the latter format, the template name (bare, without the "Template:" prefix) should be in the `title`
field, and any arguments should be in `args; in this case, the template name will be listed above the generated
documentation as the source of the documentation, along with an edit button to edit the template's contents.
If, however, the return value of the `process` function is a string, any template invocations will be expanded
using frame:preprocess(), and [[Module:documentation]] will be listed as the source of the documentation.
If `process` itself is a string rather than a function, it should name a submodule under
[[Module:documentation/functions/]] which returns a function, of the same type as described above. This submodule
will be specified as the source of the documentation (unless it returns a table naming a template to expand to get
the documentation, as described above).
If `process` is omitted entirely, the module will have no documentation.
`cat` (optional): A string naming the category into which the module should be placed, or a list of such strings.
Captures specified in `regex` may be referenced in this string using %1 for the first capture, %2 for the second,
etc. It is also possible to add categories in the `process` function by inserting them into the passed-in CATS
array (the second parameter).
]=]
local module_regex = {
{
regex = "^Module:languages/data/(3/%l/extra)$",
process = make_languages_data_documentation,
},
{
regex = "^Module:languages/data/(3/%l)$",
process = make_languages_data_documentation,
},
{
regex = "^Module:languages/data/(2/extra)$",
process = make_languages_data_documentation,
},
{
regex = "^Module:languages/data/(2)$",
process = make_languages_data_documentation,
},
{
regex = "^Module:languages/data/(exceptional/extra)$",
process = make_languages_data_documentation,
},
{
regex = "^Module:languages/data/(exceptional)$",
process = make_languages_data_documentation,
},
{
regex = "^Module:languages/.+$",
cat = "Language and script modules",
},
{
regex = "^Module:scripts/.+$",
cat = "Language and script modules",
},
{
regex = "^Module:data tables/data..?.?.?$",
cat = "Reference module sharded data tables",
},
{
regex = "^Module:zh/data/dial%-pron/.+$",
cat = "Chinese dialectal pronunciation data modules",
process = "zh dial or syn",
},
{
regex = "^Module:zh/data/dial%-syn/.+$",
cat = "Chinese dialect synonyms data modules",
process = "zh dial or syn",
},
{
regex = "^Module:zh/data/glyph%-data/.+$",
cat = "Chinese historical character forms data modules",
process = function(title, cats)
local character = title.fullText:match("^Module:zh/data/glyph%-data/(.+)")
if character then
return ("This module contains data on historical forms of the Chinese character %s.")
:format(zh_link(character))
end
end,
},
{
regex = "^Module:zh/data/ltc%-pron/(.+)$",
cat = "Middle Chinese pronunciation data modules|%1",
process = "zh data",
},
{
regex = "^Module:zh/data/och%-pron%-BS/(.+)$",
cat = "Old Chinese (Baxter-Sagart) pronunciation data modules|%1",
process = "zh data",
},
{
regex = "^Module:zh/data/och%-pron%-ZS/(.+)$",
cat = "Old Chinese (Zhengzhang) pronunciation data modules|%1",
process = "zh data",
},
{
-- capture rest of zh/data submodules
regex = "^Module:zh/data/(.+)$",
cat = "Chinese data modules|%1",
},
{
regex = "^Module:mul/guoxue%-data/cjk%-?(.*)$",
process = "guoxue-data",
},
{
regex = "^Module:Unicode data/(.+)$",
cat = "Unicode data modules|%1",
process = make_Unicode_data_documentation,
},
{
regex = "^Module:number list/data/(.+)$",
process = function(title, cats, lang_code)
local lang = insert_lang_data_module_cats(cats, lang_code, "Number data modules")
if lang then
return ("This module contains data on various types of numbers in %s.\n%s")
:format(lang:makeCategoryLink(), number_list_show_table() or "")
end
end,
},
{
regex = "^Module:chemical element list/data/(.+)$",
process = function(title, cats, lang_code)
local lang = insert_lang_data_module_cats(cats, lang_code, "Chemical element data modules")
if lang then
return ("This module contains data on chemical elements in %s.\n%s")
:format(lang:makeCategoryLink(), chemical_element_list_show_table() or "")
end
end,
},
{
regex = "^Module:accel/(.+)$",
process = function(title, cats)
local lang_code = title.subpageText
local lang = lang_cache[lang_code]
if lang then
cats:insert(lang:getCanonicalName() .. " modules|accel")
cats:insert(("Accel submodules|%s"):format(lang:getCanonicalName()))
return ("This module contains new entry creation rules for %s; see [[WT:ACCEL]] for an overview, and [[Module:accel]] for information on creating new rules.")
:format(lang:makeCategoryLink())
end
end,
},
{
regex = "^Module:inc%-ash/dial/data/(.+)$",
cat = "Ashokan Prakrit modules|%1",
process = function(title, cats)
local word = title.fullText:match("^Module:inc%-ash/dial/data/(.+)$")
if word then
local lang = lang_cache["inc-ash"]
return ("This module contains data on the pronunciation of %s in dialects of %s.")
:format(full_link({ term = word, lang = lang }, "term"),
lang:makeCategoryLink())
end
end,
},
{
regex = "^.+%-translit$",
process = "translit",
},
{
regex = "^Module:form of/lang%-data/(.+)$",
process = function(title, cats, lang_code)
local lang, langname = insert_lang_data_module_cats(cats, lang_code, "Language-specific form-of modules")
if lang then
-- FIXME, display more info.
return "This module contains language-specific form-of data (tags, shortcuts, base lemma params. etc.) for " ..
langname .. "."
end
end
},
{
regex = "^Module:labels/data/lang/(.+)$",
process = function(title, cats, lang_code)
local lang = insert_lang_data_module_cats(cats, lang_code, "Language-specific label data modules")
if lang then
return {
title = "label language-specific data documentation",
args = { [1] = lang_code },
}
end
end
},
{
regex = "^Module:category tree/lang/(.+)$",
process = function(title, cats, lang_code)
local lang, langname = insert_lang_data_module_cats(cats, lang_code, "Category tree data modules/lang")
if lang then
return "This module handles generating the descriptions and categorization for " ..
langname .. " category pages "
.. "of the format \"" .. langname .. " LABEL\" where LABEL can be any text. Examples are "
.. "[[:Category:Bulgarian conjugation 2.1 verbs]] and [[:Category:Russian velar-stem neuter-form nouns]]. "
.. "This module is part of the category tree system, which is a general framework for generating the "
.. "descriptions and categorization of category pages.\n\n"
.. "For more information, see [[Module:category tree/lang/documentation]].\n\n"
.. "'''NOTE:''' If you add a new language-specific module, you must add the language code to the "
.. "list at the top of [[Module:category tree/lang]] in order for the module to be recognized."
end
end
},
{
regex = "^Module:category tree/topic/(.+)$",
process = function(title, cats, submodule)
cats:insert("Category tree data modules/topic| ")
return {
title = "topic cat data submodule documentation"
}
end
},
{
regex = "^Module:category tree/(.+)$",
process = function(title, cats, submodule)
cats:insert("Category tree data modules| ")
return {
title = "category tree data submodule documentation"
}
end
},
{
regex = "^Module:ja/data/(.+)$",
cat = "Japanese data modules|%1",
},
{
regex = "^Module:fi%-dialects/data/feature/Kettunen1940 ([0-9]+)$",
cat = "Finnish dialectal data atlas modules|%1",
process = function(title, cats, shard)
return "This module contains shard " .. shard .. " of the online version of Lauri Kettunen's 1940 work " ..
"''Suomen murteet III A. Murrekartasto'' (\"Finnish dialects III A: Dialect atlas\"). " ..
"It was imported and converted from urn:nbn:fi:csc-kata20151130145346403821, published by the " ..
"''Kotimaisten kielten keskus'' under the CC BY 4.0 license."
end
},
{
regex = "^Module:fi%-dialects/data/feature/(.+)",
cat = "Finnish dialectal data modules|%1",
},
{
regex = "^Module:fi%-dialects/data/word/(.+)",
cat = "Finnish dialectal data modules|%1",
},
{
regex = "^Module:Swadesh/data/([%l-]+)$",
process = function(title, cats, lang_code)
local lang, langname = insert_lang_data_module_cats(cats, lang_code, "Swadesh modules")
if lang then
return "This module contains the [[Swadesh list]] of basic vocabulary in " .. langname .. "."
end
end
},
{
regex = "^Module:Swadesh/data/([%l-]+)/([^/]*)$",
process = function(title, cats, lang_code, variety)
local lang, langname = insert_lang_data_module_cats(cats, lang_code, "Swadesh modules")
if lang then
local prefix = "This module contains the [[Swadesh list]] of basic vocabulary in the "
local etym_lang = get_lang(variety, nil, "allow etym")
if etym_lang then
return ("%s %s variety of %s."):format(prefix, etym_lang:getCanonicalName(), langname)
end
local script = get_script(variety)
if script then
return ("%s %s %s script."):format(prefix, langname, script:getCanonicalName())
end
return ("%s %s variety of %s."):format(prefix, variety, langname)
end
end
},
{
regex = "^Module:typing%-aids",
process = function(title, cats)
local data_suffix = title.fullText:match("^Module:typing%-aids/data/(.+)$")
local sortkey
if data_suffix then
if data_suffix:find "^[%l-]+$" then
local lang = get_lang(data_suffix)
if lang then
sortkey = lang:getCanonicalName()
cats:insert(sortkey .. " data modules")
end
elseif data_suffix:find "^%u%l%l%l$" then
local script = get_script(data_suffix)
if script then
sortkey = script:getCanonicalName()
cats:insert(script:getCategoryName())
end
end
cats:insert("Character insertion data modules|" .. (sortkey or data_suffix))
end
end,
},
{
regex = "^Module:R:([%l-]+):(.+)$",
process = function(title, cats, lang_code, refname)
local lang = lang_cache[lang_code]
if lang then
cats:insert(lang:getCanonicalName() .. " modules|" .. refname)
cats:insert(("Reference modules|%s"):format(lang:getCanonicalName()))
return "This module implements the reference template {{temp|R:" .. lang_code .. ":" .. refname .. "}}."
end
end,
},
{
regex = "^Module:Quotations/([%l-]+)/?(.*)",
process = "Quotation",
},
{
regex = "^Module:affix/lang%-data/([%l-]+)",
process = "affix lang-data",
},
{
regex = "^Module:dialect synonyms/([%l-]+)$",
process = function(title, cats, lang_code)
local lang = lang_cache[lang_code]
if lang then
local langname = lang:getCanonicalName()
cats:insert("Dialect synonyms data modules|" .. langname)
cats:insert(langname .. " dialect synonyms data modules| ")
return "This module contains data on specific varieties of " .. langname .. ", for use by " ..
"{{tl|dialect synonyms}}. The actual synonyms themselves are contained in submodules.\n\n" ..
"==== Language data module structure ====\n" ..
"* <code>export.title</code> — optional; table title template (e.g. \"Regional synonyms of %s\").\n" ..
"* <code>export.columns</code> — optional; list of column headers for location hierarchy (e.g. {\"Dialect group\", \"Dialect\", \"Location\"}).\n" ..
"* <code>export.notes</code> — optional; table of note keys to text.\n" ..
"* <code>export.sources</code> — optional; table of source keys to text.\n" ..
"* <code>export.note_aliases</code> — optional; alias map for notes.\n" ..
"* <code>export.varieties</code> — required; nested table of variety nodes. Each node must have <code>name</code>; array part holds children. Node keys can include <code>text_display</code>, <code>color</code>, <code>code</code>, <code>wikidata</code>, <code>lat</code>, <code>long</code>, and language-specific keys (e.g. <code>persian</code>, <code>armenian</code>, <code>chinese</code>).\n\n" ..
expand_template({ title = 'dial syn', args = { lang_code, ["demo mode"] = "y" } })
end
end,
},
{
regex = "^Module:dialect synonyms/([%l-]+)/([^/]+)$",
process = function(title, cats, lang_code, term)
local lang = lang_cache[lang_code]
if lang then
local langname = lang:getCanonicalName()
cats:insert("Dialect synonyms data modules|" .. langname)
cats:insert(langname .. " dialect synonyms data modules|" .. term)
return ("%s\n\n%s"):format(
"==== Term/sense module structure ====\n" ..
"* <code>export.title</code> — optional; custom table title (e.g. \"Realization of 'strong R' between vowels\"). Overrides the language default.\n" ..
"* <code>export.meaning</code> — optional; meaning/gloss (alternative to <code>gloss</code>).\n" ..
"* <code>export.gloss</code> — optional; short meaning for the table.\n" ..
"* <code>export.note</code> — optional; single note key or string, or list of note keys.\n" ..
"* <code>export.notes</code> — optional; list of note keys.\n" ..
"* <code>export.source</code> / <code>export.sources</code> — optional; source keys.\n" ..
"* <code>export.last_column</code> — optional; label for the data column (default \"Words\"; e.g. \"Realization\").\n" ..
"* <code>export.syns</code> — required; table mapping variety/location names (keys from the language data module) to a list of term entries. Each entry can be a string or a table (e.g. <code>{ ipa = \"[ɽ]\" }</code> or <code>{ term = \"word\" }</code>).\n\n" ..
"Example (custom title and data column, IPA realizations):\n" ..
"<pre>\nlocal export = {}\n\nexport.title = \"Realization of 'strong R' between vowels\"\n" ..
"export.meaning = \"\"\nexport.note = \"realization of 'strong R' between vowels\"\n" ..
"export.last_column = \"Realization\"\n\nexport.syns = {\n\t[\"ALERS-158\"] = { { ipa = \"[ɽ]\" } },\n\t[\"ALERS-175\"] = { { ipa = \"[x]\" } },\n}\n\nreturn export\n</pre>\n\n",
expand_template({ title = 'dial syn', args = { lang_code, term } }))
end
end,
},
{
regex = "^Module:dialect synonyms/([%l-]+)/([^/]+)/([^/]+)$",
process = function(title, cats, lang_code, term, id)
local lang = lang_cache[lang_code]
if lang then
local langname = lang:getCanonicalName()
cats:insert("Dialect synonyms data modules|" .. langname)
cats:insert(langname .. " dialect synonyms data modules|" .. term)
return ("%s\n\n%s"):format(
"==== Term/sense module structure ====\n" ..
"* <code>export.title</code> — optional; custom table title (e.g. \"Realization of 'strong R' between vowels\"). Overrides the language default.\n" ..
"* <code>export.meaning</code> — optional; meaning/gloss (alternative to <code>gloss</code>).\n" ..
"* <code>export.gloss</code> — optional; short meaning for the table.\n" ..
"* <code>export.note</code> — optional; single note key or string, or list of note keys.\n" ..
"* <code>export.notes</code> — optional; list of note keys.\n" ..
"* <code>export.source</code> / <code>export.sources</code> — optional; source keys.\n" ..
"* <code>export.last_column</code> — optional; label for the data column (default \"Words\"; e.g. \"Realization\").\n" ..
"* <code>export.syns</code> — required; table mapping variety/location names (keys from the language data module) to a list of term entries. Each entry can be a string or a table (e.g. <code>{ ipa = \"[ɽ]\" }</code> or <code>{ term = \"word\" }</code>).\n\n" ..
"Example (custom title and data column, IPA realizations):\n" ..
"<pre>\nlocal export = {}\n\nexport.title = \"Realization of 'strong R' between vowels\"\n" ..
"export.meaning = \"\"\nexport.note = \"realization of 'strong R' between vowels\"\n" ..
"export.last_column = \"Realization\"\n\nexport.syns = {\n\t[\"ALERS-158\"] = { { ipa = \"[ɽ]\" } },\n\t[\"ALERS-175\"] = { { ipa = \"[x]\" } },\n}\n\nreturn export\n</pre>\n\n",
expand_template({ title = 'dial syn', args = { lang_code, term, id = id } }))
end
end,
},
{
regex = "^Module:bibliography/data/([%l-]+)$",
process = function(title, cats, lang_code)
if lang_code == "preload" then
return 'Used as a base model for other languages when the button "create new language submodule" is clicked.'
end
local page = require(title.fullText).bib_page
if not page then
page = lang_cache[lang_code]:getCanonicalName()
if page then
cats:insert(page .. " modules")
end
end
cats:insert("Reference modules")
return "This module holds bibliographical data for " ..
page .. ". For the formatted bibliography see '''[[Appendix:Bibliography/" .. page .. "]]'''."
end,
},
}
function export.show(frame)
local boolean_default_false = { type = "boolean", default = false }
local args = process_params(frame.args, {
["hr"] = true,
["for"] = true,
["from"] = true,
["allowondoc"] = boolean_default_false, -- Don't throw an error if used on a documentation subpage.
["notsubpage"] = boolean_default_false,
["nodoc"] = boolean_default_false,
["nolinks"] = boolean_default_false, -- suppress all "Useful links"
["nosandbox"] = boolean_default_false, -- supress sandbox
})
local output = Array('\n<div class="documentation" style="display:block; clear:both">\n')
local cats = Array()
local nodoc = args.nodoc
if (not args.hr) or (args.hr == "above") then
output:insert("----\n")
end
local title = args["for"] and new_title(args["for"]) or get_current_title()
local doc_title = args.from ~= "-" and new_title(args.from or title.fullText .. '/documentation') or nil
local contentModel = title.contentModel
local pagetype, is_script_or_stylesheet = get_pagetype(title)
local preload, fallback_docs, doc_content, old_doc_title, user_name, skin_name, needs_doc
local doc_content_source = "Module:documentation"
local auto_generated_cat_source
local cats_auto_generated = false
if not args.allowondoc and is_documentation(title) then
-- TODO: merge with {{documentation subpage}}, and choose behaviour based on the page type.
error("This template should not be used on a documentation page. Please use [[Template:documentation subpage]].")
elseif is_sandbox(title) then
local sandbox_ns = title.nsText
preload = ("Template:documentation/preload%s%sSandbox"):format(
sandbox_ns == "Module" and sandbox_ns or "Template",
title.rootText:match("^[Uu]ser:(.+)") and "User" or ""
)
elseif pagetype:match("%f[%w]gadget%f[%W]") then
preload = "Template:documentation/preloadGadget"
elseif pagetype:match("%f[%w]script%f[%W]") then -- .js
if title.nsText == "MediaWiki" then
preload = "Template:documentation/preloadMediaWikiJavaScript"
else
preload = "Template:documentation/preloadTemplate" -- XXX
if title.nsText == "User" then
user_name = title.rootText
end
end
is_script_or_stylesheet = true
elseif pagetype:match("%f[%w]stylesheet%f[%W]") then -- .css
preload = "Template:documentation/preloadTemplate" -- XXX
if title.nsText == "User" then
user_name = title.rootText
end
is_script_or_stylesheet = true
elseif contentModel == "Scribunto" then -- Exclude pages in Module: which aren't Scribunto.
preload = "Template:documentation/preloadModule"
elseif pagetype:match("%f[%w]template%f[%W]") or pagetype:match("%f[%w]project%f[%W]") then
preload = "Template:documentation/preloadTemplate"
end
if doc_title and doc_title.isRedirect then
old_doc_title = doc_title
doc_title = doc_title.redirectTarget
end
output:insert("<dl class=\"plainlinks\" style=\"font-size: smaller;\">")
local function get_module_doc_and_cats(categories_only)
cats_auto_generated = true
local automatic_cats = nil
if user_name then
fallback_docs = "documentation/fallback/user module"
automatic_cats = { "User sandbox modules" }
else
for _, data in ipairs(module_regex) do
local captures = { umatch(title.fullText, data.regex) }
if #captures > 0 then
local cat, process_function
if is_callable(data.process) then
process_function = data.process
elseif type(data.process) == "string" then
doc_content_source = "Module:documentation/functions/" .. data.process
process_function = require(doc_content_source)
end
if process_function then
doc_content = process_function(title, cats, unpack(captures))
end
if type(doc_content) == "table" then
doc_content_source = doc_content.title and "Template:" .. doc_content.title or doc_content_source
doc_content = expand_template(doc_content)
elseif doc_content ~= nil then
doc_content = preprocess(doc_content)
end
cat = data.cat
if cat then
if type(cat) == "string" then
cat = { cat }
end
for _, c in ipairs(cat) do
insert(cats, (ugsub(title.fullText, data.regex, c)))
end
end
break
end
end
end
if title.subpageText == "templates" then
cats:insert("Template interface modules")
end
if automatic_cats then
for _, c in ipairs(automatic_cats) do
cats:insert(c)
end
end
if #cats == 0 then
local auto_cats = categorize_module(frame, "return raw", "noerror")
if #auto_cats > 0 then
auto_generated_cat_source = "Module:module categorization"
end
for _, category in ipairs(auto_cats) do
cats:insert(category)
end
end
-- meaning module is not in user’s sandbox or one of many datamodule boring series
needs_doc = not categories_only and not (automatic_cats or doc_content or fallback_docs)
end
-- Override automatic documentation, if present.
if doc_title and doc_title.exists then
local cats_auto_generated_text = ""
if contentModel == "Scribunto" then
local doc_page_content = doc_title.content
-- Track then do nothing if there are uses of includeonly. The
-- pattern is slightly too permissive, but any false-positives are
-- obvious typos that should be corrected.
if doc_page_content:lower():match("</?includeonly%f[%s/>][^>]*>") then
track("module-includeonly")
else
-- Check for uses of {{module cat}}. find_templates treats the
-- input as transcluded by default (i.e. it parses the wikitext
-- which will be transcluded through to the module page).
local module_cat
for template in find_templates(doc_page_content) do
if template:get_name() == "module cat" then
module_cat = true
break
end
end
if not module_cat then
get_module_doc_and_cats("categories only")
auto_generated_cat_source = auto_generated_cat_source or doc_content_source
cats_auto_generated_text = " Categories were auto-generated by [[" ..
auto_generated_cat_source .. "]]. <sup>[[" ..
new_title(auto_generated_cat_source):fullUrl { action = "edit" } .. " edit]]</sup>"
end
end
end
output:insert(
"<dd><i style=\"font-size: larger;\">The following " ..
"[[Help:Documenting templates and modules|documentation]] is located at [[" ..
doc_title.fullText .. "]]. " .. "<sup>[[" .. doc_title:fullUrl { action = "edit" } .. " edit]]</sup>" ..
cats_auto_generated_text .. "</i></dd>")
else
if contentModel == "Scribunto" then
get_module_doc_and_cats(false)
elseif title.nsText == "Template" then
--cats:insert("Uncategorized templates")
needs_doc = not (fallback_docs or nodoc)
elseif user_name and is_script_or_stylesheet then
skin_name = skins[title.text:sub(#title.rootText + 1):match("^/(%l+)%.[jc]ss?$")]
if skin_name then
fallback_docs = "documentation/fallback/user " .. contentModel
end
end
if doc_content then
output:insert(
"<dd><i style=\"font-size: larger;\">The following " ..
"[[Help:Documenting templates and modules|documentation]] is " ..
"generated by [[" .. doc_content_source .. "]]. <sup>[[" ..
new_title(doc_content_source):fullUrl { action = "edit" } ..
" edit]]</sup> </i></dd>")
elseif not nodoc then
if doc_title then
output:insert(
"<dd><i style=\"font-size: larger;\">This " .. pagetype ..
" lacks a [[Help:Documenting templates and modules|documentation subpage]]. " ..
(fallback_docs and "You may " or "Please ") ..
"[" .. doc_title:fullUrl { action = "edit", preload = preload }
.. " create it].</i></dd>\n")
else
output:insert(
"<dd><i style=\"font-size: larger; color: var(--wikt-palette-red-9,#FF0000);\">Unable to auto-generate " ..
"documentation for this " .. pagetype .. ".</i></dd>\n")
end
end
end
if startswith(title.fullText, "MediaWiki:Gadget-") then
local is_gadget = false
for line in gline(new_title("MediaWiki:Gadgets-definition").content) do
local gadget, items = line:match("^%*%s*(%a[%w_-]*)%[.-%]|(.+)$")
if not gadget then
gadget, items = line:match("^%*%s*(%a[%w_-]*)|(.+)$")
end
if gadget then
items = Array(split(items, "|"))
for i, item in ipairs(items) do
if title.fullText == ("MediaWiki:Gadget-" .. item) then
is_gadget = true
output:insert("<dd> ''This script is a part of the <code>")
output:insert(gadget)
output:insert("</code> gadget ([")
output:insert(tostring(full_url("MediaWiki:Gadgets-definition", { action = "edit" })))
output:insert(" edit definitions])'' <dl>")
output:insert("<dd> ''Description ([")
output:insert(tostring(full_url("MediaWiki:Gadget-" .. gadget, { action = "edit" })))
output:insert(" edit])'': ")
output:insert(preprocess(new_message('Gadget-' .. gadget):plain()))
output:insert(" </dd>")
items:remove(i)
if #items > 0 then
for j, item in ipairs(items) do
items[j] = '[[MediaWiki:Gadget-' .. item .. '|' .. item .. ']]'
end
output:insert("<dd> ''Other parts'': ")
output:insert(list_to_text(items))
output:insert("</dd>")
end
output:insert("</dl></dd>")
break
end
end
end
end
if not is_gadget then
output:insert("<dd> ''This script is not a part of any [")
output:insert(tostring(full_url("Special:Gadgets", { uselang = "en" })))
output:insert(' gadget] ([')
output:insert(tostring(full_url("MediaWiki:Gadgets-definition", { action = "edit" })))
output:insert(' edit definitions]).</dd>')
-- else
-- cats:insert("Wiktionary gadgets")
end
end
if old_doc_title then
output:insert("<dd> ''Redirected from'' [")
output:insert(old_doc_title:fullUrl { redirect = "no" })
output:insert(" ")
output:insert(old_doc_title.fullText)
output:insert("] ([")
output:insert(old_doc_title:fullUrl { action = "edit" })
output:insert(" edit]).</dd>\n")
end
if not args.nolinks then
local links = Array()
if title.isSubpage and not args.notsubpage then
links:insert("[[:" .. title.nsText .. ":" .. title.rootText .. "|root page]]")
links:insert("[[Special:PrefixIndex/" .. title.nsText .. ":" .. title.rootText .. "/|root page’s subpages]]")
else
links:insert("[[Special:PrefixIndex/" .. title.fullText .. "/|subpage list]]")
end
links:insert(
"[" ..
tostring(full_url("Special:WhatLinksHere/" .. title.fullText, { hidetrans = true, hideredirs = true })) ..
" links]")
if contentModel ~= "Scribunto" then
links:insert(
"[" ..
tostring(full_url("Special:WhatLinksHere/" .. title.fullText, { hidelinks = true, hidetrans = true })) ..
" redirects]")
end
if is_script_or_stylesheet then
if user_name then
links:insert("[[Special:MyPage" .. title.text:sub(#title.rootText + 1) .. "|your own]]")
end
else
links:insert(
"[" ..
tostring(full_url("Special:WhatLinksHere/" .. title.fullText, { hidelinks = true, hideredirs = true })) ..
" transclusions]")
end
if contentModel == "Scribunto" then
local is_testcases = title.isSubpage and title.subpageText == "testcases"
local without_subpage = title.nsText .. ":" .. title.baseText
if is_testcases then
links:insert("[[:" .. without_subpage .. "|tested module]]")
else
links:insert("[[" .. title.fullText .. "/testcases|testcases]]")
end
if user_name then
links:insert("[[User:" .. user_name .. "|user page]]")
links:insert("[[User talk:" .. user_name .. "|user talk page]]")
links:insert("[[Special:PrefixIndex/User:" .. user_name .. "/|userspace]]")
-- If sandbox module, add a link to the module that this is a sandbox of.
-- Exclude user sandbox modules like [[User:Dine2016/sandbox]].
elseif title.text:find("^sandbox%d*/") or title.text:find("/sandbox%d*%f[/%z]") then
cats:insert("Sandbox modules")
-- Sandbox modules don’t really need documentation.
needs_doc = false
-- Don't track user sandbox modules.
local text_title = new_title(title.text)
if not (text_title and text_title.nsText == "User") then
local diff
local sandbox_of = title.text:match("^(.*)/sandbox%d*%f[/%z]")
if sandbox_of then
track("sandbox to be moved")
else
sandbox_of = title.text:match("^sandbox%d*/(.*)$")
end
if not sandbox_of then
error(("Internal error: Something wrong, couldn't extract sandbox-of module from title '%s'")
:format(title.text))
end
sandbox_of = title.nsText .. ":" .. sandbox_of
if title_exists(sandbox_of) then
diff = " (" .. compare_pages(title.fullText, sandbox_of, "diff") .. ")"
else
track("no sandbox of")
end
links:insert("[[:" .. sandbox_of .. "|sandbox of]]" .. (diff or ""))
end
-- If not a sandbox module, add link to sandbox module.
-- Sometimes there are multiple sandboxes for a single module:
-- [[Module:sandbox/sa-pronunc]], [[Module:sandbox2/sa-pronunc]].
else
local sandbox_title
local user_prefix, user_rest = title.text:match("^(User:.-/)(.*)$")
if not user_prefix then
user_prefix = ""
user_rest = title.text
end
sandbox_title = title.nsText .. ":" .. user_prefix .. "sandbox/" .. user_rest
local sandbox_link = "[[:" .. sandbox_title .. "|sandbox]]"
local diff
if title_exists(sandbox_title) then
diff = " (" .. compare_pages(title.fullText, sandbox_title, "diff") .. ")"
end
links:insert(sandbox_link .. (diff or ""))
end
end
if title.nsText == "Template" then
-- Error search: all(any namespace), hastemplate (show pages using the template), insource (show source code), incategory (any/specific error) -- [[mw:Help:CirrusSearch]], [[w:Help:Searching/Regex]]
-- apparently same with/without: &profile=advanced&fulltext=1
local errorq = 'searchengineselect=mediawiki&search=all: hastemplate:\"' ..
title.rootText .. '\" insource:\"' .. title.rootText .. '\" incategory:'
local eincategory =
"Pages_with_module_errors|ParserFunction_errors|DisplayTitle_errors|Pages_with_ISBN_errors|Pages_with_ISSN_errors|Pages_with_reference_errors|Pages_with_syntax_highlighting_errors|Pages_with_TemplateStyles_errors"
links:insert(
'[' .. tostring(full_url('Special:Search', errorq .. eincategory)) .. ' errors]'
.. ' (' ..
'[' .. tostring(full_url('Special:Search', errorq .. 'ParserFunction_errors')) .. ' parser]'
.. '/' ..
'[' .. tostring(full_url('Special:Search', errorq .. 'Pages_with_module_errors')) .. ' module]'
.. ')'
)
if title.isSubpage and title.text:find("/sandbox%d*%f[/%z]") then -- This is a sandbox template.
-- At the moment there are no user sandbox templates with subpage
-- “/sandbox”.
cats:insert("Sandbox templates")
-- Sandbox templates don’t really need documentation.
needs_doc = false
-- Will behave badly if “/sandbox” occurs twice in title!
local sandbox_of = title.fullText:gsub("/sandbox%d*%f[/%z]", "")
local diff
if title_exists(sandbox_of) then
diff = " (" .. compare_pages(title.fullText, sandbox_of, "diff") .. ")"
else
track("no sandbox of")
end
links:insert("[[:" .. sandbox_of .. "|sandbox of]]" .. (diff or ""))
-- This is a template that can have a sandbox.
elseif not args.nosandbox then -- unless we tell it not to
local sandbox_title = title.fullText .. "/sandbox"
local diff
if title_exists(sandbox_title) then
diff = " (" .. compare_pages(title.fullText, sandbox_title, "diff") .. ")"
end
links:insert("[[:" .. sandbox_title .. "|sandbox]]" .. (diff or ""))
end
end
if #links > 0 then
output:insert("<dd> ''Useful links'': " .. links:concat(" • ") .. "</dd>")
end
end
output:insert("</dl>\n")
-- Show error from [[Module:category tree/topic cat/data]] on its submodules'
-- documentation to, for instance, warn about duplicate labels.
if startswith(title.fullText, "Module:category tree/topic/") then
local ok, err = pcall(require, "Module:category tree/topic/data")
if not ok then
output:insert('<span class="error">' .. err .. '</span>\n\n')
end
end
if doc_title and doc_title.exists then
-- Override automatic documentation, if present.
doc_content = expand_template { title = doc_title.fullText }
elseif not doc_content and fallback_docs then
doc_content = expand_template {
title = fallback_docs,
args = {
['user'] = user_name,
['page'] = title.fullText,
['skin name'] = skin_name,
},
}
end
if doc_content then
output:insert(doc_content)
end
output:insert(('\n<%s style="clear: both;" />'):format(args.hr == "below" and "hr" or "br"))
if cats_auto_generated and not cats[1] and (not doc_content or not doc_content:find("%[%[Category:")) then
if contentModel == "Scribunto" then
cats:insert("Uncategorized modules")
-- elseif title.nsText == "Template" then
-- cats:insert("Uncategorized templates")
end
end
if needs_doc then
cats:insert("Templates and modules needing documentation")
end
for _, cat in ipairs(cats) do
output:insert("[[Category:" .. cat .. "]]")
end
output:insert("</div>\n")
return output:concat()
end
function export.module_auto_doc_table()
local parts = {}
local function ins(text)
insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Regex !! Category !! Handling modules")
for _, spec in ipairs(module_regex) do
local cat_text
local cats = spec.cat
if cats then
local cat_parts = {}
if type(cats) == "string" then
cats = { cats }
end
for _, cat in ipairs(cats) do
insert(cat_parts, ("<code>%s</code>"):format((cat:gsub("|", "|"))))
end
cat_text = concat(cat_parts, ", ")
else
cat_text = "''(unspecified)''"
end
ins("|-")
ins(("| <code>%s</code> || %s || %s"):format(spec.regex, cat_text,
is_callable(spec.process) and "''(handled internally)''" or
type(spec.process) == "string" and ("[[Module:documentation/functions/%s]]"):format(spec.process) or
"''(no documentation generator)''"))
end
ins("|}")
return concat(parts, "\n")
end
-- Used by {{translit module documentation}}.
function export.translitModuleLangList(frame)
local pagename, subpage
if frame.args[1] then
pagename = frame.args[1]
else
local title = get_current_title()
subpage = title.subpageText
pagename = title.text
if subpage ~= pagename then
pagename = title.rootText
end
end
local translitModule = pagename
local languageObjects = require("Module:languages/byTranslitModule")(translitModule)
local codeInPagename = pagename:match("^([%l-]+)%-.*translit$")
local categories = Array()
local codeInPagenameInList = false
if codeInPagename then
if languageObjects[1] and subpage ~= "documentation" then
local agreement = languageObjects[2] and "s" or ""
categories:insert("[[Category:Transliteration modules used by " ..
#languageObjects .. " language" .. agreement .. "]]")
end
languageObjects = Array(languageObjects)
:filter(
function(lang)
local result = lang:getCode() ~= codeInPagename
codeInPagenameInList = codeInPagenameInList or result
return result
end)
end
if subpage ~= "documentation" then
for script_code in pagename:gmatch("%f[^-%z]%u%l%l%l%f[-]") do
local script = get_script(script_code)
if script then
categories:insert("[[Category:" .. script:getCategoryName() .. "]]")
end
end
end
if subpage ~= "documentation" and not title_exists("Module:" .. pagename .. "/testcases") then
categories:insert("[[Category:Transliteration modules without a testcases subpage]]")
end
if not languageObjects[1] then
return categories:concat()
end
local langs = Array(languageObjects)
:sort(
function(lang1, lang2)
return lang1:getCode() < lang2:getCode()
end)
-- This will not error because languageObjects is not empty.
:map(languageObjects[1].makeCategoryLink)
:serialCommaJoin()
return "It is " .. (codeInPagenameInList and "also" or "") ..
" used to transliterate " .. langs .. "." .. categories:concat()
end
-- Used by {{strip diacritics module documentation}}.
function export.stripDiacriticsModuleLangList(frame)
local pagename, subpage
if frame.args[1] then
pagename = frame.args[1]
else
local title = get_current_title()
subpage = title.subpageText
pagename = title.text
if subpage ~= pagename then
pagename = title.rootText
end
end
local stripDiacriticsModule = pagename
local languageObjects = require("Module:languages/byStripDiacriticsModule")(stripDiacriticsModule)
local codeInPagename = pagename:match("^([%l-]+)%-.*stripdiacritics$")
local categories = Array()
local codeInPagenameInList = false
if codeInPagename then
if languageObjects[1] and subpage ~= "documentation" then
local agreement = languageObjects[2] and "s" or ""
categories:insert("[[Category:Diacritic-stripping modules used by " ..
#languageObjects .. " language" .. agreement .. "]]")
end
languageObjects = Array(languageObjects)
:filter(
function(lang)
local result = lang:getCode() ~= codeInPagename
codeInPagenameInList = codeInPagenameInList or result
return result
end)
end
if subpage ~= "documentation" then
for script_code in pagename:gmatch("%f[^-%z]%u%l%l%l%f[-]") do
local script = get_script(script_code)
if script then
categories:insert("[[Category:" .. script:getCategoryName() .. "]]")
end
end
end
if subpage ~= "documentation" and not title_exists("Module:" .. pagename .. "/testcases") then
categories:insert("[[Category:Diacritic-stripping modules without a testcases subpage]]")
end
if not languageObjects[1] then
return categories:concat()
end
local langs = Array(languageObjects)
:sort(
function(lang1, lang2)
return lang1:getCode() < lang2:getCode()
end)
-- This will not error because languageObjects is not empty.
:map(languageObjects[1].makeCategoryLink)
:serialCommaJoin()
return "It is " .. (codeInPagenameInList and "also" or "") ..
" used to strip diacritics for " .. langs .. "." .. categories:concat()
end
-- Used by {{sortkey module documentation}}.
function export.sortkeyModuleLangList(frame)
local pagename, subpage
if frame.args[1] then
pagename = frame.args[1]
else
local title = get_current_title()
subpage = title.subpageText
pagename = title.text
if subpage ~= pagename then
pagename = title.rootText
end
end
local sortkeyModule = pagename
local languageObjects = require("Module:languages/bySortkeyModule")(sortkeyModule)
local codeInPagename = pagename:match("^([%l-]+)%-.*sortkey$")
local categories = Array()
local codeInPagenameInList = false
if codeInPagename then
if languageObjects[1] and subpage ~= "documentation" then
local agreement = languageObjects[2] and "s" or ""
categories:insert("[[Category:Sortkey-generating modules used by " ..
#languageObjects .. " language" .. agreement .. "]]")
end
languageObjects = Array(languageObjects)
:filter(
function(lang)
local result = lang:getCode() ~= codeInPagename
codeInPagenameInList = codeInPagenameInList or result
return result
end)
end
if subpage ~= "documentation" then
for script_code in pagename:gmatch("%f[^-%z]%u%l%l%l%f[-]") do
local script = get_script(script_code)
if script then
categories:insert("[[Category:" .. script:getCategoryName() .. "]]")
end
end
end
if subpage ~= "documentation" and not title_exists("Module:" .. pagename .. "/testcases") then
categories:insert("[[Category:Sortkey-generating modules without a testcases subpage]]")
end
if not languageObjects[1] then
return categories:concat()
end
local langs = Array(languageObjects)
:sort(
function(lang1, lang2)
return lang1:getCode() < lang2:getCode()
end)
-- This will not error because languageObjects is not empty.
:map(languageObjects[1].makeCategoryLink)
:serialCommaJoin()
return "It is " .. (codeInPagenameInList and "also" or "") ..
" used to sort " .. langs .. "." .. categories:concat()
end
return export
gs0i8pbsg53nl0m4qithir7evspynu2
86342
86249
2026-07-22T21:27:37Z
Altronic
4137
change module regexes
86342
Scribunto
text/plain
local export = {}
local array_module = "Module:array"
local debug_track_module = "Module:debug/track"
local frame_module = "Module:frame"
local fun_is_callable_module = "Module:fun/isCallable"
local languages_module = "Module:languages"
local links_module = "Module:links"
local load_module = "Module:load"
local module_categorization_module = "Module:module categorization"
local number_list_show_module = "Module:number list/show"
local chemical_element_list_show_module = "Module:chemical element list/show"
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
local scripts_module = "Module:scripts"
local string_endswith_module = "Module:string/endswith"
local string_gline_module = "Module:string/gline"
local string_insert_module = "Module:string/insert"
local string_startswith_module = "Module:string/startswith"
local string_utilities_module = "Module:string utilities"
local template_parser_module = "Module:template parser"
local title_exists_module = "Module:title/exists"
local title_new_title_module = "Module:title/newTitle"
local concat = table.concat
local error = error
local full_url = mw.uri.fullUrl
local get_current_title = mw.title.getCurrentTitle
local insert = table.insert
local ipairs = ipairs
local list_to_text = mw.text.listToText
local new_message = mw.message.new
local pcall = pcall
local require = require
local tonumber = tonumber
local tostring = tostring
local type = type
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function Array(...)
Array = require(array_module)
return Array(...)
end
local function categorize_module(...)
categorize_module = require(module_categorization_module).categorize
return categorize_module(...)
end
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function endswith(...)
endswith = require(string_endswith_module)
return endswith(...)
end
local function expand_template(...)
expand_template = require(frame_module).expandTemplate
return expand_template(...)
end
local function find_templates(...)
find_templates = require(template_parser_module).find_templates
return find_templates(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function get_lang(...)
get_lang = require(languages_module).getByCode
return get_lang(...)
end
local function get_pagetype(...)
get_pagetype = require(pages_module).get_pagetype
return get_pagetype(...)
end
local function get_script(...)
get_script = require(scripts_module).getByCode
return get_script(...)
end
local function gline(...)
gline = require(string_gline_module)
return gline(...)
end
local function is_callable(...)
is_callable = require(fun_is_callable_module)
return is_callable(...)
end
local function is_documentation(...)
is_documentation = require(pages_module).is_documentation
return is_documentation(...)
end
local function is_sandbox(...)
is_sandbox = require(pages_module).is_sandbox
return is_sandbox(...)
end
local function new_title(...)
new_title = require(title_new_title_module)
return new_title(...)
end
local function number_list_show_table(...)
number_list_show_table = require(number_list_show_module).table
return number_list_show_table(...)
end
local function chemical_element_list_show_table(...)
chemical_element_list_show_table = require(chemical_element_list_show_module).table
return chemical_element_list_show_table(...)
end
local function preprocess(...)
preprocess = require(frame_module).preprocess
return preprocess(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function safe_load_data(...)
safe_load_data = require(load_module).safe_load_data
return safe_load_data(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function startswith(...)
startswith = require(string_startswith_module)
return startswith(...)
end
local function string_insert(...)
string_insert = require(string_insert_module)
return string_insert(...)
end
local function title_exists(...)
title_exists = require(title_exists_module)
return title_exists(...)
end
local function ugsub(...)
ugsub = require(string_utilities_module).gsub
return ugsub(...)
end
local function umatch(...)
umatch = require(string_utilities_module).match
return umatch(...)
end
local skins = {
["common"] = "",
["vector"] = "Vector",
["monobook"] = "Monobook",
["cologneblue"] = "Cologne Blue",
["modern"] = "Modern",
}
local function track(page)
debug_track("documentation/" .. page)
return true
end
local function compare_pages(page1, page2, text)
return "[" .. tostring(
full_url("Special:ComparePages", { page1 = page1, page2 = page2 }))
.. " " .. text .. "]"
end
-- Avoid transcluding [[Module:languages/cache]] everywhere.
local lang_cache = setmetatable({}, {
__index = function(self, k)
return require("Module:languages/cache")[k]
end
})
local function zh_link(word)
return full_link {
lang = lang_cache.zh,
term = word
}
end
local function make_languages_data_documentation(title, cats, division)
local doc_template, module_cat
if endswith(division, "/extra") then
division = division:sub(1, -7)
doc_template = "language extradata documentation"
module_cat = "Language extra data modules"
else
doc_template = "language data documentation"
module_cat = "Language data modules"
end
local sort_key
if division == "exceptional" then
sort_key = "x"
else
sort_key = division:gsub("/", "")
end
cats:insert(module_cat .. "|" .. sort_key)
return {
title = doc_template
}
end
local function make_Unicode_data_documentation(title, cats)
local subpage, first_three_of_code_point
= title.fullText:match("^Mòideal:Unicode data/([^/]+)/(%x%x%x)$")
if subpage == "names" or subpage == "images" or subpage == "emoji images" then
local low, high =
tonumber(first_three_of_code_point .. "000", 16),
tonumber(first_three_of_code_point .. "FFF", 16)
local text, text_type
if subpage == "names" then
text_type = "titles of images"
elseif subpage == "images" then
text_type = "titles of images"
elseif subpage == "emoji images" then
text_type = "emoji-style images"
end
text = string.format(
"This data module contains the " .. text_type .. " of " ..
"[[Appendix:Unicode|Unicode]] code points within the range U+%04X to U+%04X.",
low, high)
if subpage == "images" and safe_load_data("Module:Unicode data/emoji images/" .. first_three_of_code_point) then
text = text ..
" This list includes the text variants of emojis. For the list of emoji variants of those characters, see [[Module:Unicode data/emoji images/" ..
first_three_of_code_point .. "]]."
elseif subpage == "emoji images" then
text = text ..
" For text-style images, see [[Module:Unicode data/images/" .. first_three_of_code_point .. "]]."
end
return text
end
end
local function insert_lang_data_module_cats(cats, langcode, overall_data_module_cat)
local lang = lang_cache[langcode]
if lang then
local langname
if lang._fullCode then
langname = lang_cache[lang._fullCode]:getCanonicalName()
else
langname = lang:getCanonicalName()
end
cats:insert(overall_data_module_cat .. "|" .. langname)
cats:insert(langname .. " modules")
cats:insert(langname .. " data modules")
return lang, langname
end
end
--[=[
This provides categories and documentation for various data modules, so that [[Category:Uncategorized modules]] isn't
unnecessarily cluttered. It is a list of tables, each of which have the following possible fields:
`regex` (required): A Lua pattern to match the module's title. If it matches, the data in this entry will be used.
Any captures in the pattern can by referenced in the `cat` field using %1 for the first capture, %2 for the
second, etc. (often used for creating the sortkey for the category). In addition, the captures are passed to the
`process` function as the third and subsequent parameters.
`process` (optional): This may be a function or a string. If it is a function, it is called as follows:
`process(TITLE, CATS, CAPTURE1, CAPTURE2, ...)`
where:
* TITLE is a title object describing the module's title; see
[https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Title_objects].
* CATS is an array object (see [[Module:array]]) of categories that the module will be added to.
* CAPTURE1, CAPTURE2, ... contain any captures in the `regex` field.
The return value of `process` should either be a string (which will be used as the module's documentation), or a
table specifying the name of a template to expand to get the documentation, along with the arguments to that
template. In the latter format, the template name (bare, without the "Template:" prefix) should be in the `title`
field, and any arguments should be in `args; in this case, the template name will be listed above the generated
documentation as the source of the documentation, along with an edit button to edit the template's contents.
If, however, the return value of the `process` function is a string, any template invocations will be expanded
using frame:preprocess(), and [[Module:documentation]] will be listed as the source of the documentation.
If `process` itself is a string rather than a function, it should name a submodule under
[[Module:documentation/functions/]] which returns a function, of the same type as described above. This submodule
will be specified as the source of the documentation (unless it returns a table naming a template to expand to get
the documentation, as described above).
If `process` is omitted entirely, the module will have no documentation.
`cat` (optional): A string naming the category into which the module should be placed, or a list of such strings.
Captures specified in `regex` may be referenced in this string using %1 for the first capture, %2 for the second,
etc. It is also possible to add categories in the `process` function by inserting them into the passed-in CATS
array (the second parameter).
]=]
local module_regex = {
{
regex = "^Mòideal:languages/data/(3/%l/extra)$",
process = make_languages_data_documentation,
},
{
regex = "^Mòideal:languages/data/(3/%l)$",
process = make_languages_data_documentation,
},
{
regex = "^Mòideal:languages/data/(2/extra)$",
process = make_languages_data_documentation,
},
{
regex = "^Mòideal:languages/data/(2)$",
process = make_languages_data_documentation,
},
{
regex = "^Mòideal:languages/data/(exceptional/extra)$",
process = make_languages_data_documentation,
},
{
regex = "^Mòideal:languages/data/(exceptional)$",
process = make_languages_data_documentation,
},
{
regex = "^Mòideal:languages/.+$",
cat = "Language and script modules",
},
{
regex = "^Mòideal:scripts/.+$",
cat = "Language and script modules",
},
{
regex = "^Mòideal:data tables/data..?.?.?$",
cat = "Reference module sharded data tables",
},
{
regex = "^Mòideal:zh/data/dial%-pron/.+$",
cat = "Chinese dialectal pronunciation data modules",
process = "zh dial or syn",
},
{
regex = "^Mòideal:zh/data/dial%-syn/.+$",
cat = "Chinese dialect synonyms data modules",
process = "zh dial or syn",
},
{
regex = "^Mòideal:zh/data/glyph%-data/.+$",
cat = "Chinese historical character forms data modules",
process = function(title, cats)
local character = title.fullText:match("^Mòideal:zh/data/glyph%-data/(.+)")
if character then
return ("This module contains data on historical forms of the Chinese character %s.")
:format(zh_link(character))
end
end,
},
{
regex = "^Mòideal:zh/data/ltc%-pron/(.+)$",
cat = "Middle Chinese pronunciation data modules|%1",
process = "zh data",
},
{
regex = "^Mòideal:zh/data/och%-pron%-BS/(.+)$",
cat = "Old Chinese (Baxter-Sagart) pronunciation data modules|%1",
process = "zh data",
},
{
regex = "^Mòideal:zh/data/och%-pron%-ZS/(.+)$",
cat = "Old Chinese (Zhengzhang) pronunciation data modules|%1",
process = "zh data",
},
{
-- capture rest of zh/data submodules
regex = "^Mòideal:zh/data/(.+)$",
cat = "Chinese data modules|%1",
},
{
regex = "^Mòideal:mul/guoxue%-data/cjk%-?(.*)$",
process = "guoxue-data",
},
{
regex = "^Mòideal:Unicode data/(.+)$",
cat = "Unicode data modules|%1",
process = make_Unicode_data_documentation,
},
{
regex = "^Mòideal:number list/data/(.+)$",
process = function(title, cats, lang_code)
local lang = insert_lang_data_module_cats(cats, lang_code, "Number data modules")
if lang then
return ("This module contains data on various types of numbers in %s.\n%s")
:format(lang:makeCategoryLink(), number_list_show_table() or "")
end
end,
},
{
regex = "^Mòideal:chemical element list/data/(.+)$",
process = function(title, cats, lang_code)
local lang = insert_lang_data_module_cats(cats, lang_code, "Chemical element data modules")
if lang then
return ("This module contains data on chemical elements in %s.\n%s")
:format(lang:makeCategoryLink(), chemical_element_list_show_table() or "")
end
end,
},
{
regex = "^Mòideal:accel/(.+)$",
process = function(title, cats)
local lang_code = title.subpageText
local lang = lang_cache[lang_code]
if lang then
cats:insert(lang:getCanonicalName() .. " modules|accel")
cats:insert(("Accel submodules|%s"):format(lang:getCanonicalName()))
return ("This module contains new entry creation rules for %s; see [[WT:ACCEL]] for an overview, and [[Module:accel]] for information on creating new rules.")
:format(lang:makeCategoryLink())
end
end,
},
{
regex = "^Mòideal:inc%-ash/dial/data/(.+)$",
cat = "Ashokan Prakrit modules|%1",
process = function(title, cats)
local word = title.fullText:match("^Mòideal:inc%-ash/dial/data/(.+)$")
if word then
local lang = lang_cache["inc-ash"]
return ("This module contains data on the pronunciation of %s in dialects of %s.")
:format(full_link({ term = word, lang = lang }, "term"),
lang:makeCategoryLink())
end
end,
},
{
regex = "^.+%-translit$",
process = "translit",
},
{
regex = "^Mòideal:form of/lang%-data/(.+)$",
process = function(title, cats, lang_code)
local lang, langname = insert_lang_data_module_cats(cats, lang_code, "Language-specific form-of modules")
if lang then
-- FIXME, display more info.
return "This module contains language-specific form-of data (tags, shortcuts, base lemma params. etc.) for " ..
langname .. "."
end
end
},
{
regex = "^Mòideal:labels/data/lang/(.+)$",
process = function(title, cats, lang_code)
local lang = insert_lang_data_module_cats(cats, lang_code, "Language-specific label data modules")
if lang then
return {
title = "label language-specific data documentation",
args = { [1] = lang_code },
}
end
end
},
{
regex = "^Mòideal:category tree/lang/(.+)$",
process = function(title, cats, lang_code)
local lang, langname = insert_lang_data_module_cats(cats, lang_code, "Category tree data modules/lang")
if lang then
return "This module handles generating the descriptions and categorization for " ..
langname .. " category pages "
.. "of the format \"" .. langname .. " LABEL\" where LABEL can be any text. Examples are "
.. "[[:Category:Bulgarian conjugation 2.1 verbs]] and [[:Category:Russian velar-stem neuter-form nouns]]. "
.. "This module is part of the category tree system, which is a general framework for generating the "
.. "descriptions and categorization of category pages.\n\n"
.. "For more information, see [[Module:category tree/lang/documentation]].\n\n"
.. "'''NOTE:''' If you add a new language-specific module, you must add the language code to the "
.. "list at the top of [[Module:category tree/lang]] in order for the module to be recognized."
end
end
},
{
regex = "^Mòideal:category tree/topic/(.+)$",
process = function(title, cats, submodule)
cats:insert("Category tree data modules/topic| ")
return {
title = "topic cat data submodule documentation"
}
end
},
{
regex = "^Mòideal:category tree/(.+)$",
process = function(title, cats, submodule)
cats:insert("Category tree data modules| ")
return {
title = "category tree data submodule documentation"
}
end
},
{
regex = "^Mòideal:ja/data/(.+)$",
cat = "Japanese data modules|%1",
},
{
regex = "^Mòideal:fi%-dialects/data/feature/Kettunen1940 ([0-9]+)$",
cat = "Finnish dialectal data atlas modules|%1",
process = function(title, cats, shard)
return "This module contains shard " .. shard .. " of the online version of Lauri Kettunen's 1940 work " ..
"''Suomen murteet III A. Murrekartasto'' (\"Finnish dialects III A: Dialect atlas\"). " ..
"It was imported and converted from urn:nbn:fi:csc-kata20151130145346403821, published by the " ..
"''Kotimaisten kielten keskus'' under the CC BY 4.0 license."
end
},
{
regex = "^Mòideal:fi%-dialects/data/feature/(.+)",
cat = "Finnish dialectal data modules|%1",
},
{
regex = "^Mòideal:fi%-dialects/data/word/(.+)",
cat = "Finnish dialectal data modules|%1",
},
{
regex = "^Mòideal:Swadesh/data/([%l-]+)$",
process = function(title, cats, lang_code)
local lang, langname = insert_lang_data_module_cats(cats, lang_code, "Swadesh modules")
if lang then
return "This module contains the [[Swadesh list]] of basic vocabulary in " .. langname .. "."
end
end
},
{
regex = "^Mòideal:Swadesh/data/([%l-]+)/([^/]*)$",
process = function(title, cats, lang_code, variety)
local lang, langname = insert_lang_data_module_cats(cats, lang_code, "Swadesh modules")
if lang then
local prefix = "This module contains the [[Swadesh list]] of basic vocabulary in the "
local etym_lang = get_lang(variety, nil, "allow etym")
if etym_lang then
return ("%s %s variety of %s."):format(prefix, etym_lang:getCanonicalName(), langname)
end
local script = get_script(variety)
if script then
return ("%s %s %s script."):format(prefix, langname, script:getCanonicalName())
end
return ("%s %s variety of %s."):format(prefix, variety, langname)
end
end
},
{
regex = "^Mòideal:typing%-aids",
process = function(title, cats)
local data_suffix = title.fullText:match("^Mòideal:typing%-aids/data/(.+)$")
local sortkey
if data_suffix then
if data_suffix:find "^[%l-]+$" then
local lang = get_lang(data_suffix)
if lang then
sortkey = lang:getCanonicalName()
cats:insert(sortkey .. " data modules")
end
elseif data_suffix:find "^%u%l%l%l$" then
local script = get_script(data_suffix)
if script then
sortkey = script:getCanonicalName()
cats:insert(script:getCategoryName())
end
end
cats:insert("Character insertion data modules|" .. (sortkey or data_suffix))
end
end,
},
{
regex = "^Mòideal:R:([%l-]+):(.+)$",
process = function(title, cats, lang_code, refname)
local lang = lang_cache[lang_code]
if lang then
cats:insert(lang:getCanonicalName() .. " modules|" .. refname)
cats:insert(("Reference modules|%s"):format(lang:getCanonicalName()))
return "This module implements the reference template {{temp|R:" .. lang_code .. ":" .. refname .. "}}."
end
end,
},
{
regex = "^Mòideal:Quotations/([%l-]+)/?(.*)",
process = "Quotation",
},
{
regex = "^Mòideal:affix/lang%-data/([%l-]+)",
process = "affix lang-data",
},
{
regex = "^Mòideal:dialect synonyms/([%l-]+)$",
process = function(title, cats, lang_code)
local lang = lang_cache[lang_code]
if lang then
local langname = lang:getCanonicalName()
cats:insert("Dialect synonyms data modules|" .. langname)
cats:insert(langname .. " dialect synonyms data modules| ")
return "This module contains data on specific varieties of " .. langname .. ", for use by " ..
"{{tl|dialect synonyms}}. The actual synonyms themselves are contained in submodules.\n\n" ..
"==== Language data module structure ====\n" ..
"* <code>export.title</code> — optional; table title template (e.g. \"Regional synonyms of %s\").\n" ..
"* <code>export.columns</code> — optional; list of column headers for location hierarchy (e.g. {\"Dialect group\", \"Dialect\", \"Location\"}).\n" ..
"* <code>export.notes</code> — optional; table of note keys to text.\n" ..
"* <code>export.sources</code> — optional; table of source keys to text.\n" ..
"* <code>export.note_aliases</code> — optional; alias map for notes.\n" ..
"* <code>export.varieties</code> — required; nested table of variety nodes. Each node must have <code>name</code>; array part holds children. Node keys can include <code>text_display</code>, <code>color</code>, <code>code</code>, <code>wikidata</code>, <code>lat</code>, <code>long</code>, and language-specific keys (e.g. <code>persian</code>, <code>armenian</code>, <code>chinese</code>).\n\n" ..
expand_template({ title = 'dial syn', args = { lang_code, ["demo mode"] = "y" } })
end
end,
},
{
regex = "^Mòideal:dialect synonyms/([%l-]+)/([^/]+)$",
process = function(title, cats, lang_code, term)
local lang = lang_cache[lang_code]
if lang then
local langname = lang:getCanonicalName()
cats:insert("Dialect synonyms data modules|" .. langname)
cats:insert(langname .. " dialect synonyms data modules|" .. term)
return ("%s\n\n%s"):format(
"==== Term/sense module structure ====\n" ..
"* <code>export.title</code> — optional; custom table title (e.g. \"Realization of 'strong R' between vowels\"). Overrides the language default.\n" ..
"* <code>export.meaning</code> — optional; meaning/gloss (alternative to <code>gloss</code>).\n" ..
"* <code>export.gloss</code> — optional; short meaning for the table.\n" ..
"* <code>export.note</code> — optional; single note key or string, or list of note keys.\n" ..
"* <code>export.notes</code> — optional; list of note keys.\n" ..
"* <code>export.source</code> / <code>export.sources</code> — optional; source keys.\n" ..
"* <code>export.last_column</code> — optional; label for the data column (default \"Words\"; e.g. \"Realization\").\n" ..
"* <code>export.syns</code> — required; table mapping variety/location names (keys from the language data module) to a list of term entries. Each entry can be a string or a table (e.g. <code>{ ipa = \"[ɽ]\" }</code> or <code>{ term = \"word\" }</code>).\n\n" ..
"Example (custom title and data column, IPA realizations):\n" ..
"<pre>\nlocal export = {}\n\nexport.title = \"Realization of 'strong R' between vowels\"\n" ..
"export.meaning = \"\"\nexport.note = \"realization of 'strong R' between vowels\"\n" ..
"export.last_column = \"Realization\"\n\nexport.syns = {\n\t[\"ALERS-158\"] = { { ipa = \"[ɽ]\" } },\n\t[\"ALERS-175\"] = { { ipa = \"[x]\" } },\n}\n\nreturn export\n</pre>\n\n",
expand_template({ title = 'dial syn', args = { lang_code, term } }))
end
end,
},
{
regex = "^Mòideal:dialect synonyms/([%l-]+)/([^/]+)/([^/]+)$",
process = function(title, cats, lang_code, term, id)
local lang = lang_cache[lang_code]
if lang then
local langname = lang:getCanonicalName()
cats:insert("Dialect synonyms data modules|" .. langname)
cats:insert(langname .. " dialect synonyms data modules|" .. term)
return ("%s\n\n%s"):format(
"==== Term/sense module structure ====\n" ..
"* <code>export.title</code> — optional; custom table title (e.g. \"Realization of 'strong R' between vowels\"). Overrides the language default.\n" ..
"* <code>export.meaning</code> — optional; meaning/gloss (alternative to <code>gloss</code>).\n" ..
"* <code>export.gloss</code> — optional; short meaning for the table.\n" ..
"* <code>export.note</code> — optional; single note key or string, or list of note keys.\n" ..
"* <code>export.notes</code> — optional; list of note keys.\n" ..
"* <code>export.source</code> / <code>export.sources</code> — optional; source keys.\n" ..
"* <code>export.last_column</code> — optional; label for the data column (default \"Words\"; e.g. \"Realization\").\n" ..
"* <code>export.syns</code> — required; table mapping variety/location names (keys from the language data module) to a list of term entries. Each entry can be a string or a table (e.g. <code>{ ipa = \"[ɽ]\" }</code> or <code>{ term = \"word\" }</code>).\n\n" ..
"Example (custom title and data column, IPA realizations):\n" ..
"<pre>\nlocal export = {}\n\nexport.title = \"Realization of 'strong R' between vowels\"\n" ..
"export.meaning = \"\"\nexport.note = \"realization of 'strong R' between vowels\"\n" ..
"export.last_column = \"Realization\"\n\nexport.syns = {\n\t[\"ALERS-158\"] = { { ipa = \"[ɽ]\" } },\n\t[\"ALERS-175\"] = { { ipa = \"[x]\" } },\n}\n\nreturn export\n</pre>\n\n",
expand_template({ title = 'dial syn', args = { lang_code, term, id = id } }))
end
end,
},
{
regex = "^Mòideal:bibliography/data/([%l-]+)$",
process = function(title, cats, lang_code)
if lang_code == "preload" then
return 'Used as a base model for other languages when the button "create new language submodule" is clicked.'
end
local page = require(title.fullText).bib_page
if not page then
page = lang_cache[lang_code]:getCanonicalName()
if page then
cats:insert(page .. " modules")
end
end
cats:insert("Reference modules")
return "This module holds bibliographical data for " ..
page .. ". For the formatted bibliography see '''[[Appendix:Bibliography/" .. page .. "]]'''."
end,
},
}
function export.show(frame)
local boolean_default_false = { type = "boolean", default = false }
local args = process_params(frame.args, {
["hr"] = true,
["for"] = true,
["from"] = true,
["allowondoc"] = boolean_default_false, -- Don't throw an error if used on a documentation subpage.
["notsubpage"] = boolean_default_false,
["nodoc"] = boolean_default_false,
["nolinks"] = boolean_default_false, -- suppress all "Useful links"
["nosandbox"] = boolean_default_false, -- supress sandbox
})
local output = Array('\n<div class="documentation" style="display:block; clear:both">\n')
local cats = Array()
local nodoc = args.nodoc
if (not args.hr) or (args.hr == "above") then
output:insert("----\n")
end
local title = args["for"] and new_title(args["for"]) or get_current_title()
local doc_title = args.from ~= "-" and new_title(args.from or title.fullText .. '/documentation') or nil
local contentModel = title.contentModel
local pagetype, is_script_or_stylesheet = get_pagetype(title)
local preload, fallback_docs, doc_content, old_doc_title, user_name, skin_name, needs_doc
local doc_content_source = "Module:documentation"
local auto_generated_cat_source
local cats_auto_generated = false
if not args.allowondoc and is_documentation(title) then
-- TODO: merge with {{documentation subpage}}, and choose behaviour based on the page type.
error("This template should not be used on a documentation page. Please use [[Template:documentation subpage]].")
elseif is_sandbox(title) then
local sandbox_ns = title.nsText
preload = ("Template:documentation/preload%s%sSandbox"):format(
sandbox_ns == "Module" and sandbox_ns or "Template",
title.rootText:match("^[Uu]ser:(.+)") and "User" or ""
)
elseif pagetype:match("%f[%w]gadget%f[%W]") then
preload = "Template:documentation/preloadGadget"
elseif pagetype:match("%f[%w]script%f[%W]") then -- .js
if title.nsText == "MediaWiki" then
preload = "Template:documentation/preloadMediaWikiJavaScript"
else
preload = "Template:documentation/preloadTemplate" -- XXX
if title.nsText == "User" then
user_name = title.rootText
end
end
is_script_or_stylesheet = true
elseif pagetype:match("%f[%w]stylesheet%f[%W]") then -- .css
preload = "Template:documentation/preloadTemplate" -- XXX
if title.nsText == "User" then
user_name = title.rootText
end
is_script_or_stylesheet = true
elseif contentModel == "Scribunto" then -- Exclude pages in Module: which aren't Scribunto.
preload = "Template:documentation/preloadModule"
elseif pagetype:match("%f[%w]template%f[%W]") or pagetype:match("%f[%w]project%f[%W]") then
preload = "Template:documentation/preloadTemplate"
end
if doc_title and doc_title.isRedirect then
old_doc_title = doc_title
doc_title = doc_title.redirectTarget
end
output:insert("<dl class=\"plainlinks\" style=\"font-size: smaller;\">")
local function get_module_doc_and_cats(categories_only)
cats_auto_generated = true
local automatic_cats = nil
if user_name then
fallback_docs = "documentation/fallback/user module"
automatic_cats = { "User sandbox modules" }
else
for _, data in ipairs(module_regex) do
local captures = { umatch(title.fullText, data.regex) }
if #captures > 0 then
local cat, process_function
if is_callable(data.process) then
process_function = data.process
elseif type(data.process) == "string" then
doc_content_source = "Module:documentation/functions/" .. data.process
process_function = require(doc_content_source)
end
if process_function then
doc_content = process_function(title, cats, unpack(captures))
end
if type(doc_content) == "table" then
doc_content_source = doc_content.title and "Template:" .. doc_content.title or doc_content_source
doc_content = expand_template(doc_content)
elseif doc_content ~= nil then
doc_content = preprocess(doc_content)
end
cat = data.cat
if cat then
if type(cat) == "string" then
cat = { cat }
end
for _, c in ipairs(cat) do
insert(cats, (ugsub(title.fullText, data.regex, c)))
end
end
break
end
end
end
if title.subpageText == "templates" then
cats:insert("Template interface modules")
end
if automatic_cats then
for _, c in ipairs(automatic_cats) do
cats:insert(c)
end
end
if #cats == 0 then
local auto_cats = categorize_module(frame, "return raw", "noerror")
if #auto_cats > 0 then
auto_generated_cat_source = "Module:module categorization"
end
for _, category in ipairs(auto_cats) do
cats:insert(category)
end
end
-- meaning module is not in user’s sandbox or one of many datamodule boring series
needs_doc = not categories_only and not (automatic_cats or doc_content or fallback_docs)
end
-- Override automatic documentation, if present.
if doc_title and doc_title.exists then
local cats_auto_generated_text = ""
if contentModel == "Scribunto" then
local doc_page_content = doc_title.content
-- Track then do nothing if there are uses of includeonly. The
-- pattern is slightly too permissive, but any false-positives are
-- obvious typos that should be corrected.
if doc_page_content:lower():match("</?includeonly%f[%s/>][^>]*>") then
track("module-includeonly")
else
-- Check for uses of {{module cat}}. find_templates treats the
-- input as transcluded by default (i.e. it parses the wikitext
-- which will be transcluded through to the module page).
local module_cat
for template in find_templates(doc_page_content) do
if template:get_name() == "module cat" then
module_cat = true
break
end
end
if not module_cat then
get_module_doc_and_cats("categories only")
auto_generated_cat_source = auto_generated_cat_source or doc_content_source
cats_auto_generated_text = " Categories were auto-generated by [[" ..
auto_generated_cat_source .. "]]. <sup>[[" ..
new_title(auto_generated_cat_source):fullUrl { action = "edit" } .. " edit]]</sup>"
end
end
end
output:insert(
"<dd><i style=\"font-size: larger;\">The following " ..
"[[Help:Documenting templates and modules|documentation]] is located at [[" ..
doc_title.fullText .. "]]. " .. "<sup>[[" .. doc_title:fullUrl { action = "edit" } .. " edit]]</sup>" ..
cats_auto_generated_text .. "</i></dd>")
else
if contentModel == "Scribunto" then
get_module_doc_and_cats(false)
elseif title.nsText == "Template" then
--cats:insert("Uncategorized templates")
needs_doc = not (fallback_docs or nodoc)
elseif user_name and is_script_or_stylesheet then
skin_name = skins[title.text:sub(#title.rootText + 1):match("^/(%l+)%.[jc]ss?$")]
if skin_name then
fallback_docs = "documentation/fallback/user " .. contentModel
end
end
if doc_content then
output:insert(
"<dd><i style=\"font-size: larger;\">The following " ..
"[[Help:Documenting templates and modules|documentation]] is " ..
"generated by [[" .. doc_content_source .. "]]. <sup>[[" ..
new_title(doc_content_source):fullUrl { action = "edit" } ..
" edit]]</sup> </i></dd>")
elseif not nodoc then
if doc_title then
output:insert(
"<dd><i style=\"font-size: larger;\">This " .. pagetype ..
" lacks a [[Help:Documenting templates and modules|documentation subpage]]. " ..
(fallback_docs and "You may " or "Please ") ..
"[" .. doc_title:fullUrl { action = "edit", preload = preload }
.. " create it].</i></dd>\n")
else
output:insert(
"<dd><i style=\"font-size: larger; color: var(--wikt-palette-red-9,#FF0000);\">Unable to auto-generate " ..
"documentation for this " .. pagetype .. ".</i></dd>\n")
end
end
end
if startswith(title.fullText, "MediaWiki:Gadget-") then
local is_gadget = false
for line in gline(new_title("MediaWiki:Gadgets-definition").content) do
local gadget, items = line:match("^%*%s*(%a[%w_-]*)%[.-%]|(.+)$")
if not gadget then
gadget, items = line:match("^%*%s*(%a[%w_-]*)|(.+)$")
end
if gadget then
items = Array(split(items, "|"))
for i, item in ipairs(items) do
if title.fullText == ("MediaWiki:Gadget-" .. item) then
is_gadget = true
output:insert("<dd> ''This script is a part of the <code>")
output:insert(gadget)
output:insert("</code> gadget ([")
output:insert(tostring(full_url("MediaWiki:Gadgets-definition", { action = "edit" })))
output:insert(" edit definitions])'' <dl>")
output:insert("<dd> ''Description ([")
output:insert(tostring(full_url("MediaWiki:Gadget-" .. gadget, { action = "edit" })))
output:insert(" edit])'': ")
output:insert(preprocess(new_message('Gadget-' .. gadget):plain()))
output:insert(" </dd>")
items:remove(i)
if #items > 0 then
for j, item in ipairs(items) do
items[j] = '[[MediaWiki:Gadget-' .. item .. '|' .. item .. ']]'
end
output:insert("<dd> ''Other parts'': ")
output:insert(list_to_text(items))
output:insert("</dd>")
end
output:insert("</dl></dd>")
break
end
end
end
end
if not is_gadget then
output:insert("<dd> ''This script is not a part of any [")
output:insert(tostring(full_url("Special:Gadgets", { uselang = "en" })))
output:insert(' gadget] ([')
output:insert(tostring(full_url("MediaWiki:Gadgets-definition", { action = "edit" })))
output:insert(' edit definitions]).</dd>')
-- else
-- cats:insert("Wiktionary gadgets")
end
end
if old_doc_title then
output:insert("<dd> ''Redirected from'' [")
output:insert(old_doc_title:fullUrl { redirect = "no" })
output:insert(" ")
output:insert(old_doc_title.fullText)
output:insert("] ([")
output:insert(old_doc_title:fullUrl { action = "edit" })
output:insert(" edit]).</dd>\n")
end
if not args.nolinks then
local links = Array()
if title.isSubpage and not args.notsubpage then
links:insert("[[:" .. title.nsText .. ":" .. title.rootText .. "|root page]]")
links:insert("[[Special:PrefixIndex/" .. title.nsText .. ":" .. title.rootText .. "/|root page’s subpages]]")
else
links:insert("[[Special:PrefixIndex/" .. title.fullText .. "/|subpage list]]")
end
links:insert(
"[" ..
tostring(full_url("Special:WhatLinksHere/" .. title.fullText, { hidetrans = true, hideredirs = true })) ..
" links]")
if contentModel ~= "Scribunto" then
links:insert(
"[" ..
tostring(full_url("Special:WhatLinksHere/" .. title.fullText, { hidelinks = true, hidetrans = true })) ..
" redirects]")
end
if is_script_or_stylesheet then
if user_name then
links:insert("[[Special:MyPage" .. title.text:sub(#title.rootText + 1) .. "|your own]]")
end
else
links:insert(
"[" ..
tostring(full_url("Special:WhatLinksHere/" .. title.fullText, { hidelinks = true, hideredirs = true })) ..
" transclusions]")
end
if contentModel == "Scribunto" then
local is_testcases = title.isSubpage and title.subpageText == "testcases"
local without_subpage = title.nsText .. ":" .. title.baseText
if is_testcases then
links:insert("[[:" .. without_subpage .. "|tested module]]")
else
links:insert("[[" .. title.fullText .. "/testcases|testcases]]")
end
if user_name then
links:insert("[[User:" .. user_name .. "|user page]]")
links:insert("[[User talk:" .. user_name .. "|user talk page]]")
links:insert("[[Special:PrefixIndex/User:" .. user_name .. "/|userspace]]")
-- If sandbox module, add a link to the module that this is a sandbox of.
-- Exclude user sandbox modules like [[User:Dine2016/sandbox]].
elseif title.text:find("^sandbox%d*/") or title.text:find("/sandbox%d*%f[/%z]") then
cats:insert("Sandbox modules")
-- Sandbox modules don’t really need documentation.
needs_doc = false
-- Don't track user sandbox modules.
local text_title = new_title(title.text)
if not (text_title and text_title.nsText == "User") then
local diff
local sandbox_of = title.text:match("^(.*)/sandbox%d*%f[/%z]")
if sandbox_of then
track("sandbox to be moved")
else
sandbox_of = title.text:match("^sandbox%d*/(.*)$")
end
if not sandbox_of then
error(("Internal error: Something wrong, couldn't extract sandbox-of module from title '%s'")
:format(title.text))
end
sandbox_of = title.nsText .. ":" .. sandbox_of
if title_exists(sandbox_of) then
diff = " (" .. compare_pages(title.fullText, sandbox_of, "diff") .. ")"
else
track("no sandbox of")
end
links:insert("[[:" .. sandbox_of .. "|sandbox of]]" .. (diff or ""))
end
-- If not a sandbox module, add link to sandbox module.
-- Sometimes there are multiple sandboxes for a single module:
-- [[Module:sandbox/sa-pronunc]], [[Module:sandbox2/sa-pronunc]].
else
local sandbox_title
local user_prefix, user_rest = title.text:match("^(User:.-/)(.*)$")
if not user_prefix then
user_prefix = ""
user_rest = title.text
end
sandbox_title = title.nsText .. ":" .. user_prefix .. "sandbox/" .. user_rest
local sandbox_link = "[[:" .. sandbox_title .. "|sandbox]]"
local diff
if title_exists(sandbox_title) then
diff = " (" .. compare_pages(title.fullText, sandbox_title, "diff") .. ")"
end
links:insert(sandbox_link .. (diff or ""))
end
end
if title.nsText == "Template" then
-- Error search: all(any namespace), hastemplate (show pages using the template), insource (show source code), incategory (any/specific error) -- [[mw:Help:CirrusSearch]], [[w:Help:Searching/Regex]]
-- apparently same with/without: &profile=advanced&fulltext=1
local errorq = 'searchengineselect=mediawiki&search=all: hastemplate:\"' ..
title.rootText .. '\" insource:\"' .. title.rootText .. '\" incategory:'
local eincategory =
"Pages_with_module_errors|ParserFunction_errors|DisplayTitle_errors|Pages_with_ISBN_errors|Pages_with_ISSN_errors|Pages_with_reference_errors|Pages_with_syntax_highlighting_errors|Pages_with_TemplateStyles_errors"
links:insert(
'[' .. tostring(full_url('Special:Search', errorq .. eincategory)) .. ' errors]'
.. ' (' ..
'[' .. tostring(full_url('Special:Search', errorq .. 'ParserFunction_errors')) .. ' parser]'
.. '/' ..
'[' .. tostring(full_url('Special:Search', errorq .. 'Pages_with_module_errors')) .. ' module]'
.. ')'
)
if title.isSubpage and title.text:find("/sandbox%d*%f[/%z]") then -- This is a sandbox template.
-- At the moment there are no user sandbox templates with subpage
-- “/sandbox”.
cats:insert("Sandbox templates")
-- Sandbox templates don’t really need documentation.
needs_doc = false
-- Will behave badly if “/sandbox” occurs twice in title!
local sandbox_of = title.fullText:gsub("/sandbox%d*%f[/%z]", "")
local diff
if title_exists(sandbox_of) then
diff = " (" .. compare_pages(title.fullText, sandbox_of, "diff") .. ")"
else
track("no sandbox of")
end
links:insert("[[:" .. sandbox_of .. "|sandbox of]]" .. (diff or ""))
-- This is a template that can have a sandbox.
elseif not args.nosandbox then -- unless we tell it not to
local sandbox_title = title.fullText .. "/sandbox"
local diff
if title_exists(sandbox_title) then
diff = " (" .. compare_pages(title.fullText, sandbox_title, "diff") .. ")"
end
links:insert("[[:" .. sandbox_title .. "|sandbox]]" .. (diff or ""))
end
end
if #links > 0 then
output:insert("<dd> ''Useful links'': " .. links:concat(" • ") .. "</dd>")
end
end
output:insert("</dl>\n")
-- Show error from [[Module:category tree/topic cat/data]] on its submodules'
-- documentation to, for instance, warn about duplicate labels.
if startswith(title.fullText, "Module:category tree/topic/") then
local ok, err = pcall(require, "Module:category tree/topic/data")
if not ok then
output:insert('<span class="error">' .. err .. '</span>\n\n')
end
end
if doc_title and doc_title.exists then
-- Override automatic documentation, if present.
doc_content = expand_template { title = doc_title.fullText }
elseif not doc_content and fallback_docs then
doc_content = expand_template {
title = fallback_docs,
args = {
['user'] = user_name,
['page'] = title.fullText,
['skin name'] = skin_name,
},
}
end
if doc_content then
output:insert(doc_content)
end
output:insert(('\n<%s style="clear: both;" />'):format(args.hr == "below" and "hr" or "br"))
if cats_auto_generated and not cats[1] and (not doc_content or not doc_content:find("%[%[Category:")) then
if contentModel == "Scribunto" then
cats:insert("Uncategorized modules")
-- elseif title.nsText == "Template" then
-- cats:insert("Uncategorized templates")
end
end
if needs_doc then
cats:insert("Templates and modules needing documentation")
end
for _, cat in ipairs(cats) do
output:insert("[[Category:" .. cat .. "]]")
end
output:insert("</div>\n")
return output:concat()
end
function export.module_auto_doc_table()
local parts = {}
local function ins(text)
insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Regex !! Category !! Handling modules")
for _, spec in ipairs(module_regex) do
local cat_text
local cats = spec.cat
if cats then
local cat_parts = {}
if type(cats) == "string" then
cats = { cats }
end
for _, cat in ipairs(cats) do
insert(cat_parts, ("<code>%s</code>"):format((cat:gsub("|", "|"))))
end
cat_text = concat(cat_parts, ", ")
else
cat_text = "''(unspecified)''"
end
ins("|-")
ins(("| <code>%s</code> || %s || %s"):format(spec.regex, cat_text,
is_callable(spec.process) and "''(handled internally)''" or
type(spec.process) == "string" and ("[[Module:documentation/functions/%s]]"):format(spec.process) or
"''(no documentation generator)''"))
end
ins("|}")
return concat(parts, "\n")
end
-- Used by {{translit module documentation}}.
function export.translitModuleLangList(frame)
local pagename, subpage
if frame.args[1] then
pagename = frame.args[1]
else
local title = get_current_title()
subpage = title.subpageText
pagename = title.text
if subpage ~= pagename then
pagename = title.rootText
end
end
local translitModule = pagename
local languageObjects = require("Module:languages/byTranslitModule")(translitModule)
local codeInPagename = pagename:match("^([%l-]+)%-.*translit$")
local categories = Array()
local codeInPagenameInList = false
if codeInPagename then
if languageObjects[1] and subpage ~= "documentation" then
local agreement = languageObjects[2] and "s" or ""
categories:insert("[[Category:Transliteration modules used by " ..
#languageObjects .. " language" .. agreement .. "]]")
end
languageObjects = Array(languageObjects)
:filter(
function(lang)
local result = lang:getCode() ~= codeInPagename
codeInPagenameInList = codeInPagenameInList or result
return result
end)
end
if subpage ~= "documentation" then
for script_code in pagename:gmatch("%f[^-%z]%u%l%l%l%f[-]") do
local script = get_script(script_code)
if script then
categories:insert("[[Category:" .. script:getCategoryName() .. "]]")
end
end
end
if subpage ~= "documentation" and not title_exists("Module:" .. pagename .. "/testcases") then
categories:insert("[[Category:Transliteration modules without a testcases subpage]]")
end
if not languageObjects[1] then
return categories:concat()
end
local langs = Array(languageObjects)
:sort(
function(lang1, lang2)
return lang1:getCode() < lang2:getCode()
end)
-- This will not error because languageObjects is not empty.
:map(languageObjects[1].makeCategoryLink)
:serialCommaJoin()
return "It is " .. (codeInPagenameInList and "also" or "") ..
" used to transliterate " .. langs .. "." .. categories:concat()
end
-- Used by {{strip diacritics module documentation}}.
function export.stripDiacriticsModuleLangList(frame)
local pagename, subpage
if frame.args[1] then
pagename = frame.args[1]
else
local title = get_current_title()
subpage = title.subpageText
pagename = title.text
if subpage ~= pagename then
pagename = title.rootText
end
end
local stripDiacriticsModule = pagename
local languageObjects = require("Module:languages/byStripDiacriticsModule")(stripDiacriticsModule)
local codeInPagename = pagename:match("^([%l-]+)%-.*stripdiacritics$")
local categories = Array()
local codeInPagenameInList = false
if codeInPagename then
if languageObjects[1] and subpage ~= "documentation" then
local agreement = languageObjects[2] and "s" or ""
categories:insert("[[Category:Diacritic-stripping modules used by " ..
#languageObjects .. " language" .. agreement .. "]]")
end
languageObjects = Array(languageObjects)
:filter(
function(lang)
local result = lang:getCode() ~= codeInPagename
codeInPagenameInList = codeInPagenameInList or result
return result
end)
end
if subpage ~= "documentation" then
for script_code in pagename:gmatch("%f[^-%z]%u%l%l%l%f[-]") do
local script = get_script(script_code)
if script then
categories:insert("[[Category:" .. script:getCategoryName() .. "]]")
end
end
end
if subpage ~= "documentation" and not title_exists("Module:" .. pagename .. "/testcases") then
categories:insert("[[Category:Diacritic-stripping modules without a testcases subpage]]")
end
if not languageObjects[1] then
return categories:concat()
end
local langs = Array(languageObjects)
:sort(
function(lang1, lang2)
return lang1:getCode() < lang2:getCode()
end)
-- This will not error because languageObjects is not empty.
:map(languageObjects[1].makeCategoryLink)
:serialCommaJoin()
return "It is " .. (codeInPagenameInList and "also" or "") ..
" used to strip diacritics for " .. langs .. "." .. categories:concat()
end
-- Used by {{sortkey module documentation}}.
function export.sortkeyModuleLangList(frame)
local pagename, subpage
if frame.args[1] then
pagename = frame.args[1]
else
local title = get_current_title()
subpage = title.subpageText
pagename = title.text
if subpage ~= pagename then
pagename = title.rootText
end
end
local sortkeyModule = pagename
local languageObjects = require("Module:languages/bySortkeyModule")(sortkeyModule)
local codeInPagename = pagename:match("^([%l-]+)%-.*sortkey$")
local categories = Array()
local codeInPagenameInList = false
if codeInPagename then
if languageObjects[1] and subpage ~= "documentation" then
local agreement = languageObjects[2] and "s" or ""
categories:insert("[[Category:Sortkey-generating modules used by " ..
#languageObjects .. " language" .. agreement .. "]]")
end
languageObjects = Array(languageObjects)
:filter(
function(lang)
local result = lang:getCode() ~= codeInPagename
codeInPagenameInList = codeInPagenameInList or result
return result
end)
end
if subpage ~= "documentation" then
for script_code in pagename:gmatch("%f[^-%z]%u%l%l%l%f[-]") do
local script = get_script(script_code)
if script then
categories:insert("[[Category:" .. script:getCategoryName() .. "]]")
end
end
end
if subpage ~= "documentation" and not title_exists("Module:" .. pagename .. "/testcases") then
categories:insert("[[Category:Sortkey-generating modules without a testcases subpage]]")
end
if not languageObjects[1] then
return categories:concat()
end
local langs = Array(languageObjects)
:sort(
function(lang1, lang2)
return lang1:getCode() < lang2:getCode()
end)
-- This will not error because languageObjects is not empty.
:map(languageObjects[1].makeCategoryLink)
:serialCommaJoin()
return "It is " .. (codeInPagenameInList and "also" or "") ..
" used to sort " .. langs .. "." .. categories:concat()
end
return export
2zocir7fwngs8tapj07cvoaierxzts2
Mòideal:documentation/documentation
828
3602
86250
67450
2026-07-21T22:59:54Z
Altronic
4137
Copy from English Wiktionary
86250
wikitext
text/x-wiki
Serves {{temp|documentation}} and {{temp|translit module documentation}}. {{temp|documentation}} is added to modules automatically (through [[MediaWiki:Scribunto-doc-page-show]] if the doc page exists, otherwise through [[MediaWiki:Scribunto-doc-page-does-not-exist]]); added to user JavaScript pages automatically (through [[MediaWiki:Clearyourcache]]); and manually added to template pages. It automatically adds categories, or categories and documentation, to some modules based on their titles.
More specifically, for modules:
# When there is no doc page for the module, [[Module:documentation]] checks for various sorts of special modules (based on the module title) and autogenerates the documentation and categories of those modules. If this check fails, the module is added to [[:Category:Templates and modules needing documentation]], and [[Module:module categorization]] is called to autogenerate the categories for lang-specific modules of the form {{cd|LANGCODE-TYPE}}, optionally with a subpage (e.g. {{cd|LANGCODE-TYPE/data}}, {{cd|LANGCODE-TYPE/testcases}}, {{cd|LANGCODE-TYPE/data/testcases}}, or any other subpage). If this check also fails, the module is added to [[:Category:Uncategorized modules]].
# When there is a doc page for the module, the contents of that page take precedence over any autogenerated content. However, if that page does not have an {{cd|<nowiki><includeonly>...</includeonly></nowiki>}} section and does not have an invocation of {{tl|module cat}}, the same checks are done as when no doc page exists (including checks for specially-titled modules and falling back to calling [[Module:module categorization]]), but only for the purposes of autogenerating categories. If no such categories could be determined, the module is added to [[:Category:Uncategorized modules]].
More specifically, for templates:
* ... (DOCUMENT ME)
Ideas:
* Make more usable on other Wiktionaries by creating data module with translations of text, and moving module regex to separate module.
==Automatic module documentation generators==
{{#invoke:documentation|module_auto_doc_table}}
<includeonly>
[[Category:Documentation modules]]
</includeonly>
t7uuv3j5jox6wgr4e9jyjr3yusl5l0c
86334
86250
2026-07-22T21:06:06Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:documentation/doc]] gu [[Mòideal:documentation/documentation]]
86250
wikitext
text/x-wiki
Serves {{temp|documentation}} and {{temp|translit module documentation}}. {{temp|documentation}} is added to modules automatically (through [[MediaWiki:Scribunto-doc-page-show]] if the doc page exists, otherwise through [[MediaWiki:Scribunto-doc-page-does-not-exist]]); added to user JavaScript pages automatically (through [[MediaWiki:Clearyourcache]]); and manually added to template pages. It automatically adds categories, or categories and documentation, to some modules based on their titles.
More specifically, for modules:
# When there is no doc page for the module, [[Module:documentation]] checks for various sorts of special modules (based on the module title) and autogenerates the documentation and categories of those modules. If this check fails, the module is added to [[:Category:Templates and modules needing documentation]], and [[Module:module categorization]] is called to autogenerate the categories for lang-specific modules of the form {{cd|LANGCODE-TYPE}}, optionally with a subpage (e.g. {{cd|LANGCODE-TYPE/data}}, {{cd|LANGCODE-TYPE/testcases}}, {{cd|LANGCODE-TYPE/data/testcases}}, or any other subpage). If this check also fails, the module is added to [[:Category:Uncategorized modules]].
# When there is a doc page for the module, the contents of that page take precedence over any autogenerated content. However, if that page does not have an {{cd|<nowiki><includeonly>...</includeonly></nowiki>}} section and does not have an invocation of {{tl|module cat}}, the same checks are done as when no doc page exists (including checks for specially-titled modules and falling back to calling [[Module:module categorization]]), but only for the purposes of autogenerating categories. If no such categories could be determined, the module is added to [[:Category:Uncategorized modules]].
More specifically, for templates:
* ... (DOCUMENT ME)
Ideas:
* Make more usable on other Wiktionaries by creating data module with translations of text, and moving module regex to separate module.
==Automatic module documentation generators==
{{#invoke:documentation|module_auto_doc_table}}
<includeonly>
[[Category:Documentation modules]]
</includeonly>
t7uuv3j5jox6wgr4e9jyjr3yusl5l0c
Mòideal:links/templates
828
3737
86382
11066
2026-07-23T03:47:26Z
Altronic
4137
Copy from English Wiktionary
86382
Scribunto
text/plain
-- Prevent substitution.
if mw.isSubsting() then
return require("Module:unsubst")
end
local export = {}
local links_module = "Module:links"
local process_params = require("Module:parameters").process
local remove = table.remove
local upper = require("Module:string utilities").upper
--[=[
Modules used:
[[Module:links]]
[[Module:languages]]
[[Module:scripts]]
[[Module:parameters]]
[[Module:debug]]
]=]
do
local function get_args(frame)
-- `compat` is a compatibility mode for {{term}}.
-- If given a nonempty value, the function uses lang= to specify the
-- language, and all the positional parameters shift one number lower.
local iargs = frame.args
iargs.compat = iargs.compat and iargs.compat ~= ""
iargs.langname = iargs.langname and iargs.langname ~= ""
iargs.notself = iargs.notself and iargs.notself ~= ""
local alias_of_4 = {alias_of = 4}
local boolean = {type = "boolean"}
local params = {
[1] = {required = true, type = "language", default = "und"},
[2] = true,
[3] = true,
[4] = true,
g = {list = true, type = "genders", flatten = true},
gloss = alias_of_4,
id = true,
lit = true,
ng = true,
pos = true,
sc = {type = "script"},
t = alias_of_4,
tr = true,
ts = true,
q = {type = "qualifier"},
qq = {type = "qualifier"},
l = {type = "labels"},
ll = {type = "labels"},
ref = {type = "references"},
["accel-form"] = true,
["accel-translit"] = true,
["accel-lemma"] = true,
["accel-lemma-translit"] = true,
["accel-gender"] = true,
["accel-nostore"] = boolean,
}
if iargs.compat then
params.lang = {type = "language", default = "und"}
remove(params, 1)
alias_of_4.alias_of = 3
end
if iargs.langname then
params.w = boolean
end
return process_params(frame:getParent().args, params), iargs
end
-- Used in [[Template:l]] and [[Template:m]].
function export.l_term_t(frame)
local args, iargs = get_args(frame)
local compat = iargs.compat
local lang = args[compat and "lang" or 1]
-- Tracking for und.
if not compat and lang:getCode() == "und" then
require("Module:debug").track("link/und")
end
local term = args[(compat and 1 or 2)]
local alt = args[(compat and 2 or 3)]
term = term ~= "" and term or nil
if not term and not alt and iargs.demo then
term = iargs.demo
end
local langname = iargs.langname and (
args.w and lang:makeWikipediaLink() or
lang:getCanonicalName()
) or nil
if langname and term == "-" then
return langname
end
-- Forward the information to full_link
return (langname and langname .. " " or "") .. require(links_module).full_link(
{
lang = lang,
sc = args.sc,
track_sc = true,
term = term,
alt = alt,
gloss = args[4],
id = args.id,
tr = args.tr,
ts = args.ts,
genders = args.g,
pos = args.pos,
ng = args.ng,
lit = args.lit,
q = args.q,
qq = args.qq,
l = args.l,
ll = args.ll,
refs = args.ref,
show_qualifiers = true,
accel = args["accel-form"] and {
form = args["accel-form"],
translit = args["accel-translit"],
lemma = args["accel-lemma"],
lemma_translit = args["accel-lemma-translit"],
gender = args["accel-gender"],
nostore = args["accel-nostore"],
} or nil
},
iargs.face,
not iargs.notself
)
end
-- Used in [[Template:link-annotations]].
function export.l_annotations_t(frame)
local args, iargs = get_args(frame)
-- Forward the information to format_link_annotations
return require(links_module).format_link_annotations(
{
lang = args[1],
tr = { args.tr },
ts = { args.ts },
genders = args.g,
pos = args.pos,
ng = args.ng,
lit = args.lit
},
iargs.face
)
end
end
-- Used in [[Template:ll]].
do
local function get_args(frame)
return process_params(frame:getParent().args, {
[1] = {required = true, type = "language", default = "und"},
[2] = {allow_empty = true},
[3] = true,
id = true,
sc = {type = "script"},
})
end
function export.ll(frame)
local args = get_args(frame)
local lang = args[1]
local sc = args.sc
local term = args[2]
term = term ~= "" and term or nil
return require(links_module).language_link{
lang = lang,
sc = sc,
term = term,
alt = args[3],
id = args.id
} or "<small>[Term?]</small>" ..
require("Module:utilities").format_categories(
{lang:getFullName() .. " term requests"},
lang, "-", nil, nil, sc
)
end
end
function export.def_t(frame)
local args = process_params(frame:getParent().args, {
[1] = {required = true, default = ""},
})
local face = frame.args.face
local ret = require("Module:script utilities").tag_definition(require(links_module).embedded_language_links{
term = args[1],
lang = require("Module:languages").getByCode("en"),
sc = require("Module:scripts").getByCode("Latn")
}, face)
if face == "non-gloss" then
return ret
end
return '<span class="mention-gloss-paren">(</span>' .. ret .. '<span class="mention-gloss-paren">)</span>'
end
function export.linkify_t(frame)
local args = process_params(frame:getParent().args, {
[1] = {required = true, default = ""},
})
args[1] = mw.text.trim(args[1])
if args[1] == "" or args[1]:find("[[", nil, true) then
return args[1]
end
return "[[" .. args[1] .. "]]"
end
function export.cap_t(frame)
local args = process_params(frame:getParent().args, {
[1] = {required = true},
[2] = true,
lang = {type = "language", default = "en"},
})
local term = args[1]
return require(links_module).full_link{
lang = args.lang,
term = term,
alt = term:gsub("^.[\128-\191]*", upper) .. (args[2] or "")
}
end
function export.section_link_t(frame)
local args = process_params(frame:getParent().args, {
[1] = {},
})
return require(links_module).section_link(args[1])
end
return export
49ywpqwyhc1meeszxumsw7m3fxck38v
Mòideal:links
828
3739
86312
63821
2026-07-22T08:54:22Z
Altronic
4137
Copy from English Wiktionary
86312
Scribunto
text/plain
local export = {}
--[=[
[[Unsupported titles]], pages with high memory usage,
extraction modules and part-of-speech names are listed
at [[Module:links/data]].
Other modules used:
[[Module:script utilities]]
[[Module:scripts]]
[[Module:languages]] and its submodules
[[Module:gender and number]]
[[Module:debug/track]]
]=]
local anchors_module = "Module:anchors"
local debug_track_module = "Module:debug/track"
local form_of_module = "Module:form of"
local gender_and_number_module = "Module:gender and number"
local languages_module = "Module:languages"
local load_module = "Module:load"
local memoize_module = "Module:memoize"
local pages_module = "Module:pages"
local pron_qualifier_module = "Module:pron qualifier"
local scripts_module = "Module:scripts"
local script_utilities_module = "Module:script utilities"
local string_encode_entities_module = "Module:string/encode entities"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local find = string.find
local get_current_title = mw.title.getCurrentTitle
local insert = table.insert
local ipairs = ipairs
local match = string.match
local new_title = mw.title.new
local pairs = pairs
local remove = table.remove
local sub = string.sub
local toNFC = mw.ustring.toNFC
local tostring = tostring
local type = type
local unstrip = mw.text.unstrip
local NAMESPACE = get_current_title().nsText
local function anchor_encode(...)
anchor_encode = require(memoize_module)(mw.uri.anchorEncode, true)
return anchor_encode(...)
end
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function decode_entities(...)
decode_entities = require(string_utilities_module).decode_entities
return decode_entities(...)
end
local function decode_uri(...)
decode_uri = require(string_utilities_module).decode_uri
return decode_uri(...)
end
-- Can't yet replace, as the [[Module:string utilities]] version no longer has automatic double-encoding prevention, which requires changes here to account for.
local function encode_entities(...)
encode_entities = require(string_encode_entities_module)
return encode_entities(...)
end
local function extend(...)
extend = require(table_module).extend
return extend(...)
end
local function find_best_script_without_lang(...)
find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang
return find_best_script_without_lang(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function format_genders(...)
format_genders = require(gender_and_number_module).format_genders
return format_genders(...)
end
local function format_qualifiers(...)
format_qualifiers = require(pron_qualifier_module).format_qualifiers
return format_qualifiers(...)
end
local function get_current_L2(...)
get_current_L2 = require(pages_module).get_current_L2
return get_current_L2(...)
end
local function get_lang(...)
get_lang = require(languages_module).getByCode
return get_lang(...)
end
local function get_script(...)
get_script = require(scripts_module).getByCode
return get_script(...)
end
local function language_anchor(...)
language_anchor = require(anchors_module).language_anchor
return language_anchor(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function request_script(...)
request_script = require(script_utilities_module).request_script
return request_script(...)
end
local function shallow_copy(...)
shallow_copy = require(table_module).shallowCopy
return shallow_copy(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function tag_text(...)
tag_text = require(script_utilities_module).tag_text
return tag_text(...)
end
local function tag_translit(...)
tag_translit = require(script_utilities_module).tag_translit
return tag_translit(...)
end
local function trim(...)
trim = require(string_utilities_module).trim
return trim(...)
end
local function u(...)
u = require(string_utilities_module).char
return u(...)
end
local function ulower(...)
ulower = require(string_utilities_module).lower
return ulower(...)
end
local function umatch(...)
umatch = require(string_utilities_module).match
return umatch(...)
end
local m_headword_data
local function get_headword_data()
m_headword_data = load_data("Module:headword/data")
return m_headword_data
end
local function track(page, code)
local tracking_page = "links/" .. page
debug_track(tracking_page)
if code then
debug_track(tracking_page .. "/" .. code)
end
end
local function selective_trim(...)
-- Unconditionally trimmed charset.
local always_trim =
"\194\128-\194\159" .. -- U+0080-009F (C1 control characters)
"\194\173" .. -- U+00AD (soft hyphen)
"\226\128\170-\226\128\174" .. -- U+202A-202E (directionality formatting characters)
"\226\129\166-\226\129\169" -- U+2066-2069 (directionality formatting characters)
-- Standard trimmed charset.
local standard_trim = "%s" .. -- (default whitespace charset)
"\226\128\139-\226\128\141" .. -- U+200B-200D (zero-width spaces)
always_trim
-- If there are non-whitespace characters, trim all characters in `standard_trim`.
-- Otherwise, only trim the characters in `always_trim`.
selective_trim = function(text)
if text == "" then
return text
end
local trimmed = trim(text, standard_trim)
if trimmed ~= "" then
return trimmed
end
return trim(text, always_trim)
end
return selective_trim(...)
end
local function escape(text, str)
local rep
repeat
text, rep = text:gsub("\\\\(\\*" .. str .. ")", "\5%1")
until rep == 0
return (text:gsub("\\" .. str, "\6"))
end
local function unescape(text, str)
return (text
:gsub("\5", "\\")
:gsub("\6", str))
end
-- Remove bold, italics, soft hyphens, strip markers and HTML tags.
local function remove_formatting(str)
str = str
:gsub("('*)'''(.-'*)'''", "%1%2")
:gsub("('*)''(.-'*)''", "%1%2")
:gsub("", "")
return (unstrip(str)
:gsub("<[^<>]+>", ""))
end
--[==[Takes an input and splits on a double slash (taking account of escaping backslashes).]==]
function export.split_on_slashes(text)
if text:find("\\", nil, true) then
track("escaped", "split_on_slashes")
end
text = split(escape(text, "//"), "//", true) or {}
for i, v in ipairs(text) do
text[i] = unescape(v, "//")
if v == "" then
text[i] = false
end
end
return text
end
--[==[Takes a wikilink and outputs the link target and display text. By default, the link target will be returned as a title object, but if `allow_bad_target` is set it will be returned as a string, and no check will be performed as to whether it is a valid link target.]==]
function export.get_wikilink_parts(text, allow_bad_target)
-- TODO: replace `allow_bad_target` with `allow_unsupported`, with support for links to unsupported titles, including escape sequences.
if ( -- Filters out anything but "[[...]]" with no intermediate "[[" or "]]".
not match(text, "^()%[%[") or -- Faster than sub(text, 1, 2) ~= "[[".
find(text, "[[", 3, true) or
find(text, "]]", 3, true) ~= #text - 1
) then
return nil, nil
end
local pipe, title, display = find(text, "|", 3, true)
if pipe then
title, display = sub(text, 3, pipe - 1), sub(text, pipe + 1, -3)
else
title = sub(text, 3, -3)
display = title
end
if allow_bad_target then
return title, display
end
title = new_title(title)
-- No title object means the target is invalid.
if title == nil then
return nil, nil
-- If the link target starts with "#" then mw.title.new returns a broken
-- title object, so grab the current title and give it the correct fragment.
elseif title.prefixedText == "" then
local fragment = title.fragment
if fragment == "" then -- [[#]] isn't valid
return nil, nil
end
title = get_current_title()
title.fragment = fragment
end
return title, display
end
-- Does the work of export.get_fragment, but can be called directly to avoid unnecessary checks for embedded links.
local function get_fragment(text)
text = escape(text, "#")
-- Replace numeric character references with the corresponding character (' → '),
-- as they contain #, which causes the numeric character reference to be
-- misparsed (wa'a → wa'a → pagename wa&, fragment 39;a).
text = decode_entities(text)
local target, fragment = text:match("^(.-)#(.+)$")
target = target or text
target = unescape(target, "#")
fragment = fragment and unescape(fragment, "#")
return target, fragment
end
--[==[Takes a link target and outputs the actual target and the fragment (if any).]==]
function export.get_fragment(text)
if text:find("\\", nil, true) then
track("escaped", "get_fragment")
end
-- If there are no embedded links, process input.
local open = find(text, "[[", nil, true)
if not open then
return get_fragment(text)
end
local close = find(text, "]]", open + 2, true)
if not close then
return get_fragment(text)
-- If there is one, but it's redundant (i.e. encloses everything with no pipe), remove and process.
elseif open == 1 and close == #text - 1 and not find(text, "|", 3, true) then
return get_fragment(sub(text, 3, -3))
end
-- Otherwise, return the input.
return text
end
--[==[
Given a link target as passed to `full_link()`, get the actual page that the target refers to. This removes
bold, italics, strip markets and HTML; calls `makeEntryName()` for the language in question; converts targets
beginning with `*` to the Reconstruction namespace; and converts appendix-constructed languages to the Appendix
namespace. Returns up to three values:
# the actual page to link to, or {nil} to not link to anything;
# how the target should be displayed as, if the user didn't explicitly specify any display text; generally the
same as the original target, but minus any anti-asterisk !!;
# the value `true` if the target had a backslash-escaped * in it (FIXME: explain this more clearly).
]==]
function export.get_link_page_with_auto_display(target, lang, sc, plain)
local orig_target = target
if not target then
return nil
elseif target:find("\\", nil, true) then
track("escaped", "get_link_page")
end
target = remove_formatting(target)
if target:sub(1, 1) == ":" then
track("initial colon")
-- FIXME, the auto_display (second return value) should probably remove the colon
return target:sub(2), orig_target
end
local prefix = target:match("^(.-):")
-- Convert any escaped colons
target = target:gsub("\\:", ":")
if prefix then
-- If this is an a link to another namespace or an interwiki link, ensure there's an initial colon and then
-- return what we have (so that it works as a conventional link, and doesn't do anything weird like add the term
-- to a category.)
prefix = ulower(trim(prefix))
if prefix ~= "" and (
load_data("Module:data/namespaces")[prefix] or
load_data("Module:data/interwikis")[prefix]
) then
return target, orig_target
end
end
-- Check if the term is reconstructed and remove any asterisk. Also check for anti-asterisk (!!).
-- Otherwise, handle the escapes.
local reconstructed, escaped, anti_asterisk
if not plain then
target, reconstructed = target:gsub("^%*(.)", "%1")
if reconstructed == 0 then
target, anti_asterisk = target:gsub("^!!(.)", "%1")
if anti_asterisk == 1 then
-- Remove !! from original. FIXME! We do it this way because the call to remove_formatting() above
-- may cause non-initial !! to be interpreted as anti-asterisks. We should surely move the
-- remove_formatting() call later.
orig_target = orig_target:gsub("^!!", "")
end
end
end
target, escaped = target:gsub("^(\\-)\\%*", "%1*")
if not (sc and sc:getCode() ~= "None") then
sc = lang:findBestScript(target)
end
-- Remove carets if they are used to capitalize parts of transliterations (unless they have been escaped).
if (not sc:hasCapitalization()) and sc:isTransliterated() and target:match("%^") then
target = escape(target, "^")
:gsub("%^", "")
target = unescape(target, "^")
end
-- Get the entry name for the language.
target = lang:makeEntryName(target, sc, reconstructed == 1 or lang:hasType("appendix-constructed"))
-- If the link contains unexpanded template parameters, then don't create a link.
if target:match("{{{.-}}}") then
-- FIXME: Should we return the original target as the default display value (second return value)?
return nil
end
-- Link to appendix for reconstructed terms and terms in appendix-only languages. Plain links interpret *
-- literally, however.
if reconstructed == 1 then
if lang:getFullCode() == "und" then
-- Return the original target as default display value. If we don't do this, we wrongly get
-- [Term?] displayed instead.
return nil, orig_target
end
target = "Reconstruction:" .. lang:getFullName() .. "/" .. target
-- Reconstructed languages and substrates require an initial *.
elseif anti_asterisk ~= 1 and (lang:hasType("reconstructed") or lang:getFamilyCode() == "qfa-sub") then
error(("The specified language %s is unattested, while the term '%s' does not begin with '*' to indicate that it is reconstructed.")
:
format(lang:getCanonicalName(), orig_target))
elseif lang:hasType("appendix-constructed") then
target = "Appendix:" .. lang:getFullName() .. "/" .. target
else
target = target
end
return target, orig_target, escaped > 0
end
function export.get_link_page(target, lang, sc, plain)
local target, auto_display, escaped = export.get_link_page_with_auto_display(target, lang, sc, plain)
return target, escaped
end
-- Make a link from a given link's parts
local function make_link(link, lang, sc, id, isolated, cats, no_alt_ast, plain)
-- Convert percent encoding to plaintext.
link.target = link.target and decode_uri(link.target, "PATH")
link.fragment = link.fragment and decode_uri(link.fragment, "PATH")
-- Find fragments (if one isn't already set).
-- Prevents {{l|en|word#Etymology 2|word}} from linking to [[word#Etymology 2#English]].
-- # can be escaped as \#.
if link.target and link.fragment == nil then
link.target, link.fragment = get_fragment(link.target)
end
-- Process the target
local auto_display, escaped
link.target, auto_display, escaped = export.get_link_page_with_auto_display(link.target, lang, sc, plain)
-- Create a default display form.
-- If the target is "" then it's a link like [[#English]], which refers to the current page.
if auto_display == "" then
auto_display = (m_headword_data or get_headword_data()).pagename
end
-- If the display is the target and the reconstruction * has been escaped, remove the escaping backslash.
if escaped then
auto_display = auto_display:gsub("\\([^\\]*%*)", "%1", 1)
end
-- Process the display form.
if link.display then
local orig_display = link.display
link.display = lang:makeDisplayText(link.display, sc, true)
if cats then
auto_display = lang:makeDisplayText(auto_display, sc)
-- If the alt text is the same as what would have been automatically generated, then the alt parameter is redundant (e.g. {{l|en|foo|foo}}, {{l|en|w:foo|foo}}, but not {{l|en|w:foo|w:foo}}).
-- If they're different, but the alt text could have been entered as the term parameter without it affecting the target page, then the target parameter is redundant (e.g. {{l|ru|фу|фу́}}).
-- If `no_alt_ast` is true, use pcall to catch the error which will be thrown if this is a reconstructed lang and the alt text doesn't have *.
if link.display == auto_display then
insert(cats, lang:getFullName() .. " links with redundant alt parameters")
else
local ok, check
if no_alt_ast then
ok, check = pcall(export.get_link_page, orig_display, lang, sc, plain)
else
ok = true
check = export.get_link_page(orig_display, lang, sc, plain)
end
if ok and link.target == check then
insert(cats, lang:getFullName() .. " links with redundant target parameters")
end
end
end
else
link.display = lang:makeDisplayText(auto_display, sc)
end
if not link.target then
return link.display
end
-- If the target is the same as the current page, there is no sense id
-- and either the language code is "und" or the current L2 is the current
-- language then return a "self-link" like the software does.
if link.target == get_current_title().prefixedText then
local fragment, current_L2 = link.fragment, get_current_L2()
if (
fragment and fragment == current_L2 or
not (id or fragment) and (lang:getFullCode() == "und" or lang:getFullName() == current_L2)
) then
return tostring(mw.html.create("strong")
:addClass("selflink")
:wikitext(link.display))
end
end
-- Add fragment. Do not add a section link to "Undetermined", as such sections do not exist and are invalid.
-- TabbedLanguages handles links without a section by linking to the "last visited" section, but adding
-- "Undetermined" would break that feature. For localized prefixes that make syntax error, please use the
-- format: ["xyz"] = true.
local prefix = link.target:match("^:*([^:]+):")
prefix = prefix and ulower(prefix)
if prefix ~= "category" and not (prefix and load_data("Module:data/interwikis")[prefix]) then
if (link.fragment or link.target:sub(-1) == "#") and not plain then
track("fragment", lang:getFullCode())
if cats then
insert(cats, lang:getFullName() .. " links with manual fragments")
end
end
if not link.fragment then
if id then
link.fragment = lang:getFullCode() == "und" and anchor_encode(id) or language_anchor(lang, id)
elseif lang:getFullCode() ~= "und" and not (link.target:match("^Appendix:") or link.target:match("^Reconstruction:")) then
link.fragment = anchor_encode(lang:getFullName())
end
end
end
-- Put inward-facing square brackets around a link to isolated spacing character(s).
if isolated and #link.display > 0 and not umatch(decode_entities(link.display), "%S") then
link.display = "]" .. link.display .. "["
end
link.target = link.target:gsub("^(:?)(.*)", function(m1, m2)
return m1 .. encode_entities(m2, "#%&+/:<=>@[\\]_{|}")
end)
link.fragment = link.fragment and encode_entities(remove_formatting(link.fragment), "#%&+/:<=>@[\\]_{|}")
return "[[" ..
link.target:gsub("^[^:]", ":%0") .. (link.fragment and "#" .. link.fragment or "") .. "|" .. link.display .. "]]"
end
-- Split a link into its parts
local function parse_link(linktext)
local link = { target = linktext }
local target = link.target
link.target, link.display = target:match("^(..-)|(.+)$")
if not link.target then
link.target = target
link.display = target
end
-- There's no point in processing these, as they aren't real links.
local target_lower = link.target:lower()
for _, false_positive in ipairs({ "category", "cat", "file", "image" }) do
if target_lower:match("^" .. false_positive .. ":") then
return nil
end
end
link.display = decode_entities(link.display)
link.target, link.fragment = get_fragment(link.target)
-- So that make_link does not look for a fragment again.
if not link.fragment then
link.fragment = false
end
return link
end
local function check_params_ignored_when_embedded(alt, lang, id, cats)
if alt then
track("alt-ignored")
if cats then
insert(cats, lang:getFullName() .. " links with ignored alt parameters")
end
end
if id then
track("id-ignored")
if cats then
insert(cats, lang:getFullName() .. " links with ignored id parameters")
end
end
end
-- Find embedded links and ensure they link to the correct section.
local function process_embedded_links(text, alt, lang, sc, id, cats, no_alt_ast, plain)
-- Process the non-linked text.
text = lang:makeDisplayText(text, sc, true)
-- If the text begins with * and another character, then act as if each link begins with *. However, don't do this if the * is contained within a link at the start. E.g. `|*[[foo]]` would set all_reconstructed to true, while `|[[*foo]]` would not.
local all_reconstructed = false
if not plain then
-- anchor_encode removes links etc.
if anchor_encode(text):sub(1, 1) == "*" then
all_reconstructed = true
end
-- Otherwise, handle any escapes.
text = text:gsub("^(\\-)\\%*", "%1*")
end
check_params_ignored_when_embedded(alt, lang, id, cats)
local function process_link(space1, linktext, space2)
local capture = "[[" .. linktext .. "]]"
local link = parse_link(linktext)
-- Return unprocessed false positives untouched (e.g. categories).
if not link then
return capture
end
if all_reconstructed then
if link.target:find("^!!") then
-- Check for anti-asterisk !! at the beginning of a target, indicating that a reconstructed term
-- wants a part of the term to link to a non-reconstructed term, e.g. Old English
-- {{ang-noun|m|head=*[[!!Crist|Cristes]] [[!!mæsseǣfen]]}}.
link.target = link.target:sub(3)
-- Also remove !! from the display, which may have been copied from the target (as in mæsseǣfen in
-- the example above).
link.display = link.display:gsub("^!!", "")
elseif not link.target:match("^%*") then
link.target = "*" .. link.target
end
end
linktext = make_link(link, lang, sc, id, false, nil, no_alt_ast, plain)
:gsub("^%[%[", "\3")
:gsub("%]%]$", "\4")
return space1 .. linktext .. space2
end
-- Use chars 1 and 2 as temporary substitutions, so that we can use charsets. These are converted to chars 3 and 4 by process_link, which means we can convert any remaining chars 1 and 2 back to square brackets (i.e. those not part of a link).
text = text
:gsub("%[%[", "\1")
:gsub("%]%]", "\2")
-- If the script uses ^ to capitalize transliterations, make sure that any carets preceding links are on the inside, so that they get processed with the following text.
if (
text:find("^", nil, true) and
not sc:hasCapitalization() and
sc:isTransliterated()
) then
text = escape(text, "^")
:gsub("%^\1", "\1%^")
text = unescape(text, "^")
end
text = text:gsub("\1(%s*)([^\1\2]-)(%s*)\2", process_link)
-- Remove the extra * at the beginning of a language link if it's immediately followed by a link whose display begins with * too.
if all_reconstructed then
text = text:gsub("^%*\3([^|\1-\4]+)|%*", "\3%1|*")
end
return (text
:gsub("[\1\3]", "[[")
:gsub("[\2\4]", "]]")
)
end
local function simple_link(term, fragment, alt, lang, sc, id, cats, no_alt_ast, srwc)
local plain
if lang == nil then
lang, plain = get_lang("und"), true
end
-- Get the link target and display text. If the term is the empty string, treat the input as a link to the current page.
if term == "" then
term = get_current_title().prefixedText
elseif term then
local new_term, new_alt = export.get_wikilink_parts(term, true)
if new_term then
check_params_ignored_when_embedded(alt, lang, id, cats)
-- [[|foo]] links are treated as plaintext "[[|foo]]".
-- FIXME: Pipes should be handled via a proper escape sequence, as they can occur in unsupported titles.
if new_term == "" then
term, alt = nil, term
else
local title = new_title(new_term)
if title then
local ns = title.namespace
-- File: and Category: links should be returned as-is.
if ns == 6 or ns == 14 then
return term
end
end
term, alt = new_term, new_alt
if cats then
if not (srwc and srwc(term, alt)) then
insert(cats, lang:getFullName() .. " links with redundant wikilinks")
end
end
end
end
end
if alt then
alt = selective_trim(alt)
if alt == "" then
alt = nil
end
end
-- If there's nothing to process, return nil.
if not (term or alt) then
return nil
end
-- If there is no script, get one.
if not sc then
sc = lang:findBestScript(alt or term)
end
-- Embedded wikilinks need to be processed individually.
if term then
local open = find(term, "[[", nil, true)
if open and find(term, "]]", open + 2, true) then
return process_embedded_links(term, alt, lang, sc, id, cats, no_alt_ast, plain)
end
term = selective_trim(term)
end
-- If not, make a link using the parameters.
return make_link({
target = term,
display = alt,
fragment = fragment
}, lang, sc, id, true, cats, no_alt_ast, plain)
end
--[==[Creates a basic link to the given term. It links to the language section (such as <code>==English==</code>), but it does not add language and script wrappers, so any code that uses this function should call the <code class="n">[[Module:script utilities#tag_text|tag_text]]</code> from [[Module:script utilities]] to add such wrappers itself at some point.
The first argument, <code class="n">data</code>, may contain the following items, a subset of the items used in the <code class="n">data</code> argument of <code class="n">full_link</code>. If any other items are included, they are ignored.
{ {
term = entry_to_link_to,
alt = link_text_or_displayed_text,
lang = language_object,
id = sense_id,
} }
; <code class="n">term</code>
: Text to turn into a link. This is generally the name of a page. The text can contain wikilinks already embedded in it. These are processed individually just like a single link would be. The <code class="n">alt</code> argument is ignored in this case.
; <code class="n">alt</code> (''optional'')
: The alternative display for the link, if different from the linked page. If this is {{code|lua|nil}}, the <code class="n">text</code> argument is used instead (much like regular wikilinks). If <code class="n">text</code> contains wikilinks in it, this argument is ignored and has no effect. (Links in which the alt is ignored are tracked with the tracking template {{whatlinkshere|tracking=links/alt-ignored}}.)
; <code class="n">lang</code>
: The [[Module:languages#Language objects|language object]] for the term being linked. If this argument is defined, the function will determine the language's canonical name (see [[Template:language data documentation]]), and point the link or links in the <code class="n">term</code> to the language's section of an entry, or to a language-specific senseid if the <code class="n">id</code> argument is defined.
; <code class="n">id</code> (''optional'')
: Sense id string. If this argument is defined, the link will point to a language-specific sense id ({{ll|en|identifier|id=HTML}}) created by the template {{temp|senseid}}. A sense id consists of the language's canonical name, a hyphen (<code>-</code>), and the string that was supplied as the <code class="n">id</code> argument. This is useful when a term has more than one sense in a language. If the <code class="n">term</code> argument contains wikilinks, this argument is ignored. (Links in which the sense id is ignored are tracked with the tracking template {{whatlinkshere|tracking=links/id-ignored}}.)
The second argument is as follows:
; <code class="n">allow_self_link</code>
: If {{code|lua|true}}, the function will also generate links to the current page. The default ({{code|lua|false}}) will not generate a link but generate a bolded "self link" instead.
The following special options are processed for each link (both simple text and with embedded wikilinks):
* The target page name will be processed to generate the correct entry name. This is done by the [[Module:languages#makeEntryName|makeEntryName]] function in [[Module:languages]], using the <code class="n">entry_name</code> replacements in the language's data file (see [[Template:language data documentation]] for more information). This function is generally used to automatically strip dictionary-only diacritics that are not part of the normal written form of a language.
* If the text starts with <code class="n">*</code>, then the term is considered a reconstructed term, and a link to the Reconstruction: namespace will be created. If the text contains embedded wikilinks, then <code class="n">*</code> is automatically applied to each one individually, while preserving the displayed form of each link as it was given. This allows linking to phrases containing multiple reconstructed terms, while only showing the * once at the beginning.
* If the text starts with <code class="n">:</code>, then the link is treated as "raw" and the above steps are skipped. This can be used in rare cases where the page name begins with <code class="n">*</code> or if diacritics should not be stripped. For example:
** {{temp|l|en|*nix}} links to the nonexistent page [[Reconstruction:English/nix]] (<code class="n">*</code> is interpreted as a reconstruction), but {{temp|l|en|:*nix}} links to [[*nix]].
** {{temp|l|sl|Franche-Comté}} links to the nonexistent page [[Franche-Comte]] (<code>é</code> is converted to <code>e</code> by <code class="n">makeEntryName</code>), but {{temp|l|sl|:Franche-Comté}} links to [[Franche-Comté]].]==]
function export.language_link(data)
if type(data) ~= "table" then
error(
"The first argument to the function language_link must be a table. See Module:links/documentation for more information.")
elseif data.term and data.term:find("\\", nil, true) or data.alt and data.alt:find("\\", nil, true) then
track("escaped", "language_link")
end
-- Categorize links to "und".
local lang, cats = data.lang, data.cats
if cats and lang:getCode() == "und" then
insert(cats, "Undetermined language links")
end
return simple_link(
data.term,
data.fragment,
data.alt,
lang,
data.sc,
data.id,
cats,
data.no_alt_ast,
data.suppress_redundant_wikilink_cat
)
end
function export.plain_link(data)
if type(data) ~= "table" then
error(
"The first argument to the function plain_link must be a table. See Module:links/documentation for more information.")
elseif data.term and data.term:find("\\", nil, true) or data.alt and data.alt:find("\\", nil, true) then
track("escaped", "plain_link")
end
return simple_link(
data.term,
data.fragment,
data.alt,
nil,
data.sc,
data.id,
data.cats,
data.no_alt_ast,
data.suppress_redundant_wikilink_cat
)
end
--[==[Replace any links with links to the correct section, but don't link the whole text if no embedded links are found. Returns the display text form.]==]
function export.embedded_language_links(data)
if type(data) ~= "table" then
error(
"The first argument to the function embedded_language_links must be a table. See Module:links/documentation for more information.")
elseif data.term and data.term:find("\\", nil, true) or data.alt and data.alt:find("\\", nil, true) then
track("escaped", "embedded_language_links")
end
local term, lang, sc = data.term, data.lang, data.sc
-- If we don't have a script, get one.
if not sc then
sc = lang:findBestScript(term)
end
-- Do we have embedded wikilinks? If so, they need to be processed individually.
local open = find(term, "[[", nil, true)
if open and find(term, "]]", open + 2, true) then
return process_embedded_links(term, data.alt, lang, sc, data.id, data.cats, data.no_alt_ast)
end
-- If not, return the display text.
term = selective_trim(term)
-- FIXME: Double-escape any percent-signs, because we don't want to treat non-linked text as having percent-encoded characters. This is a hack: percent-decoding should come out of [[Module:languages]] and only dealt with in this module, as it's specific to links.
term = term:gsub("%%", "%%25")
return lang:makeDisplayText(term, sc, true)
end
function export.mark(text, item_type, face, lang)
local tag = { "", "" }
if item_type == "gloss" then
tag = { '<span class="mention-gloss-double-quote">“</span><span class="mention-gloss">',
'</span><span class="mention-gloss-double-quote">”</span>' }
if type(text) == "string" and text:match("^''[^'].*''$") then
-- Temporary tracking for mention glosses that are entirely italicized or bolded, which is probably
-- wrong. (Note that this will also find bolded mention glosses since they use triple apostrophes.)
track("italicized-mention-gloss", lang and lang:getFullCode() or nil)
end
elseif item_type == "tr" then
if face == "term" then
tag = { '<span lang="' .. lang:getFullCode() .. '" class="tr mention-tr Latn">',
'</span>' }
else
tag = { '<span lang="' .. lang:getFullCode() .. '" class="tr Latn">', '</span>' }
end
elseif item_type == "ts" then
-- \226\129\160 = word joiner (zero-width non-breaking space) U+2060
tag = { '<span class="ts mention-ts Latn">/\226\129\160', '\226\129\160/</span>' }
elseif item_type == "pos" then
tag = { '<span class="ann-pos">', '</span>' }
elseif item_type == "non-gloss" then
tag = { '<span class="ann-non-gloss">', '</span>' }
elseif item_type == "annotations" then
tag = { '<span class="mention-gloss-paren annotation-paren">(</span>',
'<span class="mention-gloss-paren annotation-paren">)</span>' }
elseif item_type == "infl" then
tag = { '<span class="ann-infl">', '</span>' }
end
if type(text) == "string" then
return tag[1] .. text .. tag[2]
else
return ""
end
end
local pos_tags
--[==[Formats the annotations that are displayed with a link created by {{code|lua|full_link}}. Annotations are the extra bits of information that are displayed following the linked term, and include things such as gender, transliteration, gloss and so on.
* The first argument is a table possessing some or all of the following keys:
*:; <code class="n">genders</code>
*:: Table containing a list of gender specifications in the style of [[Module:gender and number]].
*:; <code class="n">tr</code>
*:: Transliteration.
*:; <code class="n">gloss</code>
*:: Gloss that translates the term in the link, or gives some other descriptive information.
*:; <code class="n">pos</code>
*:: Part of speech of the linked term. If the given argument matches one of the aliases in `pos_aliases` in [[Module:headword/data]], or consists of a part of speech or alias followed by `f` (for a non-lemma form), expand it appropriately. Otherwise, just show the given text as it is.
*:; <code class="n">ng</code>
*:: Arbitrary non-gloss descriptive text for the link. This should be used in preference to putting descriptive text in `gloss` or `pos`.
*:; <code class="n">lit</code>
*:: Literal meaning of the term, if the usual meaning is figurative or idiomatic.
*:; <code class="n">infl</code>
*:: Table containing a list of grammar tags in the style of [[Module:form of]] `tagged_inflections`.
*:Any of the above values can be omitted from the <code class="n">info</code> argument. If a completely empty table is given (with no annotations at all), then an empty string is returned.
* The second argument is a string. Valid values are listed in [[Module:script utilities/data]] "data.translit" table.]==]
function export.format_link_annotations(data, face)
local output = {}
-- Interwiki link
if data.interwiki then
insert(output, data.interwiki)
end
-- Genders
if type(data.genders) ~= "table" then
data.genders = { data.genders }
end
if data.genders and #data.genders > 0 then
local genders, gender_cats = format_genders(data.genders, data.lang)
insert(output, " " .. genders)
if gender_cats then
local cats = data.cats
if cats then
extend(cats, gender_cats)
end
end
end
local annotations = {}
-- Transliteration and transcription
if data.tr and data.tr[1] or data.ts and data.ts[1] then
local kind
if face == "term" then
kind = face
else
kind = "default"
end
if data.tr[1] and data.ts[1] then
insert(annotations, tag_translit(data.tr[1], data.lang, kind) .. " " .. export.mark(data.ts[1], "ts"))
elseif data.ts[1] then
insert(annotations, export.mark(data.ts[1], "ts"))
else
insert(annotations, tag_translit(data.tr[1], data.lang, kind))
end
end
-- Gloss/translation
if data.gloss then
insert(annotations, export.mark(data.gloss, "gloss"))
end
-- Part of speech
if data.pos then
-- debug category for pos= containing transcriptions
if data.pos:match("/[^><]-/") then
data.pos = data.pos .. "[[Category:links likely containing transcriptions in pos]]"
end
-- Canonicalize part of speech aliases as well as non-lemma aliases like 'nf' or 'nounf' for "noun form".
pos_tags = pos_tags or (m_headword_data or get_headword_data()).pos_aliases
local pos = pos_tags[data.pos]
if not pos and data.pos:find("f$") then
local pos_form = data.pos:sub(1, -2)
-- We only expand something ending in 'f' if the result is a recognized non-lemma POS.
pos_form = (pos_tags[pos_form] or pos_form) .. " form"
if (m_headword_data or get_headword_data()).nonlemmas[pos_form .. "s"] then
pos = pos_form
end
end
insert(annotations, export.mark(pos or data.pos, "pos"))
end
-- Inflection data
if data.infl then
local m_form_of = require(form_of_module)
-- Split tag sets manually, since tagged_inflections creates a numbered list, and we do not want that.
local infl_outputs = {}
local tag_sets = m_form_of.split_tag_set(data.infl)
for _, tag_set in ipairs(tag_sets) do
table.insert(infl_outputs,
m_form_of.tagged_inflections({ tags = tag_set, lang = data.lang, nocat = true, nolink = true, nowrap = true }))
end
insert(annotations, export.mark(table.concat(infl_outputs, "; "), "infl"))
end
-- Non-gloss text
if data.ng then
insert(annotations, export.mark(data.ng, "non-gloss"))
end
-- Literal/sum-of-parts meaning
if data.lit then
insert(annotations, "literally " .. export.mark(data.lit, "gloss"))
end
-- Provide a hook to insert additional annotations such as nested inflections.
if data.postprocess_annotations then
data.postprocess_annotations {
data = data,
annotations = annotations
}
end
if #annotations > 0 then
insert(output, " " .. export.mark(concat(annotations, ", "), "annotations"))
end
return concat(output)
end
-- Encode certain characters to avoid various delimiter-related issues at various stages. We need to encode < and >
-- because they end up forming part of CSS class names inside of <span ...> and will interfere with finding the end
-- of the HTML tag. I first tried converting them to URL encoding, i.e. %3C and %3E; they then appear in the URL as
-- %253C and %253E, which get mapped back to %3C and %3E when passed to [[Module:accel]]. But mapping them to <
-- and > somehow works magically without any further work; they appear in the URL as < and >, and get passed to
-- [[Module:accel]] as < and >. I have no idea who along the chain of calls is doing the encoding and decoding. If
-- someone knows, please modify this comment appropriately!
local accel_char_map
local function get_accel_char_map()
accel_char_map = {
["%"] = ".",
[" "] = "_",
["_"] = u(0xFFF0),
["<"] = "<",
[">"] = ">",
}
return accel_char_map
end
local function encode_accel_param_chars(param)
return (param:gsub("[% <>_]", accel_char_map or get_accel_char_map()))
end
local function encode_accel_param(prefix, param)
if not param then
return ""
end
if type(param) == "table" then
local filled_params = {}
-- There may be gaps in the sequence, especially for translit params.
local maxindex = 0
for k in pairs(param) do
if type(k) == "number" and k > maxindex then
maxindex = k
end
end
for i = 1, maxindex do
filled_params[i] = param[i] or ""
end
-- [[Module:accel]] splits these up again.
param = concat(filled_params, "*~!")
end
-- This is decoded again by [[WT:ACCEL]].
return prefix .. encode_accel_param_chars(param)
end
local function insert_if_not_blank(list, item)
if item == "" then
return
end
insert(list, item)
end
local function get_class(lang, tr, accel, nowrap)
if not accel and not nowrap then
return ""
end
local classes = {}
if accel then
insert(classes, "form-of lang-" .. lang:getFullCode())
local form = accel.form
if form then
insert(classes, encode_accel_param_chars(form) .. "-form-of")
end
insert_if_not_blank(classes, encode_accel_param("gender-", accel.gender))
insert_if_not_blank(classes, encode_accel_param("pos-", accel.pos))
insert_if_not_blank(classes, encode_accel_param("transliteration-", accel.translit or (tr ~= "-" and tr or nil)))
insert_if_not_blank(classes, encode_accel_param("target-", accel.target))
insert_if_not_blank(classes, encode_accel_param("origin-", accel.lemma))
insert_if_not_blank(classes, encode_accel_param("origin_transliteration-", accel.lemma_translit))
if accel.no_store then
insert(classes, "form-of-nostore")
end
end
if nowrap then
insert(classes, nowrap)
end
return concat(classes, " ")
end
-- Add any left or right regular or accent qualifiers, labels or references to a formatted term. `data` is the object
-- specifying the term, which should optionally contain:
-- * a language object in `lang`; required if any accent qualifiers or labels are given;
-- * left regular qualifiers in `q` (an array of strings or a single string); an empty array or blank string will be
-- ignored;
-- * right regular qualifiers in `qq` (an array of strings or a single string); an empty array or blank string will be
-- ignored;
-- * left accent qualifiers in `a` (an array of strings); an empty array will be ignored;
-- * right accent qualifiers in `aa` (an array of strings); an empty array will be ignored;
-- * left labels in `l` (an array of strings); an empty array will be ignored;
-- * right labels in `ll` (an array of strings); an empty array will be ignored;
-- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text`
-- (formatted reference text) and optionally `name` and/or `group`.
-- `formatted` is the formatted version of the term itself.
local function add_qualifiers_and_refs_to_term(data, formatted)
local q = data.q
if type(q) == "string" then
q = { q }
end
local qq = data.qq
if type(qq) == "string" then
qq = { qq }
end
if q and q[1] or qq and qq[1] or data.a and data.a[1] or data.aa and data.aa[1] or data.l and data.l[1] or
data.ll and data.ll[1] or data.refs and data.refs[1] then
formatted = format_qualifiers {
lang = data.lang,
text = formatted,
q = q,
qq = qq,
a = data.a,
aa = data.aa,
l = data.l,
ll = data.ll,
refs = data.refs,
}
end
return formatted
end
--[==[
Creates a full link, with annotations (see `[[#format_link_annotations|format_link_annotations]]`), in the style of {{tl|l}} or {{tl|m}}.
The first argument, `data`, must be a table. It contains the various elements that can be supplied as parameters to {{tl|l}} or {{tl|m}}:
{ {
term = entry_to_link_to,
alt = link_text_or_displayed_text,
lang = language_object,
sc = script_object,
track_sc = boolean,
no_nonstandard_sc_cat = boolean,
fragment = link_fragment,
id = sense_id,
genders = { "gender1", "gender2", ... },
tr = transliteration,
respect_link_tr = boolean,
ts = transcription,
gloss = gloss,
pos = part_of_speech_tag,
ng = non-gloss text,
lit = literal_translation,
infl = { "form_of_grammar_tag1", "form_of_grammar_tag2", ... },
no_alt_ast = boolean,
accel = {accelerated_creation_tags},
interwiki = interwiki,
pretext = "text_at_beginning" or nil,
posttext = "text_at_end" or nil,
q = { "left_qualifier1", "left_qualifier2", ...} or "left_qualifier",
qq = { "right_qualifier1", "right_qualifier2", ...} or "right_qualifier",
l = { "left_label1", "left_label2", ...},
ll = { "right_label1", "right_label2", ...},
a = { "left_accent_qualifier1", "left_accent_qualifier2", ...},
aa = { "right_accent_qualifier1", "right_accent_qualifier2", ...},
refs = { "formatted_ref1", "formatted_ref2", ...} or { {text = "text", name = "name", group = "group"}, ... },
show_qualifiers = boolean,
} }
Any one of the items in the `data` table may be {nil}, but an error will be shown if neither `term` nor `alt` nor `tr`
is present. Thus, calling {full_link{ term = term, lang = lang, sc = sc }}, where `term` is the page to link to (which
may have diacritics that will be stripped and/or embedded bracketed links) and `lang` is a
[[Module:languages#Language objects|language object]] from [[Module:languages]], will give a plain link similar to the
one produced by the template {{tl|l}}, and calling {full_link( { term = term, lang = lang, sc = sc }, "term" )} will
give a link similar to the one produced by the template {{tl|m}}.
The function will:
* Try to determine the script, based on the characters found in the `term` or `alt` argument, if the script was not
given. If a script is given and `track_sc` is {true}, it will check whether the input script is the same as the one
which would have been automatically generated and add the category [[:Category:LANG terms with redundant script codes]]
if yes, or [[:Category:LANG terms with non-redundant manual script codes]] if no. This should be used when the input
script object is directly determined by a template's `sc` parameter.
* Call `[[#language_link|language_link]]` on the `term` or `alt` forms, to remove diacritics in the page name, process
any embedded wikilinks and create links to Reconstruction or Appendix pages when necessary.
* Call `[[Module:script utilities#tag_text]]` to add the appropriate language and script tags to the term and
italicize terms written in the Latin script if necessary. Accelerated creation tags, as used by [[WT:ACCEL]], are
included.
* Generate a transliteration, based on the `alt` or `term` arguments, if the script is not Latin, no transliteration was
provided in `tr` and the combination of the term's language and script support automatic transliteration. The
transliteration itself will be linked if both `.respect_link_tr` is specified and the language of the term has the
`link_tr` property set for the script of the term; but not otherwise.
* Add the annotations (transliteration, gender, gloss, etc.) after the link.
* If `no_alt_ast` is specified, then the `alt` text does not need to contain an asterisk if the language is
reconstructed. This should only be used by modules which really need to allow links to reconstructions that don't
display asterisks (e.g. number boxes).
* If `pretext` or `posttext` is specified, this is text to (respectively) prepend or append to the output, directly
before processing qualifiers, labels and references. This can be used to add arbitrary extra text inside of the
qualifiers, labels and references.
* If `show_qualifiers` is specified or the `show_qualifiers` argument is given, then left and right qualifiers, accent
qualifiers, labels and references will be displayed, otherwise they will be ignored. (This is because a fair amount of
code stores qualifiers, labels and/or references in these fields and displays them itself, rather than expecting
{full_link()} to display them.)]==]
function export.full_link(data, face, allow_self_link, show_qualifiers)
if type(data) ~= "table" then
error("The first argument to the function full_link must be a table. "
.. "See Module:links/documentation for more information.")
elseif data.term and data.term:find("\\", nil, true) or data.alt and data.alt:find("\\", nil, true) then
track("escaped", "full_link")
end
-- Prevent data from being destructively modified.
local data = shallow_copy(data)
-- FIXME: this shouldn't be added to `data`, as that means the input table needs to be cloned.
data.cats = {}
-- Categorize links to "und".
local lang, cats = data.lang, data.cats
if cats and lang:getCode() == "und" then
insert(cats, "Undetermined language links")
end
local terms = { true }
-- Generate multiple forms if applicable.
for _, param in ipairs { "term", "alt" } do
if type(data[param]) == "string" and data[param]:find("//", nil, true) then
data[param] = export.split_on_slashes(data[param])
elseif type(data[param]) == "string" and not (type(data.term) == "string" and data.term:find("//", nil, true)) then
if not data.no_generate_forms then
data[param] = lang:generateForms(data[param])
else
data[param] = { data[param] }
end
else
data[param] = {}
end
end
for _, param in ipairs { "sc", "tr", "ts" } do
data[param] = { data[param] }
end
for _, param in ipairs { "term", "alt", "sc", "tr", "ts" } do
for i in pairs(data[param]) do
terms[i] = true
end
end
-- Create the link
local output = {}
local id, no_alt_ast, srwc, accel, nevercalltr = data.id, data.no_alt_ast, data.suppress_redundant_wikilink_cat,
data.accel, data.never_call_transliteration_module
local link_tr = data.respect_link_tr and lang:link_tr(data.sc[1])
for i in ipairs(terms) do
local link
-- Is there any text to show?
if (data.term[i] or data.alt[i]) then
-- Try to detect the script if it was not provided
local display_term = data.alt[i] or data.term[i]
local best = lang:findBestScript(display_term)
-- no_nonstandard_sc_cat is intended for use in [[Module:interproject]]
if (
not data.no_nonstandard_sc_cat and
best:getCode() == "None" and
find_best_script_without_lang(display_term):getCode() ~= "None"
) then
insert(cats, lang:getFullName() .. " terms in nonstandard scripts")
end
if not data.sc[i] then
data.sc[i] = best
-- Track uses of sc parameter.
elseif data.track_sc then
if data.sc[i]:getCode() == best:getCode() then
insert(cats, lang:getFullName() .. " terms with redundant script codes")
else
insert(cats, lang:getFullName() .. " terms with non-redundant manual script codes")
end
end
-- If using a discouraged character sequence, add to maintenance category
if data.sc[i]:hasNormalizationFixes() == true then
if (data.term[i] and data.sc[i]:fixDiscouragedSequences(toNFC(data.term[i])) ~= toNFC(data.term[i])) or (data.alt[i] and data.sc[i]:fixDiscouragedSequences(toNFC(data.alt[i])) ~= toNFC(data.alt[i])) then
insert(cats, "Pages using discouraged character sequences")
end
end
link = simple_link(
data.term[i],
data.fragment,
data.alt[i],
lang,
data.sc[i],
id,
cats,
no_alt_ast,
srwc
)
end
-- simple_link can return nil, so check if a link has been generated.
if link then
-- Add "nowrap" class to prefixes in order to prevent wrapping after the hyphen
local nowrap
local display_term = data.alt[i] or data.term[i]
if display_term and (display_term:find("^%-") or display_term:find("^־")) then -- Hebrew maqqef -- FIXME, use hyphens from [[Module:affix]]
nowrap = "nowrap"
end
link = tag_text(link, lang, data.sc[i], face, get_class(lang, data.tr[i], accel, nowrap))
else
--[[ No term to show.
Is there at least a transliteration we can work from? ]]
link = request_script(lang, data.sc[i])
-- No link to show, and no transliteration either. Show a term request (unless it's a substrate, as they rarely take terms).
if (link == "" or (not data.tr[i]) or data.tr[i] == "-") and lang:getFamilyCode() ~= "qfa-sub" then
-- If there are multiple terms, break the loop instead.
if i > 1 then
remove(output)
break
elseif NAMESPACE ~= "Template" then
insert(cats, lang:getFullName() .. " term requests")
end
link = "<small>[Term?]</small>"
end
end
insert(output, link)
if i < #terms then insert(output, "<span class=\"Zsym mention\" style=\"font-size:100%;\"> / </span>") end
end
-- When suppress_tr is true, do not show or generate any transliteration
if data.suppress_tr then
data.tr[1] = nil
else
-- TODO: Currently only handles the first transliteration, pending consensus on how to handle multiple translits for multiple forms, as this is not always desirable (e.g. traditional/simplified Chinese).
if data.tr[1] == "" or data.tr[1] == "-" then
data.tr[1] = nil
else
local phonetic_extraction = load_data("Module:links/data").phonetic_extraction
phonetic_extraction = phonetic_extraction[lang:getCode()] or phonetic_extraction[lang:getFullCode()]
if phonetic_extraction then
data.tr[1] = data.tr[1] or
require(phonetic_extraction).getTranslit(export.remove_links(data.alt[1] or data.term[1]))
elseif (data.term[1] or data.alt[1]) and data.sc[1]:isTransliterated() then
-- Track whenever there is manual translit. The categories below like 'terms with redundant transliterations'
-- aren't sufficient because they only work with reference to automatic translit and won't operate at all in
-- languages without any automatic translit, like Persian and Hebrew.
if data.tr[1] then
local full_code = lang:getFullCode()
track("manual-tr", full_code)
end
if not nevercalltr then
-- Try to generate a transliteration.
local text = data.alt[1] or data.term[1]
if not link_tr then
text = export.remove_links(text, true)
end
local automated_tr = lang:transliterate(text, data.sc[1])
if automated_tr then
local manual_tr = data.tr[1]
if manual_tr then
if export.remove_links(manual_tr) == export.remove_links(automated_tr) then
insert(cats, lang:getFullName() .. " terms with redundant transliterations")
else
-- Prevents Arabic root categories from flooding the tracking categories.
if NAMESPACE ~= "Category" then
insert(cats,
lang:getFullName() .. " terms with non-redundant manual transliterations")
end
end
end
if not manual_tr or lang:overrideManualTranslit(data.sc[1]) then
data.tr[1] = automated_tr
end
end
end
end
end
end
-- Link to the transliteration entry for languages that require this
if data.tr[1] and link_tr and not data.tr[1]:match("%[%[(.-)%]%]") then
data.tr[1] = simple_link(
data.tr[1],
nil,
nil,
lang,
get_script("Latn"),
nil,
cats,
no_alt_ast,
srwc
)
elseif data.tr[1] and not link_tr then
-- Remove the pseudo-HTML tags added by remove_links.
data.tr[1] = data.tr[1]:gsub("</?link>", "")
end
if data.tr[1] and not umatch(data.tr[1], "[^%s%p]") then data.tr[1] = nil end
insert(output, export.format_link_annotations(data, face))
if data.pretext then
insert(output, 1, data.pretext)
end
if data.posttext then
insert(output, data.posttext)
end
local categories = cats[1] and format_categories(cats, lang, "-", nil, nil, data.sc) or ""
output = concat(output)
if show_qualifiers or data.show_qualifiers then
output = add_qualifiers_and_refs_to_term(data, output)
end
return output .. categories
end
--[==[Replaces all wikilinks with their displayed text, and removes any categories. This function can be invoked either from a template or from another module.
-- Strips links: deletes category links, the targets of piped links, and any double square brackets involved in links (other than file links, which are untouched). If `tag` is set, then any links removed will be given pseudo-HTML tags, which allow the substitution functions in [[Module:languages]] to properly subdivide the text in order to reduce the chance of substitution failures in modules which scrape pages like [[Module:zh-translit]].
-- FIXME: This is quite hacky. We probably want this to be integrated into [[Module:languages]], but we can't do that until we know that nothing is pushing pipe linked transliterations through it for languages which don't have link_tr set.
* <code><nowiki>[[page|displayed text]]</nowiki></code> → <code><nowiki>displayed text</nowiki></code>
* <code><nowiki>[[page and displayed text]]</nowiki></code> → <code><nowiki>page and displayed text</nowiki></code>
* <code><nowiki>[[Category:English lemmas|WORD]]</nowiki></code> → ''(nothing)'']==]
function export.remove_links(text, tag)
if type(text) == "table" then
text = text.args[1]
end
if not text or text == "" then
return ""
end
text = text
:gsub("%[%[", "\1")
:gsub("%]%]", "\2")
-- Parse internal links for the display text.
text = text:gsub("(\1)([^\1\2]-)(\2)",
function(c1, c2, c3)
-- Don't remove files.
for _, false_positive in ipairs({ "file", "image" }) do
if c2:lower():match("^" .. false_positive .. ":") then return c1 .. c2 .. c3 end
end
-- Remove categories completely.
for _, false_positive in ipairs({ "category", "cat" }) do
if c2:lower():match("^" .. false_positive .. ":") then return "" end
end
-- In piped links, remove all text before the pipe, unless it's the final character (i.e. the pipe trick), in which case just remove the pipe.
c2 = c2:match("^[^|]*|(.+)") or c2:match("([^|]+)|$") or c2
if tag then
return "<link>" .. c2 .. "</link>"
else
return c2
end
end)
text = text
:gsub("\1", "[[")
:gsub("\2", "]]")
return text
end
function export.section_link(link)
if type(link) ~= "string" then
error("The first argument to section_link was a " .. type(link) .. ", but it should be a string.")
elseif link:find("\\", nil, true) then
track("escaped", "section_link")
end
local target, section = get_fragment((link:gsub("_", " ")))
if not section then
error("No \"#\" delineating a section name")
end
return simple_link(
target,
section,
target .. " § " .. section
)
end
return export
go1a5j6fymqq8baizjbz87vusf7r536
Mòideal:script utilities
828
3744
86409
70746
2026-07-23T11:18:15Z
Altronic
4137
Copy from English Wiktionary
86409
Scribunto
text/plain
local export = {}
local anchors_module = "Module:anchors"
local debug_track_module = "Module:debug/track"
local links_module = "Module:links"
local munge_text_module = "Module:munge text"
local parameters_module = "Module:parameters"
local scripts_module = "Module:scripts"
local string_utilities_module = "Module:string utilities"
local utilities_module = "Module:utilities"
local concat = table.concat
local insert = table.insert
local require = require
local toNFD = mw.ustring.toNFD
local dump = mw.dumpObject
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function embedded_language_links(...)
embedded_language_links = require(links_module).embedded_language_links
return embedded_language_links(...)
end
local function find_best_script_without_lang(...)
find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang
return find_best_script_without_lang(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function get_script(...)
get_script = require(scripts_module).getByCode
return get_script(...)
end
local function language_anchor(...)
language_anchor = require(anchors_module).language_anchor
return language_anchor(...)
end
local function munge_text(...)
munge_text = require(munge_text_module)
return munge_text(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function track(...)
track = require(debug_track_module)
return track(...)
end
local function u(...)
u = require(string_utilities_module).char
return u(...)
end
local function ugsub(...)
ugsub = require(string_utilities_module).gsub
return ugsub(...)
end
local function umatch(...)
umatch = require(string_utilities_module).match
return umatch(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local m_data
local function get_data()
m_data, get_data = mw.loadData("Module:script utilities/data"), nil
return m_data
end
--[=[
Modules used:
[[Module:script utilities/data]]
[[Module:scripts]]
[[Module:anchors]] (only when IDs present)
[[Module:string utilities]] (only when hyphens in Korean text or spaces in vertical text)
[[Module:languages]]
[[Module:parameters]]
[[Module:utilities]]
[[Module:debug/track]]
]=]
function export.is_Latin_script(sc)
-- Latn, Latf, Latg, pjt-Latn
return sc:getCode():find("Lat") and true or false
end
--[==[{{temp|#invoke:script utilities|lang_t}}
This is used by {{temp|lang}} to wrap portions of text in a language tag. See there for more information.]==]
do
local function get_args(frame)
return process_params(frame:getParent().args, {
[1] = {required = true, type = "language", default = "und"},
[2] = {required = true, allow_empty = true, default = ""},
["sc"] = {type = "script"},
["face"] = true,
["class"] = true,
})
end
function export.lang_t(frame)
local args = get_args(frame)
local lang = args[1]
local sc = args["sc"]
local text = args[2]
local cats = {}
if sc then
-- Track uses of sc parameter.
if sc:getCode() == lang:findBestScript(text):getCode() then
insert(cats, lang:getFullName() .. " terms with redundant script codes")
else
insert(cats, lang:getFullName() .. " terms with non-redundant manual script codes")
end
else
sc = lang:findBestScript(text)
end
text = embedded_language_links{
term = text,
lang = lang,
sc = sc
}
cats = #cats > 0 and format_categories(cats, lang, "-", nil, nil, sc) or ""
local face = args["face"]
local class = args["class"]
return export.tag_text(text, lang, sc, face, class) .. cats
end
end
-- Ustring turns on the codepoint-aware string matching. The basic string function
-- should be used for simple sequences of characters, Ustring function for
-- sets – [].
local function trackPattern(text, pattern, tracking)
if pattern and umatch(text, pattern) then
track("script/" .. tracking)
end
end
local function track_text(text, lang, sc)
if lang and text then
local langCode = lang:getFullCode()
-- [[Special:WhatLinksHere/Wiktionary:Tracking/script/ang/acute]]
if langCode == "ang" then
local decomposed = toNFD(text)
local acute = u(0x301)
trackPattern(decomposed, acute, "ang/acute")
--[=[
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Greek/wrong-phi]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Greek/wrong-theta]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Greek/wrong-kappa]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Greek/wrong-rho]]
ϑ, ϰ, ϱ, ϕ should generally be replaced with θ, κ, ρ, φ.
]=]
elseif langCode == "el" or langCode == "grc" then
trackPattern(text, "ϑ", "Greek/wrong-theta")
trackPattern(text, "ϰ", "Greek/wrong-kappa")
trackPattern(text, "ϱ", "Greek/wrong-rho")
trackPattern(text, "ϕ", "Greek/wrong-phi")
--[=[
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Ancient Greek/spacing-coronis]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Ancient Greek/spacing-smooth-breathing]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Ancient Greek/wrong-apostrophe]]
When spacing coronis and spacing smooth breathing are used as apostrophes,
they should be replaced with right single quotation marks (’).
]=]
if langCode == "grc" then
trackPattern(text, u(0x1FBD), "Ancient Greek/spacing-coronis")
trackPattern(text, u(0x1FBF), "Ancient Greek/spacing-smooth-breathing")
trackPattern(text, "[" .. u(0x1FBD) .. u(0x1FBF) .. "]", "Ancient Greek/wrong-apostrophe", true)
end
-- [[Special:WhatLinksHere/Wiktionary:Tracking/script/Russian/grave-accent]]
elseif langCode == "ru" then
local decomposed = toNFD(text)
trackPattern(decomposed, u(0x300), "Russian/grave-accent")
-- [[Special:WhatLinksHere/Wiktionary:Tracking/script/Chuvash/latin-homoglyph]]
elseif langCode == "cv" then
trackPattern(text, "[ĂăĔĕÇçŸÿ]", "Chuvash/latin-homoglyph")
-- [[Special:WhatLinksHere/Wiktionary:Tracking/script/Tibetan/trailing-punctuation]]
elseif langCode == "bo" then
trackPattern(text, "[་།]$", "Tibetan/trailing-punctuation")
trackPattern(text, "[་།]%]%]$", "Tibetan/trailing-punctuation")
--[=[
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Thai/broken-ae]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Thai/broken-am]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Thai/wrong-rue-lue]]
]=]
elseif langCode == "th" then
trackPattern(text, "เ".."เ", "Thai/broken-ae")
trackPattern(text, "ํ[่้๊๋]?า", "Thai/broken-am")
trackPattern(text, "[ฤฦ]า", "Thai/wrong-rue-lue")
--[=[
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Lao/broken-ae]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Lao/broken-am]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Lao/possible-broken-ho-no]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Lao/possible-broken-ho-mo]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Lao/possible-broken-ho-lo]]
]=]
elseif langCode == "lo" then
trackPattern(text, "ເ".."ເ", "Lao/broken-ae")
trackPattern(text, "ໍ[່້໊໋]?າ", "Lao/broken-am")
trackPattern(text, "ຫນ", "Lao/possible-broken-ho-no")
trackPattern(text, "ຫມ", "Lao/possible-broken-ho-mo")
trackPattern(text, "ຫລ", "Lao/possible-broken-ho-lo")
--[=[
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Lü/broken-ae]]
[[Special:WhatLinksHere/Wiktionary:Tracking/script/Lü/possible-wrong-sequence]]
]=]
elseif langCode == "khb" then
trackPattern(text, "ᦵ".."ᦵ", "Lü/broken-ae")
trackPattern(text, "[ᦀ-ᦫ][ᦵᦶᦷᦺ]", "Lü/possible-wrong-sequence")
end
end
end
local function Kore_ruby(...)
-- Cache character sets on the first call.
local Hang_chars = get_script("Hang"):getCharacters()
local Hani_chars = get_script("Hani"):getCharacters()
-- Overwrite with the actual function, which is called directly on subsequent calls.
function Kore_ruby(txt)
return (ugsub(txt, "([%-".. Hani_chars .. "]+)%(([%-" .. Hang_chars .. "]+)%)", "<ruby>%1<rp>(</rp><rt>%2</rt><rp>)</rp></ruby>"))
end
return Kore_ruby(...)
end
--[==[Wraps the given text in HTML tags with appropriate CSS classes (see [[WT:CSS]]) for the [[Module:languages#Language objects|language]] and script. This is required for all non-English text on Wiktionary.
The actual tags and CSS classes that are added are determined by the <code>face</code> parameter. It can be one of the following:
; {{code|lua|"term"}}
: The text is wrapped in {{code|html|2=<i class="(sc) mention" lang="(lang)">...</i>}}.
; {{code|lua|"head"}}
: The text is wrapped in {{code|html|2=<strong class="(sc) headword" lang="(lang)">...</strong>}}.
; {{code|lua|"hypothetical"}}
: The text is wrapped in {{code|html|2=<span class="hypothetical-star">*</span><i class="(sc) hypothetical" lang="(lang)">...</i>}}.
; {{code|lua|"bold"}}
: The text is wrapped in {{code|html|2=<b class="(sc)" lang="(lang)">...</b>}}.
; {{code|lua|nil}}
: The text is wrapped in {{code|html|2=<span class="(sc)" lang="(lang)">...</span>}}.
The optional <code>class</code> parameter can be used to specify an additional CSS class to be added to the tag.]==]
function export.tag_text(text, lang, sc, face, class, id)
if not sc then
if lang then
sc = lang:findBestScript(text)
else
sc = find_best_script_without_lang(text)
end
end
track_text(text, lang, sc)
-- Replace space characters with newlines in Mongolian-script text, which is written top-to-bottom.
if sc:getDirection():find("vertical", nil, true) and text:find(" ", nil, true) then
text = munge_text(text, function(txt)
-- having extra parentheses makes sure only the first return value gets through
return (txt:gsub(" +", "<br>"))
end)
end
-- Hack Korean script text to remove hyphens.
-- FIXME: This should be handled in a more general fashion, but needs to
-- be efficient by not doing anything if no hyphens are present, and currently this is the only
-- language needing such processing.
-- 20220221: Also convert 漢字(한자) to ruby, instead of needing [[Template:Ruby]].
if sc:getCode() == "Kore" and text:match("[%-()g]") then
local title, display = require("Module:links").get_wikilink_parts(text, true)
if title ~= nil then -- special case that the text is a single link, do not munge and preserve affix hyphens
if lang and lang:getCode() == "okm" then -- Middle Korean code from [[User:Chom.kwoy]]
-- Comment from [[User:Lunabunn]]:
-- In Middle Korean orthography, syllable formation is phonemic as opposed to morpheme-boundary-based a la
-- modern Korean. As such, for example, if you were to write nam-i, it would be rendered as na.mi so if you
-- then put na-mi to indicate particle boundaries as in modern Korean, the hyphen would be misplaced.
-- Previously, this was alleviated by specialcasing na--mi but [[User:Theknightwho]] made that resolve to -
-- in the Hangul (previously we used to just delete all -s in Hangul processing), so it broke.
-- [[User:Chom.kwoy]] implemented a different solution, which is writing -> instead using however many >s to
-- shift the hyphen by that number of letters in the romanization.
-- By the time we are called, > signs have been converted to > by a call to encode_entities() in
-- make_link() in [[Module:links]] (near the bottom of the function).
-- 'g' in Middle Korean is a special sign to treat the following ㅇ sign as /G/ instead of null.
display = display:gsub(">", ""):gsub("g", "")
end
if display:find("<") then
display = munge_text(display, function(txt)
txt = txt:gsub("(.)%-(%-?)(.)", "%1%2%3")
return Kore_ruby(txt)
end)
else
display = display:gsub("(.)%-(%-?)(.)", "%1%2%3")
display = Kore_ruby(display)
end
text = "[[" .. title .. "|" .. display .. "]]"
else
text = munge_text(text, function(txt)
if lang and lang:getCode() == "okm" then
txt = txt:gsub(">", ""):gsub("g", "")
end
if txt == text then -- special case for the entire text being plain
txt = txt:gsub("(.)%-(%-?)(.)", "%1%2%3")
else
txt = txt:gsub("%-(%-?)", "%1")
end
return Kore_ruby(txt)
end)
end
end
if sc:getCode() == "Image" then
face = nil
end
if face == "hypothetical" then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/script-utilities/face/hypothetical]]
track("script-utilities/face/hypothetical")
end
local data = (m_data or get_data()).faces[face or "plain"]
if data == nil then
error('Invalid script face "' .. face .. '".')
end
local tag = data.tag
local opening_tag = {tag}
if lang and id then
insert(opening_tag, 'id="' .. language_anchor(lang, id) .. '"')
end
local classes = {data.class}
-- if the script code is hyphenated (i.e. language code-script code, add the last component as a class as well)
-- e.g. ota-Arab adds both Arab and ota-Arab as classes
if sc:getCode():find("-", nil, true) then
insert(classes, 1, (ugsub(sc:getCode(), ".+%-", "")))
insert(classes, 2, sc:getCode())
else
insert(classes, 1, sc:getCode())
end
if class and class ~= '' then
insert(classes, class)
end
insert(opening_tag, 'class="' .. concat(classes, ' ') .. '"')
-- FIXME: Is it OK to insert the etymology-only lang code and have it fall back to the first part of the
-- lang code (by chopping off the '-...' part)? It seems the :lang() selector does this; not sure about
-- [lang=...] attributes.
if lang then
insert(opening_tag, 'lang="' .. lang:getFullCode() .. '"')
end
-- Add a script wrapper
return (data.prefix or "") .. "<" .. concat(opening_tag, " ") .. ">" .. text .. "</" .. tag .. ">"
end
--[==[Tags the transliteration for given text {translit} and language {lang}. It will add the language, script subtag (as defined in [https://www.rfc-editor.org/rfc/bcp/bcp47.txt BCP 47 2.2.3]) and [https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir dir] (directional) attributes as needed.
The optional <code>kind</code> parameter can be one of the following:
; {{code|lua|"term"}}
: tag transliteration for {{temp|mention}}
; {{code|lua|"usex"}}
: tag transliteration for {{temp|usex}}
; {{code|lua|"head"}}
: tag transliteration for {{temp|head}}
; {{code|lua|"default"}}
: default
The optional <code>attributes</code> parameter is used to specify additional HTML attributes for the tag.]==]
function export.tag_translit(translit, lang, kind, attributes, is_manual)
if type(lang) == "table" then
-- FIXME: Do better support for etym languages; see https://www.rfc-editor.org/rfc/bcp/bcp47.txt
lang = lang.getFullCode and lang:getFullCode()
or error("Second argument to tag_translit should be a language code or language object.")
end
local data = (m_data or get_data()).translit[kind or "default"]
local tag = data.tag
local opening_tag = {tag}
local class = data.class
if lang == "ja" then
insert(opening_tag, 'class="' .. (class and (class .. " ") or "") .. (is_manual and "manual-tr " or "") .. 'tr"')
else
insert(opening_tag, 'lang="' .. lang .. '-Latn"')
insert(opening_tag, 'class="' .. (class and (class .. " ") or "") .. (is_manual and "manual-tr " or "") .. 'tr Latn"')
end
local dir = data.dir
if dir then
insert(opening_tag, 'dir="' .. dir .. '"')
end
if attributes then
track("tag_translit/attributes")
insert(opening_tag, attributes)
end
return "<" .. concat(opening_tag, " ") .. ">" .. translit .. "</" .. tag .. ">"
end
function export.tag_transcription(transcription, lang, kind, attributes)
if type(lang) == "table" then
-- FIXME: Do better support for etym languages; see https://www.rfc-editor.org/rfc/bcp/bcp47.txt
lang = lang.getFullCode and lang:getFullCode()
or error("Second argument to tag_transcription should be a language code or language object.")
end
local data = (m_data or get_data()).transcription[kind or "default"]
local tag = data.tag
local opening_tag = {tag}
local class = data.class
if lang == "ja" then
insert(opening_tag, 'class="' .. (class and (class .. " ") or "") .. 'ts"')
else
insert(opening_tag, 'lang="' .. lang .. '-Latn"')
insert(opening_tag, 'class="' .. (class and (class .. " ") or "") .. 'ts Latn"')
end
local dir = data.dir
if dir then
insert(opening_tag, 'dir="' .. dir .. '"')
end
if attributes then
track("tag_transcription/attributes")
insert(opening_tag, attributes)
end
return "<" .. concat(opening_tag, " ") .. ">" .. transcription .. "</" .. tag .. ">"
end
--[==[Tags {def} as a definition.
The <code>def</code> parameter must be one of the following:
; {{code|lua|"gloss"}}
: The text is wrapped in {{code|html|2=<span class="(mention-gloss">...</span>}}.
; {{code|lua|"non-gloss"}}
: The text is wrapped in {{code|html|2=<span class="use-with-mention">...</span>}}.
The optional <code>attributes</code> parameter is used to specify additional HTML attributes for the tag.]==]
function export.tag_definition(def, kind, attributes)
local data = (m_data or get_data()).definition[kind]
if data == nil then
error("Second argument to tag_definition should specify the kind of definition from the list in [[Module:script utilities/data]].")
end
local tag = data.tag
local opening_tag = {tag}
local class = data.class
if class then
insert(opening_tag, 'class="' .. class .. '"')
end
if attributes then
insert(opening_tag, attributes)
end
return "<" .. concat(opening_tag, " ") .. ">" .. def .. "</" .. tag .. ">"
end
--[==[Generates a request to provide a term in its native script, if it is missing. This is used by the {{temp|rfscript}} template as well as by the functions in [[Module:links]].
The function will add entries to one of the subcategories of [[:Category:Requests for native script by language]], and do several checks on the given language and script. In particular:
* If the script was given, a subcategory named "Requests for (script) script" is added, but only if the language has more than one script. Otherwise, the main "Requests for native script" category is used.
* Nothing is added at all if the language has no scripts other than Latin and its varieties.]==]
function export.request_script(lang, sc, usex, nocat, sort_key)
local scripts = lang.getScripts and lang:getScripts() or error('The language "' .. lang:getCode() .. '" does not have the method getScripts. It may be unwritten.')
-- By default, request for "native" script
local cat_script = "native"
local disp_script = "script"
-- If the script was not specified, and the language has only one script, use that.
if not sc and #scripts == 1 then
sc = scripts[1]
end
-- Is the script known?
if sc and sc:getCode() ~= "None" then
-- If the script is Latin, return nothing.
if export.is_Latin_script(sc) then
return ""
end
if (not scripts[1]) or sc:getCode() ~= scripts[1]:getCode() then
disp_script = sc:getCanonicalName()
end
-- The category needs to be specific to script only if there is chance of ambiguity. This occurs when when the language has multiple scripts (or with codes such as "und").
if (not scripts[1]) or scripts[2] then
cat_script = sc:getCanonicalName()
end
else
-- The script is not known.
-- Does the language have at least one non-Latin script in its list?
local has_nonlatin = false
for _, val in ipairs(scripts) do
if not export.is_Latin_script(val) then
has_nonlatin = true
break
end
end
-- If there are no non-Latin scripts, return nothing.
if not has_nonlatin and lang:getCode() ~= "und" then
return ""
end
end
-- Etymology languages have their own categories, whose parents are the regular language.
return "<small>[" .. disp_script .. " needed]</small>" .. (nocat and "" or
format_categories("Requests for " .. cat_script .. " script " ..
(usex and "in" or "for") .. " " .. lang:getCanonicalName() .. " " ..
(usex == "quote" and "quotations" or usex and "usage examples" or "terms"),
lang, sort_key
)
)
end
--[==[This is used by {{temp|rfscript}}. See there for more information.]==]
function export.template_rfscript(frame)
local boolean = {type = "boolean"}
local args = process_params(frame:getParent().args, {
[1] = {required = true, type = "language", default = "und"},
["sc"] = {type = "script"},
["usex"] = boolean,
["quote"] = boolean,
["nocat"] = boolean,
["sort"] = true,
})
local ret = export.request_script(args[1], args["sc"], args.quote and "quote" or args.usex, args.nocat, args.sort)
if ret == "" then
error("This language is written in the Latin alphabet. It does not need a native script.")
end
return ret
end
function export.checkScript(text, scriptCode, result)
local scriptObject = get_script(scriptCode)
if not scriptObject then
error('The script code "' .. scriptCode .. '" is not recognized.')
end
local originalText = text
-- Remove non-letter characters.
text = ugsub(text, "%A+", "")
-- Remove all characters of the script in question.
text = ugsub(text, "[" .. scriptObject:getCharacters() .. "]+", "")
if text ~= "" then
if type(result) == "string" then
error(result)
else
error('The text "' .. originalText .. '" contains the letters "' .. text .. '" that do not belong to the ' .. scriptObject:getDisplayForm() .. '.', 2)
end
end
end
return export
7960wdva9og3gbbozo010obcpp5re6e
Mòideal:scripts
828
3746
86354
70737
2026-07-23T01:06:07Z
Altronic
4137
Copy from English Wiktionary
86354
Scribunto
text/plain
local export = {}
local combining_classes_module = "Module:Unicode data/combining classes"
local json_module = "Module:JSON"
local language_like_module = "Module:language-like"
local load_module = "Module:load"
local scripts_canonical_names_module = "Module:scripts/canonical names"
local scripts_chartoscript_module = "Module:scripts/charToScript"
local scripts_data_module = "Module:scripts/data"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local writing_systems_module = "Module:writing systems"
local writing_systems_data_module = "Module:writing systems/data"
local concat = table.concat
local get_by_code -- Defined below.
local gmatch = string.gmatch
local insert = table.insert
local make_object -- Defined below.
local match = string.match
local require = require
local select = select
local setmetatable = setmetatable
local toNFC = mw.ustring.toNFC
local toNFD = mw.ustring.toNFD
local toNFKC = mw.ustring.toNFKC
local toNFKD = mw.ustring.toNFKD
local type = type
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function category_name_has_suffix(...)
category_name_has_suffix = require(language_like_module).categoryNameHasSuffix
return category_name_has_suffix(...)
end
local function category_name_to_code(...)
category_name_to_code = require(language_like_module).categoryNameToCode
return category_name_to_code(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function explode(...)
explode = require(string_utilities_module).explode_utf8
return explode(...)
end
local function get_writing_system(...)
get_writing_system = require(writing_systems_module).getByCode
return get_writing_system(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function to_json(...)
to_json = require(json_module).toJSON
return to_json(...)
end
local function ugsub(...)
ugsub = require(string_utilities_module).gsub
return ugsub(...)
end
local function umatch(...)
umatch = require(string_utilities_module).match
return umatch(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local scripts_canonical_names
local function get_scripts_canonical_names()
scripts_canonical_names, get_scripts_canonical_names = load_data(scripts_canonical_names_module), nil
return scripts_canonical_names
end
local scripts_data
local function get_scripts_data()
scripts_data, get_scripts_data = load_data(scripts_data_module), nil
return scripts_data
end
local scripts_suffixes
local function get_scripts_suffixes()
scripts_suffixes, get_scripts_suffixes = {
"script",
"code",
"notation",
"letters",
"numerals",
"semaphore",
}, nil
for _, v in pairs(load_data(writing_systems_data_module)) do
insert(scripts_suffixes, v[1])
end
return scripts_suffixes
end
local Script = {}
Script.__index = Script
--[==[Returns the script code of the script. Example: {{lua|"Cyrl"}} for Cyrillic.]==]
function Script:getCode()
return self._code
end
--[==[Returns the canonical name of the script. This is the name used to represent that script on Wiktionary. Example: {{lua|"Cyrillic"}} for Cyrillic.]==]
function Script:getCanonicalName()
return self._data[1]
end
--[==[Returns the display form of the script. For scripts, this is the same as the value returned by <code>:getCategoryName("nocap")</code>, i.e. it reads "NAME script" (e.g. {{lua|"Arabic script"}}). The displayed text used in <code>:makeCategoryLink</code> is always the same as the display form.]==]
function Script:getDisplayForm()
return self:getCategoryName("nocap")
end
function Script:getAliases()
Script.getAliases = require(language_like_module).getAliases
return self:getAliases()
end
function Script:getVarieties(flatten)
Script.getVarieties = require(language_like_module).getVarieties
return self:getVarieties(flatten)
end
function Script:getOtherNames()
Script.getOtherNames = require(language_like_module).getOtherNames
return self:getOtherNames()
end
function Script:getAllNames()
Script.getAllNames = require(language_like_module).getAllNames
return self:getAllNames()
end
--[==[Returns the {{w|IETF language tag#Syntax of language tags|IETF subtag}} used for the script, which should always be a valid {{w|ISO 15924}} script code. This is used when constructing HTML {{code|html|lang{{=}}}} tags. The {{lua|ietf_subtag}} value from the script's data file is used, if present; otherwise, the script code is used. For script codes which contain a hyphen, only the part after the hyphen is used (e.g. {{lua|"fa-Arab"}} becomes {{lua|"Arab"}}).]==]
function Script:getIETFSubtag()
local code = self._ietf_subtag
if code == nil then
code = self._data.ietf_subtag or match(self:getCode(), "[^%-]+$")
self._ietf_subtag = code
end
return code
end
--[==[Returns a script object for the parent of the script, such as {"Arab"} for {"fa-Arab"}. It returns {nil} for scripts without a parent, like {"Latn"}, {"Grek"}, etc.]==]
function Script:getParent()
local parent = self._parentObject
if parent == nil then
parent = self:getParentCode()
-- If the value is nil, it's cached as false.
parent = parent and get_by_code(parent) or false
self._parentObject = parent
end
return parent or nil
end
--[==[Returns the script code of the parent of the script, such as {"Arab"} for {"fa-Arab"}. It returns {nil} for scripts without a parent, like {"Latn"}, {"Grek"}, etc.]==]
function Script:getParentCode()
local parent = self._parentCode
if parent == nil then
-- If the value is nil, it's cached as false.
parent = self._data.parent or false
self._parentCode = parent
end
return parent or nil
end
function Script:getSystemCodes()
if not self._systemCodes then
local system_codes = self._data[3]
if type(system_codes) == "table" then
self._systemCodes = system_codes
elseif type(system_codes) == "string" then
self._systemCodes = split(system_codes, ",", true, true)
else
self._systemCodes = {}
end
end
return self._systemCodes
end
function Script:getSystems()
if not self._systemObjects then
self._systemObjects = {}
for _, system in ipairs(self:getSystemCodes()) do
insert(self._systemObjects, get_writing_system(system))
end
end
return self._systemObjects
end
--[==[Check whether the script is of type `system`, which can be a writing system code or object. If multiple systems are passed, return true if the script is any of the specified systems.]==]
function Script:isSystem(...)
for _, system in ipairs{...} do
if type(system) == "table" then
system = system:getCode()
end
for _, s in ipairs(self:getSystemCodes()) do
if system == s then
return true
end
end
end
return false
end
--[==[Returns a table of types as a lookup table (with the types as keys).
Currently, the only possible type is {script}.]==]
function Script:getTypes()
local types = self._types
if types == nil then
types = {script = true}
local rawtypes = self._data.type
if rawtypes then
for t in gmatch(rawtypes, "[^,]+") do
types[t] = true
end
end
self._types = types
end
return types
end
--[==[Given a list of types as strings, returns true if the script has all of them.
Use {{lua|hasType("script")}} to determine if an object that may be a language, family or script is a script.]==]
function Script:hasType(...)
Script.hasType = require(language_like_module).hasType
return self:hasType(...)
end
--[==[Returns the name of the main category of that script. Example: {{lua|"Cyrillic script"}} for Cyrillic, whose category is at [[:Category:Cyrillic script]].
Unless optional argument <code>nocap</code> is given, the script name at the beginning of the returned value will be capitalized. This capitalization is correct for category names, but not if the script name is lowercase and the returned value of this function is used in the middle of a sentence. (For example, the script with the code <code>Semap</code> has the name <code>"flag semaphore"</code>, which should remain lowercase when used as part of the category name [[:Category:Translingual letters in flag semaphore]] but should be capitalized in [[:Category:Flag semaphore templates]].) If you are considering using <code>getCategoryName("nocap")</code>, use <code>getDisplayForm()</code> instead.]==]
function Script:getCategoryName(nocap)
local name = self:getCanonicalName()
if category_name_has_suffix(name, scripts_suffixes or get_scripts_suffixes()) then
name = name .. " script"
end
if not nocap then
name = mw.getContentLanguage():ucfirst(name)
end
return name
end
function Script:makeCategoryLink()
return "[[:Category:" .. self:getCategoryName() .. "|" .. self:getDisplayForm() .. "]]"
end
--[==[Returns the Wikidata item id for the script or <code>nil</code>. This corresponds to the the second field in the data modules.]==]
function Script:getWikidataItem()
Script.getWikidataItem = require(language_like_module).getWikidataItem
return self:getWikidataItem()
end
--[==[
Returns the name of the Wikipedia article for the script. `project` specifies the language and project to retrieve
the article from, defaulting to {"enwiki"} for the English Wikipedia. Normally if specified it should be the project
code for a specific-language Wikipedia e.g. "zhwiki" for the Chinese Wikipedia, but it can be any project, including
non-Wikipedia ones. If the project is the English Wikipedia and the property {wikipedia_article} is present in the data
module it will be used first. In all other cases, a sitelink will be generated from {:getWikidataItem} (if set). The
resulting value (or lack of value) is cached so that subsequent calls are fast. If no value could be determined, and
`noCategoryFallback` is {false}, {:getCategoryName} is used as fallback; otherwise, {nil} is returned. Note that if
`noCategoryFallback` is {nil} or omitted, it defaults to {false} if the project is the English Wikipedia, otherwise
to {true}. In other words, under normal circumstances, if the English Wikipedia article couldn't be retrieved, the
return value will fall back to a link to the script's category, but this won't normally happen for any other project.
]==]
function Script:getWikipediaArticle(noCategoryFallback, project)
Script.getWikipediaArticle = require(language_like_module).getWikipediaArticle
return self:getWikipediaArticle(noCategoryFallback, project)
end
--[==[Returns the name of the Wikimedia Commons category page for the script.]==]
function Script:getCommonsCategory()
Script.getCommonsCategory = require(language_like_module).getCommonsCategory
return self:getCommonsCategory()
end
--[==[Returns the charset defining the script's characters from the script's data file.
This can be used to search for words consisting only of this script, but see the warning above.]==]
function Script:getCharacters()
return self.characters or nil
end
--[==[Returns the number of characters in the text that are part of this script.
'''Note:''' You should never assume that text consists entirely of the same script. Strings may contain spaces, punctuation and even wiki markup or HTML tags. HTML tags will skew the counts, as they contain Latin-script characters. So it's best to avoid them.]==]
function Script:countCharacters(text)
local charset = self._data.characters
if charset == nil then
return 0
end
return select(2, ugsub(text, "[" .. charset .. "]", ""))
end
function Script:hasCapitalization()
return not not self._data.capitalized
end
function Script:hasSpaces()
return self._data.spaces ~= false
end
function Script:isTransliterated()
return self._data.translit ~= false
end
--[==[Returns true if the script is (sometimes) sorted by scraping page content, meaning that it is sensitive to changes in capitalization during sorting.]==]
function Script:sortByScraping()
return not not self._data.sort_by_scraping
end
--[==[Returns the text direction. Horizontal scripts return {{lua|"ltr"}} (left-to-right) or {{lua|"rtl"}} (right-to-left), while vertical scripts return {{lua|"vertical-ltr"}} (vertical left-to-right) or {{lua|"vertical-rtl"}} (vertical right-to-left).]==]
function Script:getDirection()
return self._data.direction or "ltr"
end
function Script:getData()
return self._data
end
--[==[Returns the name of the module containing the script's data. Currently, this is always [[Module:scripts/data]].]==]
function Script:getDataModuleName()
return scripts_data_module
end
--[==[Returns {{lua|true}} if the script contains characters that require fixes to Unicode normalization under certain circumstances, {{lua|false}} if it doesn't.]==]
function Script:hasNormalizationFixes()
return not not self._data.normalizationFixes
end
--[==[Corrects discouraged sequences of Unicode characters to the encouraged equivalents.]==]
function Script:fixDiscouragedSequences(text)
if self:hasNormalizationFixes() then
local norm_fixes = self._data.normalizationFixes
local to = norm_fixes.to
if to then
for i, v in ipairs(norm_fixes.from) do
text = ugsub(text, v, to[i] or "")
end
end
end
return text
end
do
local combining_classes
-- Obtain the list of default combining classes.
local function get_combining_classes()
combining_classes, get_combining_classes = load_data(combining_classes_module), nil
return combining_classes
end
-- Implements a modified form of Unicode normalization for instances where there are identified deficiencies in the default Unicode combining classes.
local function fixNormalization(text, self)
if not self:hasNormalizationFixes() then
return text
end
local norm_fixes = self._data.normalizationFixes
local new_classes = norm_fixes.combiningClasses
if not (new_classes and umatch(text, "[" .. norm_fixes.combiningClassCharacters .. "]")) then
return text
end
text = explode(text)
-- Manual sort based on new combining classes.
-- We can't use table.sort, as it compares the first/last values in an array as a shortcut, which messes things up.
for i = 2, #text do
local char = text[i]
local class = new_classes[char] or (combining_classes or get_combining_classes())[char]
if class then
repeat
i = i - 1
local prev = text[i]
if (new_classes[prev] or (combining_classes or get_combining_classes())[prev] or 0) < class then
break
end
text[i], text[i + 1] = char, prev
until i == 1
end
end
return concat(text)
end
function Script:toFixedNFC(text)
return fixNormalization(toNFC(text), self)
end
function Script:toFixedNFD(text)
return fixNormalization(toNFD(text), self)
end
function Script:toFixedNFKC(text)
return fixNormalization(toNFKC(text), self)
end
function Script:toFixedNFKD(text)
return fixNormalization(toNFKD(text), self)
end
end
function Script:toJSON(opts)
local ret = {
canonicalName = self:getCanonicalName(),
categoryName = self:getCategoryName("nocap"),
code = self:getCode(),
parent = self:getParentCode(),
systems = self:getSystemCodes(),
aliases = self:getAliases(),
varieties = self:getVarieties(),
otherNames = self:getOtherNames(),
type = keys_to_list(self:getTypes()),
direction = self:getDirection(),
characters = self:getCharacters(),
ietfSubtag = self:getIETFSubtag(),
wikidataItem = self:getWikidataItem(),
wikipediaArticle = self:getWikipediaArticle(true),
}
-- Use `deep_copy` when returning a table, so that there are no editing restrictions imposed by `mw.loadData`.
return opts and opts.lua_table and deep_copy(ret) or to_json(ret, opts)
end
function export.makeObject(code, data)
local data_type = type(data)
if data_type ~= "table" then
error(("bad argument #2 to 'makeObject' (table expected, got %s)"):format(data_type))
end
return setmetatable({_data = data, _code = code, characters = data.characters}, Script)
end
make_object = export.makeObject
--[==[
Finds the script whose code matches the one provided. If it exists, it returns a {Script} object representing the
script. Otherwise, it returns {nil}.]==]
function export.getByCode(code)
local data = (scripts_data or get_scripts_data())[code]
return data ~= nil and make_object(code, data) or nil
end
get_by_code = export.getByCode
--[==[
Look for the script whose canonical name (the name used to represent that script on Wiktionary) matches the one
provided. If it exists, it returns a {Script} object representing the script. Otherwise, it returns {nil}. The
canonical name of scripts should always be unique (it is an error for two scripts on Wiktionary to share the same
canonical name), so this is guaranteed to give at most one result.]==]
function export.getByCanonicalName(name)
if name == nil then
return nil
end
local code = (scripts_canonical_names or get_scripts_canonical_names())[name]
if code == nil then
return nil
end
return get_by_code(code)
end
--[==[
Look for the script whose category name (the name used in categories for that script) matches the one provided.
If it exists, it returns a {Script} object representing the script. Otherwise, it returns {nil}. In almost all cases,
the category name for a script is its canonical name plus the word "script", e.g. "Cyrillic" has the category name
"Cyrillic script". Where a canonical name ends with "script", "code" or "semaphore", the category name is identical
to the canonical name.]==]
function export.getByCategoryName(name)
if name == nil then
return nil
end
local code = category_name_to_code(
name,
" script",
scripts_canonical_names or get_scripts_canonical_names(),
scripts_suffixes or get_scripts_suffixes()
)
if code == nil then
return nil
end
return get_by_code(code)
end
--[==[
Takes a codepoint or a character and finds the script code (if any) that is
appropriate for it based on the codepoint, using the data module
[[Module:scripts/recognition data]]. The data module was generated from the
patterns in [[Module:scripts/data]] using [[Module:User:Erutuon/script recognition]].
Converts the character to a codepoint. Returns a script code if the codepoint
is in the list of individual characters, or if it is in one of the defined
ranges in the 4096-character block that it belongs to, else returns "None".
]==]
function export.charToScript(char)
export.charToScript = require(scripts_chartoscript_module).charToScript
return export.charToScript(char)
end
--[==[
Returns the code for the script that has the greatest number of characters in `text`. Useful for script tagging text
that is unspecified for language. Uses [[Module:scripts/recognition data]] to determine a script code for a character
language-agnostically. Specifically, it works as follows:
Convert each character to a codepoint. Increment the counter for the script code if the codepoint is in the list
of individual characters, or if it is in one of the defined ranges in the 4096-character block that it belongs to.
Each script has a two-part counter, for primary and secondary matches. Primary matches are when the script is the
first one listed; otherwise, it's a secondary match. When comparing scripts, first the total of both are compared
(i.e. the overall number of matches). If these are the same, the number of primary and then secondary matches are
used as tiebreakers. For example, this is used to ensure that `Grek` takes priority over `Polyt` if no characters
which exclusively match `Polyt` are found, as `Grek` is a subset of `Polyt`.
If `none_is_last_resort_only` is specified, this will never return {"None"} if any characters in `text` belong to a
script. Otherwise, it will return {"None"} if there are more characters that don't belong to a script than belong to
any individual script. (FIXME: This behavior is probably wrong, and `none_is_last_resort_only` should probably
become the default.)
]==]
function export.findBestScriptWithoutLang(text, none_is_last_resort_only)
export.findBestScriptWithoutLang = require(scripts_chartoscript_module).findBestScriptWithoutLang
return export.findBestScriptWithoutLang(text, none_is_last_resort_only)
end
return export
anyowy4owrrtgbmxfr38n4p05s6iamd
Mòideal:scripts/data
828
3748
86356
70741
2026-07-23T01:10:21Z
Altronic
4137
Copy from English Wiktionary
86356
Scribunto
text/plain
--[=[
When adding new scripts to this file, please don't forget to add
style definitons for the script in [[MediaWiki:Gadget-LanguagesAndScripts.css]].
]=]
local concat = table.concat
local insert = table.insert
local ipairs = ipairs
local next = next
local remove = table.remove
local select = select
local sort = table.sort
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string/char")
return u(...)
end
-- We can't use mw.loadData() on [[Module:languages/chars]] because [[Module:languages/data]] itself is sometimes loaded
-- using mw.loadData(), and calling mw.loadData() on [[Module:languages/chars]] will insert metatables into the
-- character tables, which the second mw.loadData() will choke on.
local m_chars = require("Module:languages/chars")
local c = m_chars.chars
local p = m_chars.puaChars
local cs = m_chars.chars_substitutions
------------------------------------------------------------------------------------
--
-- Helper functions
--
------------------------------------------------------------------------------------
-- Note: a[2] > b[2] means opens are sorted before closes if otherwise equal.
local function sort_ranges(a, b)
return a[1] < b[1] or a[1] == b[1] and a[2] > b[2]
end
-- Returns the union of two or more range tables.
local function union(...)
local ranges = {}
for i = 1, select("#", ...) do
local argt = select(i, ...)
for j, v in ipairs(argt) do
insert(ranges, {v, j % 2 == 1 and 1 or -1})
end
end
sort(ranges, sort_ranges)
local ret, i = {}, 0
for _, range in ipairs(ranges) do
i = i + range[2]
if i == 0 and range[2] == -1 then -- close
insert(ret, range[1])
elseif i == 1 and range[2] == 1 then -- open
if ret[#ret] and range[1] <= ret[#ret] + 1 then
remove(ret) -- merge adjacent ranges
else
insert(ret, range[1])
end
end
end
return ret
end
-- Adds the `characters` key, which is determined by a script's `ranges` table.
local function process_ranges(sc)
local ranges, chars = sc.ranges, {}
for i = 2, #ranges, 2 do
if ranges[i] == ranges[i - 1] then
insert(chars, u(ranges[i]))
else
insert(chars, u(ranges[i - 1]))
if ranges[i] > ranges[i - 1] + 1 then
insert(chars, "-")
end
insert(chars, u(ranges[i]))
end
end
sc.characters = concat(chars)
ranges.n = #ranges
return sc
end
local function handle_normalization_fixes(fixes)
local combiningClasses = fixes.combiningClasses
if combiningClasses then
local chars, i = {}, 0
for char in next, combiningClasses do
i = i + 1
chars[i] = char
end
fixes.combiningClassCharacters = concat(chars)
end
return fixes
end
------------------------------------------------------------------------------------
--
-- Data
--
------------------------------------------------------------------------------------
local m = {}
m["Adlm"] = process_ranges{
"Adlam",
19606346,
"alphabet",
ranges = {
0x061F, 0x061F,
0x0640, 0x0640,
0x1E900, 0x1E94B,
0x1E950, 0x1E959,
0x1E95E, 0x1E95F,
},
capitalized = true,
direction = "rtl",
}
m["Afak"] = {
"Afaka",
382019,
"syllabary",
-- Not in Unicode
}
m["Aghb"] = process_ranges{
"Caucasian Albanian",
2495716,
"alphabet",
ranges = {
0x10530, 0x10563,
0x1056F, 0x1056F,
},
}
m["Ahom"] = process_ranges{
"Ahom",
2839633,
"abugida",
ranges = {
0x11700, 0x1171A,
0x1171D, 0x1172B,
0x11730, 0x11746,
},
}
m["Arab"] = process_ranges{
"Arabic",
1828555,
"abjad", -- more precisely, impure abjad
varieties = {"Jawi", {"Nastaliq", "Nastaleeq"}},
ranges = {
0x0600, 0x06FF,
0x0750, 0x077F,
0x0870, 0x088E,
0x0890, 0x0891,
0x0897, 0x08E1,
0x08E3, 0x08FF,
0xFB50, 0xFBC2,
0xFBD3, 0xFD8F,
0xFD92, 0xFDC7,
0xFDCF, 0xFDCF,
0xFDF0, 0xFDFF,
0xFE70, 0xFE74,
0xFE76, 0xFEFC,
0x102E0, 0x102FB,
0x10E60, 0x10E7E,
0x10EC2, 0x10EC4,
0x10EFC, 0x10EFF,
0x1EE00, 0x1EE03,
0x1EE05, 0x1EE1F,
0x1EE21, 0x1EE22,
0x1EE24, 0x1EE24,
0x1EE27, 0x1EE27,
0x1EE29, 0x1EE32,
0x1EE34, 0x1EE37,
0x1EE39, 0x1EE39,
0x1EE3B, 0x1EE3B,
0x1EE42, 0x1EE42,
0x1EE47, 0x1EE47,
0x1EE49, 0x1EE49,
0x1EE4B, 0x1EE4B,
0x1EE4D, 0x1EE4F,
0x1EE51, 0x1EE52,
0x1EE54, 0x1EE54,
0x1EE57, 0x1EE57,
0x1EE59, 0x1EE59,
0x1EE5B, 0x1EE5B,
0x1EE5D, 0x1EE5D,
0x1EE5F, 0x1EE5F,
0x1EE61, 0x1EE62,
0x1EE64, 0x1EE64,
0x1EE67, 0x1EE6A,
0x1EE6C, 0x1EE72,
0x1EE74, 0x1EE77,
0x1EE79, 0x1EE7C,
0x1EE7E, 0x1EE7E,
0x1EE80, 0x1EE89,
0x1EE8B, 0x1EE9B,
0x1EEA1, 0x1EEA3,
0x1EEA5, 0x1EEA9,
0x1EEAB, 0x1EEBB,
0x1EEF0, 0x1EEF1,
},
direction = "rtl",
normalizationFixes = handle_normalization_fixes{
from = {"ٳ"},
to = {"اٟ"}
},
}
m["fa-Arab"] = {
"Arabic",
744068,
m["Arab"][3],
ranges = m["Arab"].ranges,
characters = m["Arab"].characters,
other_names = {"Perso-Arabic"},
direction = "rtl",
parent = "Arab",
normalizationFixes = m["Arab"].normalizationFixes,
}
m["kk-Arab"] = {
"Arabic",
90681452,
m["Arab"][3],
ranges = m["Arab"].ranges,
characters = m["Arab"].characters,
direction = "rtl",
parent = "Arab",
normalizationFixes = m["Arab"].normalizationFixes,
}
m["ks-Arab"] = m["fa-Arab"]
m["ku-Arab"] = m["fa-Arab"]
m["ms-Arab"] = m["kk-Arab"]
m["mzn-Arab"] = m["fa-Arab"]
m["ota-Arab"] = m["fa-Arab"]
m["pa-Arab"] = {
"Shahmukhi",
133800,
m["Arab"][3],
ranges = m["Arab"].ranges,
characters = m["Arab"].characters,
other_names = {"Arabic"},
direction = "rtl",
parent = "Arab",
normalizationFixes = m["Arab"].normalizationFixes,
}
m["ps-Arab"] = m["fa-Arab"]
m["sd-Arab"] = m["fa-Arab"]
m["tt-Arab"] = m["fa-Arab"]
m["ug-Arab"] = m["fa-Arab"]
m["ur-Arab"] = m["fa-Arab"]
-- Aran (Nastaliq) is subsumed into Arab
m["Armi"] = process_ranges{
"Imperial Aramaic",
26978,
"abjad",
ranges = {
0x10840, 0x10855,
0x10857, 0x1085F,
},
direction = "rtl",
}
m["Armn"] = process_ranges{
"Armenian",
11932,
"alphabet",
ranges = {
0x0531, 0x0556,
0x0559, 0x058A,
0x058D, 0x058F,
0xFB13, 0xFB17,
},
capitalized = true,
translit = "Armn-translit",
}
m["Avst"] = process_ranges{
"Avestan",
790681,
"alphabet",
ranges = {
0x10B00, 0x10B35,
0x10B39, 0x10B3F,
},
direction = "rtl",
}
m["pal-Avst"] = {
"Pazend",
4925073,
m["Avst"][3],
ranges = m["Avst"].ranges,
characters = m["Avst"].characters,
direction = "rtl",
parent = "Avst",
}
m["Bali"] = process_ranges{
"Balinese",
804984,
"abugida",
ranges = {
0x1B00, 0x1B4C,
0x1B4E, 0x1B7F,
},
}
m["Bamu"] = process_ranges{
"Bamum",
806024,
"syllabary",
ranges = {
0xA6A0, 0xA6F7,
0x16800, 0x16A38,
},
}
m["Bass"] = process_ranges{
"Bassa",
810458,
"alphabet",
aliases = {"Bassa Vah", "Vah"},
ranges = {
0x16AD0, 0x16AED,
0x16AF0, 0x16AF5,
},
}
m["Batk"] = process_ranges{
"Batak",
51592,
"abugida",
ranges = {
0x1BC0, 0x1BF3,
0x1BFC, 0x1BFF,
},
}
m["Beng"] = process_ranges{
"Bengali",
756802,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0980, 0x0983,
0x0985, 0x098C,
0x098F, 0x0990,
0x0993, 0x09A8,
0x09AA, 0x09B0,
0x09B2, 0x09B2,
0x09B6, 0x09B9,
0x09BC, 0x09C4,
0x09C7, 0x09C8,
0x09CB, 0x09CE,
0x09D7, 0x09D7,
0x09DC, 0x09DD,
0x09DF, 0x09E3,
0x09E6, 0x09EF,
0x09F2, 0x09FE,
0x1CD0, 0x1CD0,
0x1CD2, 0x1CD2,
0x1CD5, 0x1CD6,
0x1CD8, 0x1CD8,
0x1CE1, 0x1CE1,
0x1CEA, 0x1CEA,
0x1CED, 0x1CED,
0x1CF2, 0x1CF2,
0x1CF5, 0x1CF7,
0xA8F1, 0xA8F1,
},
normalizationFixes = handle_normalization_fixes{
from = {"অা", "ঋৃ", "ঌৢ"},
to = {"আ", "ৠ", "ৡ"}
},
}
m["as-Beng"] = process_ranges{
"Assamese",
191272,
m["Beng"][3],
other_names = {"Eastern Nagari"},
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0980, 0x0983,
0x0985, 0x098C,
0x098F, 0x0990,
0x0993, 0x09A8,
0x09AA, 0x09AF,
0x09B2, 0x09B2,
0x09B6, 0x09B9,
0x09BC, 0x09C4,
0x09C7, 0x09C8,
0x09CB, 0x09CE,
0x09D7, 0x09D7,
0x09DC, 0x09DD,
0x09DF, 0x09E3,
0x09E6, 0x09FE,
0x1CD0, 0x1CD0,
0x1CD2, 0x1CD2,
0x1CD5, 0x1CD6,
0x1CD8, 0x1CD8,
0x1CE1, 0x1CE1,
0x1CEA, 0x1CEA,
0x1CED, 0x1CED,
0x1CF2, 0x1CF2,
0x1CF5, 0x1CF7,
0xA8F1, 0xA8F1,
},
normalizationFixes = m["Beng"].normalizationFixes,
}
m["Bhks"] = process_ranges{
"Bhaiksuki",
17017839,
"abugida",
ranges = {
0x11C00, 0x11C08,
0x11C0A, 0x11C36,
0x11C38, 0x11C45,
0x11C50, 0x11C6C,
},
}
m["Blis"] = {
"Blissymbolic",
609817,
"logography",
aliases = {"Blissymbols"},
-- Not in Unicode
}
m["Bopo"] = process_ranges{
"Zhuyin",
198269,
"semisyllabary",
aliases = {"Zhuyin Fuhao", "Bopomofo"},
ranges = {
0x02EA, 0x02EB,
0x3001, 0x3003,
0x3008, 0x3011,
0x3013, 0x301F,
0x302A, 0x302D,
0x3030, 0x3030,
0x3037, 0x3037,
0x30FB, 0x30FB,
0x3105, 0x312F,
0x31A0, 0x31BF,
0xFE45, 0xFE46,
0xFF61, 0xFF65,
},
}
m["Brah"] = process_ranges{
"Brahmi",
185083,
"abugida",
ranges = {
0x11000, 0x1104D,
0x11052, 0x11075,
0x1107F, 0x1107F,
},
normalizationFixes = handle_normalization_fixes{
from = {"𑀅𑀸", "𑀋𑀾", "𑀏𑁂"},
to = {"𑀆", "𑀌", "𑀐"}
},
translit = "Brah-translit",
}
m["Brai"] = process_ranges{
"Braille",
79894,
"alphabet",
ranges = {
0x2800, 0x28FF,
},
}
m["Bugi"] = process_ranges{
"Lontara",
1074947,
"abugida",
aliases = {"Buginese"},
ranges = {
0x1A00, 0x1A1B,
0x1A1E, 0x1A1F,
0xA9CF, 0xA9CF,
},
}
m["Buhd"] = process_ranges{
"Buhid",
1002969,
"abugida",
ranges = {
0x1735, 0x1736,
0x1740, 0x1751,
0x1752, 0x1753,
},
}
m["Cakm"] = process_ranges{
"Chakma",
1059328,
"abugida",
ranges = {
0x09E6, 0x09EF,
0x1040, 0x1049,
0x11100, 0x11134,
0x11136, 0x11147,
},
}
m["Cans"] = process_ranges{
"Canadian syllabic",
2479183,
"abugida",
ranges = {
0x1400, 0x167F,
0x18B0, 0x18F5,
0x11AB0, 0x11ABF,
},
}
m["Cari"] = process_ranges{
"Carian",
1094567,
"alphabet",
ranges = {
0x102A0, 0x102D0,
},
}
m["Cham"] = process_ranges{
"Cham",
1060381,
"abugida",
ranges = {
0xAA00, 0xAA36,
0xAA40, 0xAA4D,
0xAA50, 0xAA59,
0xAA5C, 0xAA5F,
},
}
m["Cher"] = process_ranges{
"Cherokee",
26549,
"syllabary",
ranges = {
0x13A0, 0x13F5,
0x13F8, 0x13FD,
0xAB70, 0xABBF,
},
}
m["Chis"] = {
"Chisoi",
123173777,
"abugida",
-- Not in Unicode
}
m["Chrs"] = process_ranges{
"Khwarezmian",
72386710,
"abjad",
aliases = {"Chorasmian"},
ranges = {
0x10FB0, 0x10FCB,
},
direction = "rtl",
}
m["Copt"] = process_ranges{
"Coptic",
321083,
"alphabet",
ranges = {
0x03E2, 0x03EF,
0x2C80, 0x2CF3,
0x2CF9, 0x2CFF,
0x102E0, 0x102FB,
},
capitalized = true,
}
m["Cpmn"] = process_ranges{
"Cypro-Minoan",
1751985,
"syllabary",
aliases = {"Cypro Minoan"},
ranges = {
0x10100, 0x10101,
0x12F90, 0x12FF2,
},
}
m["Cprt"] = process_ranges{
"Cypriot",
1757689,
"syllabary",
ranges = {
0x10100, 0x10102,
0x10107, 0x10133,
0x10137, 0x1013F,
0x10800, 0x10805,
0x10808, 0x10808,
0x1080A, 0x10835,
0x10837, 0x10838,
0x1083C, 0x1083C,
0x1083F, 0x1083F,
},
direction = "rtl",
}
m["Cyrl"] = process_ranges{
"Cyrillic",
8209,
"alphabet",
ranges = {
0x0400, 0x052F,
0x1C80, 0x1C8A,
0x1D2B, 0x1D2B,
0x1D78, 0x1D78,
0x1DF8, 0x1DF8,
0x2DE0, 0x2DFF,
0x2E43, 0x2E43,
0xA640, 0xA69F,
0xFE2E, 0xFE2F,
0x1E030, 0x1E06D,
0x1E08F, 0x1E08F,
},
capitalized = true,
}
m["Cyrs"] = {
"Old Cyrillic",
442244,
m["Cyrl"][3],
aliases = {"Early Cyrillic"},
ranges = m["Cyrl"].ranges,
characters = m["Cyrl"].characters,
capitalized = m["Cyrl"].capitalized,
wikipedia_article = "Early Cyrillic alphabet",
normalizationFixes = handle_normalization_fixes{
from = {"Ѹ", "ѹ"},
to = {"Ꙋ", "ꙋ"}
},
strip_diacritics = {remove_diacritics = cs.Cyrs_remove_diacritics},
sort_key = {
remove_diacritics = cs.Cyrs_remove_diacritics,
from = {
"ї", "оу", -- 2 chars
"[ґꙣєѕꙃꙅꙁіꙇђꙉѻꙩꙫꙭꙮꚙꚛꙋѡѿꙍѽꙑѣꙗѥꙕѧꙙѩꙝꙛѫѭѯѱѳѵҁ]"
},
to = {
"и" .. p[1], "у", {
["ґ"] = "г" .. p[1], ["ꙣ"] = "д" .. p[1], ["є"] = "е", ["ѕ"] = "ж" .. p[1], ["ꙃ"] = "ж" .. p[1],
["ꙅ"] = "ж" .. p[1], ["ꙁ"] = "з", ["і"] = "и" .. p[1], ["ꙇ"] = "и" .. p[1], ["ђ"] = "и" .. p[2],
["ꙉ"] = "и" .. p[2], ["ѻ"] = "о", ["ꙩ"] = "о", ["ꙫ"] = "о", ["ꙭ"] = "о",
["ꙮ"] = "о", ["ꚙ"] = "о", ["ꚛ"] = "о", ["ꙋ"] = "у", ["ѡ"] = "х" .. p[1],
["ѿ"] = "х" .. p[1], ["ꙍ"] = "х" .. p[1], ["ѽ"] = "х" .. p[1], ["ꙑ"] = "ы", ["ѣ"] = "ь" .. p[1],
["ꙗ"] = "ь" .. p[2], ["ѥ"] = "ь" .. p[3], ["ꙕ"] = "ю", ["ѧ"] = "я", ["ꙙ"] = "я",
["ѩ"] = "я" .. p[1], ["ꙝ"] = "я" .. p[1], ["ꙛ"] = "я" .. p[2], ["ѫ"] = "я" .. p[3], ["ѭ"] = "я" .. p[4],
["ѯ"] = "я" .. p[5], ["ѱ"] = "я" .. p[6], ["ѳ"] = "я" .. p[7], ["ѵ"] = "я" .. p[8], ["ҁ"] = "я" .. p[9],
}
},
}
}
m["Deva"] = process_ranges{
"Devanagari",
38592,
"abugida",
ranges = {
0x0900, 0x097F,
0x1CD0, 0x1CF6,
0x1CF8, 0x1CF9,
0x20F0, 0x20F0,
0xA830, 0xA839,
0xA8E0, 0xA8FF,
0x11B00, 0x11B09,
},
normalizationFixes = handle_normalization_fixes{
from = {"ॆॆ", "ेे", "ाॅ", "ाॆ", "ाꣿ", "ॊॆ", "ाे", "ाै", "ोे", "ाऺ", "ॖॖ", "अॅ", "अॆ", "अा", "एॅ", "एॆ", "एे", "एꣿ", "ऎॆ", "अॉ", "आॅ", "अॊ", "आॆ", "अो", "आे", "अौ", "आै", "ओे", "अऺ", "अऻ", "आऺ", "अाꣿ", "आꣿ", "ऒॆ", "अॖ", "अॗ", "ॶॖ", "्?ा"},
to = {"ꣿ", "ै", "ॉ", "ॊ", "ॏ", "ॏ", "ो", "ौ", "ौ", "ऻ", "ॗ", "ॲ", "ऄ", "आ", "ऍ", "ऎ", "ऐ", "ꣾ", "ꣾ", "ऑ", "ऑ", "ऒ", "ऒ", "ओ", "ओ", "औ", "औ", "औ", "ॳ", "ॴ", "ॴ", "ॵ", "ॵ", "ॵ", "ॶ", "ॷ", "ॷ"}
},
}
m["Diak"] = process_ranges{
"Dhives Akuru",
3307073,
"abugida",
aliases = {"Dhivehi Akuru", "Dives Akuru", "Divehi Akuru"},
ranges = {
0x11900, 0x11906,
0x11909, 0x11909,
0x1190C, 0x11913,
0x11915, 0x11916,
0x11918, 0x11935,
0x11937, 0x11938,
0x1193B, 0x11946,
0x11950, 0x11959,
},
}
m["Dogr"] = process_ranges{
"Dogra",
72402987,
"abugida",
ranges = {
0x0964, 0x096F,
0xA830, 0xA839,
0x11800, 0x1183B,
},
}
m["Dsrt"] = process_ranges{
"Deseret",
1200582,
"alphabet",
ranges = {
0x10400, 0x1044F,
},
capitalized = true,
}
m["Dupl"] = process_ranges{
"Duployan",
5316025,
"alphabet",
ranges = {
0x1BC00, 0x1BC6A,
0x1BC70, 0x1BC7C,
0x1BC80, 0x1BC88,
0x1BC90, 0x1BC99,
0x1BC9C, 0x1BCA3,
},
}
m["Egyd"] = {
"Demotic",
188519,
"abjad, logography",
-- Not in Unicode
}
m["Egyh"] = {
"Hieratic",
208111,
"abjad, logography",
-- Unified with Egyptian hieroglyphic in Unicode
}
m["Egyp"] = process_ranges{
"Egyptian hieroglyphic",
132659,
"abjad, logography",
ranges = {
0x13000, 0x13455,
0x13460, 0x143FA,
},
varieties = {"Hieratic"},
wikipedia_article = "Egyptian hieroglyphs",
normalizationFixes = handle_normalization_fixes{
from = {"𓃁", "𓆖"},
to = {"𓃀𓂝", "𓆓𓏏𓇿"}
},
}
m["Elba"] = process_ranges{
"Elbasan",
1036714,
"alphabet",
ranges = {
0x10500, 0x10527,
},
}
m["Elym"] = process_ranges{
"Elymaic",
60744423,
"abjad",
ranges = {
0x10FE0, 0x10FF6,
},
direction = "rtl",
}
m["Ethi"] = process_ranges{
"Ethiopic",
257634,
"abugida",
aliases = {"Ge'ez", "Geʽez"},
ranges = {
0x1200, 0x1248,
0x124A, 0x124D,
0x1250, 0x1256,
0x1258, 0x1258,
0x125A, 0x125D,
0x1260, 0x1288,
0x128A, 0x128D,
0x1290, 0x12B0,
0x12B2, 0x12B5,
0x12B8, 0x12BE,
0x12C0, 0x12C0,
0x12C2, 0x12C5,
0x12C8, 0x12D6,
0x12D8, 0x1310,
0x1312, 0x1315,
0x1318, 0x135A,
0x135D, 0x137C,
0x1380, 0x1399,
0x2D80, 0x2D96,
0x2DA0, 0x2DA6,
0x2DA8, 0x2DAE,
0x2DB0, 0x2DB6,
0x2DB8, 0x2DBE,
0x2DC0, 0x2DC6,
0x2DC8, 0x2DCE,
0x2DD0, 0x2DD6,
0x2DD8, 0x2DDE,
0xAB01, 0xAB06,
0xAB09, 0xAB0E,
0xAB11, 0xAB16,
0xAB20, 0xAB26,
0xAB28, 0xAB2E,
0x1E7E0, 0x1E7E6,
0x1E7E8, 0x1E7EB,
0x1E7ED, 0x1E7EE,
0x1E7F0, 0x1E7FE,
},
sort_key = "Ethi-sortkey",
strip_diacritics = {remove_diacritics = u(0x135D) .. u(0x135E) .. u(0x135F)}
}
m["Gara"] = process_ranges{
"Garay",
3095302,
"alphabet",
capitalized = true,
direction = "rtl",
ranges = {
0x060C, 0x060C,
0x061B, 0x061B,
0x061F, 0x061F,
0x10D40, 0x10D65,
0x10D69, 0x10D85,
0x10D8E, 0x10D8F,
},
}
m["Geok"] = process_ranges{
"Khutsuri",
1090055,
"alphabet",
ranges = { -- Ⴀ-Ⴭ is Asomtavruli, ⴀ-ⴭ is Nuskhuri
0x10A0, 0x10C5,
0x10C7, 0x10C7,
0x10CD, 0x10CD,
0x10FB, 0x10FB,
0x2D00, 0x2D25,
0x2D27, 0x2D27,
0x2D2D, 0x2D2D,
},
varieties = {"Nuskhuri", "Asomtavruli"},
capitalized = true,
translit = "Geok-translit",
}
m["Geor"] = process_ranges{
"Georgian",
3317411,
"alphabet",
ranges = { -- ა-ჿ is lowercase Mkhedruli; Ა-Ჿ is uppercase Mkhedruli (Mtavruli)
0x0589, 0x0589,
0x10D0, 0x10FF,
0x1C90, 0x1CBA,
0x1CBD, 0x1CBF,
},
varieties = {"Mkhedruli", "Mtavruli"},
capitalized = true,
translit = "Geor-translit",
}
m["Glag"] = process_ranges{
"Glagolitic",
145625,
"alphabet",
ranges = {
0x0484, 0x0484,
0x0487, 0x0487,
0x0589, 0x0589,
0x10FB, 0x10FB,
0x2C00, 0x2C5F,
0x2E43, 0x2E43,
0xA66F, 0xA66F,
0x1E000, 0x1E006,
0x1E008, 0x1E018,
0x1E01B, 0x1E021,
0x1E023, 0x1E024,
0x1E026, 0x1E02A,
},
capitalized = true,
}
m["Gong"] = process_ranges{
"Gunjala Gondi",
18125340,
"abugida",
ranges = {
0x0964, 0x0965,
0x11D60, 0x11D65,
0x11D67, 0x11D68,
0x11D6A, 0x11D8E,
0x11D90, 0x11D91,
0x11D93, 0x11D98,
0x11DA0, 0x11DA9,
},
}
m["Gonm"] = process_ranges{
"Masaram Gondi",
16977603,
"abugida",
ranges = {
0x0964, 0x0965,
0x11D00, 0x11D06,
0x11D08, 0x11D09,
0x11D0B, 0x11D36,
0x11D3A, 0x11D3A,
0x11D3C, 0x11D3D,
0x11D3F, 0x11D47,
0x11D50, 0x11D59,
},
}
m["Goth"] = process_ranges{
"Gothic",
467784,
"alphabet",
ranges = {
0x10330, 0x1034A,
},
wikipedia_article = "Gothic alphabet",
}
m["Gran"] = process_ranges{
"Grantha",
1119274,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0BE6, 0x0BF3,
0x1CD0, 0x1CD0,
0x1CD2, 0x1CD3,
0x1CF2, 0x1CF4,
0x1CF8, 0x1CF9,
0x20F0, 0x20F0,
0x11300, 0x11303,
0x11305, 0x1130C,
0x1130F, 0x11310,
0x11313, 0x11328,
0x1132A, 0x11330,
0x11332, 0x11333,
0x11335, 0x11339,
0x1133B, 0x11344,
0x11347, 0x11348,
0x1134B, 0x1134D,
0x11350, 0x11350,
0x11357, 0x11357,
0x1135D, 0x11363,
0x11366, 0x1136C,
0x11370, 0x11374,
0x11FD0, 0x11FD1,
0x11FD3, 0x11FD3,
},
}
m["Grek"] = process_ranges{
"Greek",
8216,
"alphabet",
ranges = {
0x0341, 0x0341,
0x0374, 0x0375,
0x037E, 0x037E,
0x0384, 0x038A,
0x038C, 0x038C,
0x038E, 0x03A1,
0x03A3, 0x03D7,
0x03DA, 0x03DB,
0x03DE, 0x03E1,
0x03F0, 0x03F1,
0x03F4, 0x03F4,
0x03FC, 0x03FC,
0x1D26, 0x1D2A,
0x1D5D, 0x1D61,
0x1D66, 0x1D6A,
0x1DBF, 0x1DBF,
0x2126, 0x2127,
0x2129, 0x2129,
0x213C, 0x2140,
0xAB65, 0xAB65,
0x10140, 0x1018E,
0x101A0, 0x101A0,
0x1D200, 0x1D245,
},
capitalized = true,
display_text = "Grek-common",
strip_diacritics = "Grek-common",
sort_key = {
remove_diacritics = "'ʼ;·`¨´῀" .. c.grave .. c.acute .. c.diaer .. c.caron .. c.turnedcommaabove .. c.commaabove .. c.revcommaabove .. c.macron .. c.breve .. c.diaerbelow .. c.brevebelow .. c.perispomeni .. c.ypogegrammeni .. c.RSQuo .. c.prime .. c.keraia .. c.lowerkeraia .. c.tonos .. c.coronis .. c.psili .. c.dasia,
from = {"ϝ", "ͷ", "ϛ", "ͱ", "ͺ", "ϳ", "ϻ", "[ϟϙ]", "[ςϲ]", "ͳ"},
to = {"ε" .. p[1], "ε" .. p[2], "ε" .. p[3], "ζ" .. p[1], "ι", "ι" .. p[1], "π" .. p[1], "π" .. p[2], "σ", "ϡ"},
},
}
m["Polyt"] = process_ranges{
"Greek",
1475332,
m["Grek"][3],
ranges = union(m["Grek"].ranges, {
0x0340, 0x0340,
0x0342, 0x0345,
0x0370, 0x0373,
0x0376, 0x0377,
0x037A, 0x037D,
0x037F, 0x037F,
0x03D8, 0x03D9,
0x03DC, 0x03DD,
0x03F2, 0x03F3,
0x03F5, 0x03FB,
0x03FD, 0x03FF,
0x1F00, 0x1F15,
0x1F18, 0x1F1D,
0x1F20, 0x1F45,
0x1F48, 0x1F4D,
0x1F50, 0x1F57,
0x1F59, 0x1F59,
0x1F5B, 0x1F5B,
0x1F5D, 0x1F5D,
0x1F5F, 0x1F7D,
0x1F80, 0x1FB4,
0x1FB6, 0x1FC4,
0x1FC6, 0x1FD3,
0x1FD6, 0x1FDB,
0x1FDD, 0x1FEF,
0x1FF2, 0x1FF4,
0x1FF6, 0x1FFE,
}),
ietf_subtag = "Grek",
capitalized = m["Grek"].capitalized,
parent = "Grek",
display_text = m["Grek"].display_text,
strip_diacritics = "Polyt-stripdiacritics",
sort_key = m["Grek"].sort_key,
translit = "grc-translit",
}
m["Gujr"] = process_ranges{
"Gujarati",
733944,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0A81, 0x0A83,
0x0A85, 0x0A8D,
0x0A8F, 0x0A91,
0x0A93, 0x0AA8,
0x0AAA, 0x0AB0,
0x0AB2, 0x0AB3,
0x0AB5, 0x0AB9,
0x0ABC, 0x0AC5,
0x0AC7, 0x0AC9,
0x0ACB, 0x0ACD,
0x0AD0, 0x0AD0,
0x0AE0, 0x0AE3,
0x0AE6, 0x0AF1,
0x0AF9, 0x0AFF,
0xA830, 0xA839,
},
normalizationFixes = handle_normalization_fixes{
from = {"ઓ", "અાૈ", "અા", "અૅ", "અે", "અૈ", "અૉ", "અો", "અૌ", "આૅ", "આૈ", "ૅા"},
to = {"અાૅ", "ઔ", "આ", "ઍ", "એ", "ઐ", "ઑ", "ઓ", "ઔ", "ઓ", "ઔ", "ૉ"}
},
}
m["Gukh"] = process_ranges{
"Khema",
110064239,
"abugida",
aliases = {"Gurung Khema", "Khema Phri", "Khema Lipi"},
ranges = {
0x0965, 0x0965,
0x16100, 0x16139,
},
}
m["Guru"] = process_ranges{
"Gurmukhi",
689894,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0A01, 0x0A03,
0x0A05, 0x0A0A,
0x0A0F, 0x0A10,
0x0A13, 0x0A28,
0x0A2A, 0x0A30,
0x0A32, 0x0A33,
0x0A35, 0x0A36,
0x0A38, 0x0A39,
0x0A3C, 0x0A3C,
0x0A3E, 0x0A42,
0x0A47, 0x0A48,
0x0A4B, 0x0A4D,
0x0A51, 0x0A51,
0x0A59, 0x0A5C,
0x0A5E, 0x0A5E,
0x0A66, 0x0A76,
0xA830, 0xA839,
},
normalizationFixes = handle_normalization_fixes{
from = {"ਅਾ", "ਅੈ", "ਅੌ", "ੲਿ", "ੲੀ", "ੲੇ", "ੳੁ", "ੳੂ", "ੳੋ"},
to = {"ਆ", "ਐ", "ਔ", "ਇ", "ਈ", "ਏ", "ਉ", "ਊ", "ਓ"}
},
}
m["Hang"] = process_ranges{
"Hangul",
8222,
"syllabary",
aliases = {"Hangeul"},
ranges = {
0x1100, 0x11FF,
0x3001, 0x3003,
0x3008, 0x3011,
0x3013, 0x301F,
0x302E, 0x3030,
0x3037, 0x3037,
0x30FB, 0x30FB,
0x3131, 0x318E,
0x3200, 0x321E,
0x3260, 0x327E,
0xA960, 0xA97C,
0xAC00, 0xD7A3,
0xD7B0, 0xD7C6,
0xD7CB, 0xD7FB,
0xFE45, 0xFE46,
0xFF61, 0xFF65,
0xFFA0, 0xFFBE,
0xFFC2, 0xFFC7,
0xFFCA, 0xFFCF,
0xFFD2, 0xFFD7,
0xFFDA, 0xFFDC,
},
}
m["Hani"] = process_ranges{
"Han",
8201,
"logography",
ranges = {
0x2E80, 0x2E99,
0x2E9B, 0x2EF3,
0x2F00, 0x2FD5,
0x2FF0, 0x2FFF,
0x3001, 0x3003,
0x3005, 0x3011,
0x3013, 0x301F,
0x3021, 0x302D,
0x3030, 0x3030,
0x3037, 0x303F,
0x3190, 0x319F,
0x31C0, 0x31E5,
0x31EF, 0x31EF,
0x3220, 0x3247,
0x3280, 0x32B0,
0x32C0, 0x32CB,
0x30FB, 0x30FB,
0x32FF, 0x32FF,
0x3358, 0x3370,
0x337B, 0x337F,
0x33E0, 0x33FE,
0x3400, 0x4DBF,
0x4E00, 0x9FFF,
0xA700, 0xA707,
0xF900, 0xFA6D,
0xFA70, 0xFAD9,
0xFE45, 0xFE46,
0xFF61, 0xFF65,
0x16FE2, 0x16FE3,
0x16FF0, 0x16FF1,
0x1D360, 0x1D371,
0x1F250, 0x1F251,
0x20000, 0x2A6DF,
0x2A700, 0x2B739,
0x2B740, 0x2B81D,
0x2B820, 0x2CEA1,
0x2CEB0, 0x2EBE0,
0x2EBF0, 0x2EE5D,
0x2F800, 0x2FA1D,
0x30000, 0x3134A,
0x31350, 0x3347F,
},
varieties = {"Hanzi", "Kanji", "Hanja", "Chu Nom"},
spaces = false,
}
m["Hans"] = {
"Simplified Han",
185614,
m["Hani"][3],
ranges = m["Hani"].ranges,
characters = m["Hani"].characters,
spaces = m["Hani"].spaces,
parent = "Hani",
}
m["Hant"] = {
"Traditional Han",
178528,
m["Hani"][3],
ranges = m["Hani"].ranges,
characters = m["Hani"].characters,
spaces = m["Hani"].spaces,
parent = "Hani",
}
m["Hano"] = process_ranges{
"Hanunoo",
1584045,
"abugida",
aliases = {"Hanunó'o", "Hanuno'o"},
ranges = {
0x1720, 0x1736,
},
}
m["Hatr"] = process_ranges{
"Hatran",
20813038,
"abjad",
ranges = {
0x108E0, 0x108F2,
0x108F4, 0x108F5,
0x108FB, 0x108FF,
},
direction = "rtl",
}
m["Hebr"] = process_ranges{
"Hebrew",
33513,
"abjad", -- more precisely, impure abjad
ranges = {
0x0591, 0x05C7,
0x05D0, 0x05EA,
0x05EF, 0x05F4,
0x2135, 0x2138,
0xFB1D, 0xFB36,
0xFB38, 0xFB3C,
0xFB3E, 0xFB3E,
0xFB40, 0xFB41,
0xFB43, 0xFB44,
0xFB46, 0xFB4F,
},
direction = "rtl",
display_text = "Hebr-common",
sort_key = "Hebr-common",
strip_diacritics = "Hebr-common",
}
m["Hira"] = process_ranges{
"Hiragana",
48332,
"syllabary",
ranges = {
0x3001, 0x3003,
0x3008, 0x3011,
0x3013, 0x301F,
0x3030, 0x3035,
0x3037, 0x3037,
0x303C, 0x303D,
0x3041, 0x3096,
0x3099, 0x30A0,
0x30FB, 0x30FC,
0xFE45, 0xFE46,
0xFF61, 0xFF65,
0xFF70, 0xFF70,
0xFF9E, 0xFF9F,
0x1B001, 0x1B11F,
0x1B132, 0x1B132,
0x1B150, 0x1B152,
0x1F200, 0x1F200,
},
varieties = {"Hentaigana"},
spaces = false,
}
m["Hluw"] = process_ranges{
"Anatolian hieroglyphic",
521323,
"logography, syllabary",
ranges = {
0x14400, 0x14646,
},
wikipedia_article = "Anatolian hieroglyphs",
}
m["Hmng"] = process_ranges{
"Pahawh Hmong",
365954,
"semisyllabary",
aliases = {"Hmong"},
ranges = {
0x16B00, 0x16B45,
0x16B50, 0x16B59,
0x16B5B, 0x16B61,
0x16B63, 0x16B77,
0x16B7D, 0x16B8F,
},
}
m["Hmnp"] = process_ranges{
"Nyiakeng Puachue Hmong",
33712499,
"alphabet",
ranges = {
0x1E100, 0x1E12C,
0x1E130, 0x1E13D,
0x1E140, 0x1E149,
0x1E14E, 0x1E14F,
},
}
m["Hung"] = process_ranges{
"Old Hungarian",
446224,
"alphabet",
aliases = {"Hungarian runic"},
ranges = {
0x10C80, 0x10CB2,
0x10CC0, 0x10CF2,
0x10CFA, 0x10CFF,
},
capitalized = true,
direction = "rtl",
}
m["Ibrnn"] = {
"Northeastern Iberian",
1113155,
"semisyllabary",
ietf_subtag = "Zzzz",
-- Not in Unicode
}
m["Ibrns"] = {
"Southeastern Iberian",
2305351,
"semisyllabary",
ietf_subtag = "Zzzz",
-- Not in Unicode
}
m["Image"] = {
-- To be used to avoid any formatting or link processing
"Image-rendered",
478798,
-- This should not have any characters listed
ietf_subtag = "Zyyy",
translit = false,
character_category = false, -- none
}
m["Inds"] = {
"Indus",
601388,
aliases = {"Harappan", "Indus Valley"},
}
m["Ipach"] = {
"International Phonetic Alphabet",
21204,
aliases = {"IPA"},
ietf_subtag = "Latn",
}
m["Ital"] = process_ranges{
"Old Italic",
4891256,
"alphabet",
ranges = {
0x10300, 0x10323,
0x1032D, 0x1032F,
},
translit = "Ital-translit",
}
m["Java"] = process_ranges{
"Javanese",
879704,
"abugida",
ranges = {
0xA980, 0xA9CD,
0xA9CF, 0xA9D9,
0xA9DE, 0xA9DF,
},
}
m["Jurc"] = {
"Jurchen",
912240,
"logography",
spaces = false,
}
m["Kali"] = process_ranges{
"Kayah Li",
4919239,
"abugida",
ranges = {
0xA900, 0xA92F,
},
}
m["Kana"] = process_ranges{
"Katakana",
82946,
"syllabary",
ranges = {
0x3001, 0x3003,
0x3008, 0x3011,
0x3013, 0x301F,
0x3030, 0x3035,
0x3037, 0x3037,
0x303C, 0x303D,
0x3099, 0x309C,
0x30A0, 0x30FF,
0x31F0, 0x31FF,
0x32D0, 0x32FE,
0x3300, 0x3357,
0xFE45, 0xFE46,
0xFF61, 0xFF9F,
0x1AFF0, 0x1AFF3,
0x1AFF5, 0x1AFFB,
0x1AFFD, 0x1AFFE,
0x1B000, 0x1B000,
0x1B120, 0x1B122,
0x1B155, 0x1B155,
0x1B164, 0x1B167,
},
spaces = false,
}
m["Kawi"] = process_ranges{
"Kawi",
975802,
"abugida",
ranges = {
0x11F00, 0x11F10,
0x11F12, 0x11F3A,
0x11F3E, 0x11F5A,
},
}
m["Khar"] = process_ranges{
"Kharoshthi",
1161266,
"abugida",
ranges = {
0x10A00, 0x10A03,
0x10A05, 0x10A06,
0x10A0C, 0x10A13,
0x10A15, 0x10A17,
0x10A19, 0x10A35,
0x10A38, 0x10A3A,
0x10A3F, 0x10A48,
0x10A50, 0x10A58,
},
direction = "rtl",
}
m["Khmr"] = process_ranges{
"Khmer",
1054190,
"abugida",
ranges = {
0x1780, 0x17DD,
0x17E0, 0x17E9,
0x17F0, 0x17F9,
0x19E0, 0x19FF,
},
spaces = false,
normalizationFixes = handle_normalization_fixes{
from = {"ឣ", "ឤ"},
to = {"អ", "អា"}
},
}
m["Khoj"] = process_ranges{
"Khojki",
1740656,
"abugida",
ranges = {
0x0AE6, 0x0AEF,
0xA830, 0xA839,
0x11200, 0x11211,
0x11213, 0x11241,
},
normalizationFixes = handle_normalization_fixes{
from = {"𑈀𑈬𑈱", "𑈀𑈬", "𑈀𑈱", "𑈀𑈳", "𑈁𑈱", "𑈆𑈬", "𑈬𑈰", "𑈬𑈱", "𑉀𑈮"},
to = {"𑈇", "𑈁", "𑈅", "𑈇", "𑈇", "𑈃", "𑈲", "𑈳", "𑈂"}
},
}
m["Khomt"] = {
"Khom Thai",
13023788,
"abugida",
-- Not in Unicode
}
m["Kitl"] = {
"Khitan large",
6401797,
"logography",
spaces = false,
}
m["Kits"] = process_ranges{
"Khitan small",
6401800,
"logography, syllabary",
ranges = {
0x16FE4, 0x16FE4,
0x18B00, 0x18CD5,
0x18CFF, 0x18CFF,
},
spaces = false,
}
m["Knda"] = process_ranges{
"Kannada",
839666,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0C80, 0x0C8C,
0x0C8E, 0x0C90,
0x0C92, 0x0CA8,
0x0CAA, 0x0CB3,
0x0CB5, 0x0CB9,
0x0CBC, 0x0CC4,
0x0CC6, 0x0CC8,
0x0CCA, 0x0CCD,
0x0CD5, 0x0CD6,
0x0CDD, 0x0CDE,
0x0CE0, 0x0CE3,
0x0CE6, 0x0CEF,
0x0CF1, 0x0CF3,
0x1CD0, 0x1CD0,
0x1CD2, 0x1CD3,
0x1CDA, 0x1CDA,
0x1CF2, 0x1CF2,
0x1CF4, 0x1CF4,
0xA830, 0xA835,
},
normalizationFixes = handle_normalization_fixes{
from = {"ಉಾ", "ಋಾ", "ಒೌ"},
to = {"ಊ", "ೠ", "ಔ"}
},
translit = "kn-translit",
}
m["Kpel"] = {
"Kpelle",
1586299,
"syllabary",
-- Not in Unicode
}
m["Krai"] = process_ranges{
"Kirat Rai",
123173834,
"abugida",
aliases = {"Rai", "Khambu Rai", "Rai Barṇamālā", "Kirat Khambu Rai"},
ranges = {
0x16D40, 0x16D79,
},
}
m["Kthi"] = process_ranges{
"Kaithi",
1253814,
"abugida",
ranges = {
0x0966, 0x096F,
0xA830, 0xA839,
0x11080, 0x110C2,
0x110CD, 0x110CD,
},
}
m["Kulit"] = {
"Kulitan",
6443044,
"abugida",
-- Not in Unicode
}
m["Lana"] = process_ranges{
"Tai Tham",
1314503,
"abugida",
aliases = {"Tham", "Tua Mueang", "Lanna"},
ranges = {
0x1A20, 0x1A5E,
0x1A60, 0x1A7C,
0x1A7F, 0x1A89,
0x1A90, 0x1A99,
0x1AA0, 0x1AAD,
},
spaces = false,
}
m["Laoo"] = process_ranges{
"Lao",
1815229,
"abugida",
ranges = {
0x0E81, 0x0E82,
0x0E84, 0x0E84,
0x0E86, 0x0E8A,
0x0E8C, 0x0EA3,
0x0EA5, 0x0EA5,
0x0EA7, 0x0EBD,
0x0EC0, 0x0EC4,
0x0EC6, 0x0EC6,
0x0EC8, 0x0ECE,
0x0ED0, 0x0ED9,
0x0EDC, 0x0EDF,
},
spaces = false,
}
m["Latn"] = process_ranges{
"Latin",
8229,
"alphabet",
aliases = {"Roman"},
ranges = {
0x0041, 0x005A,
0x0061, 0x007A,
0x00AA, 0x00AA,
0x00BA, 0x00BA,
0x00C0, 0x00D6,
0x00D8, 0x00F6,
0x00F8, 0x02B8,
0x02C0, 0x02C1,
0x02E0, 0x02E4,
0x0363, 0x036F,
0x0485, 0x0486,
0x0951, 0x0952,
0x10FB, 0x10FB,
0x1D00, 0x1D25,
0x1D2C, 0x1D5C,
0x1D62, 0x1D65,
0x1D6B, 0x1D77,
0x1D79, 0x1DBE,
0x1DF8, 0x1DF8,
0x1E00, 0x1EFF,
0x202F, 0x202F,
0x2071, 0x2071,
0x207F, 0x207F,
0x2090, 0x209C,
0x20F0, 0x20F0,
0x2100, 0x2125,
0x2128, 0x2128,
0x212A, 0x2134,
0x2139, 0x213B,
0x2141, 0x214E,
0x2160, 0x2188,
0x2C60, 0x2C7F,
0xA700, 0xA707,
0xA722, 0xA787,
0xA78B, 0xA7CD,
0xA7D0, 0xA7D1,
0xA7D3, 0xA7D3,
0xA7D5, 0xA7DC,
0xA7F2, 0xA7FF,
0xA92E, 0xA92E,
0xAB30, 0xAB5A,
0xAB5C, 0xAB64,
0xAB66, 0xAB69,
0xFB00, 0xFB06,
0xFF21, 0xFF3A,
0xFF41, 0xFF5A,
0x10780, 0x10785,
0x10787, 0x107B0,
0x107B2, 0x107BA,
0x1DF00, 0x1DF1E,
0x1DF25, 0x1DF2A,
},
varieties = {"Rumi", "Romaji", "Rōmaji", "Romaja"},
capitalized = true,
translit = false,
}
m["Latf"] = {
"Fraktur",
148443,
m["Latn"][3],
ranges = m["Latn"].ranges,
characters = m["Latn"].characters,
other_names = {"Blackletter"}, -- Blackletter is actually the parent "script"
capitalized = m["Latn"].capitalized,
translit = m["Latn"].translit,
parent = "Latn",
}
m["Latg"] = {
"Gaelic",
1432616,
m["Latn"][3],
ranges = m["Latn"].ranges,
characters = m["Latn"].characters,
other_names = {"Irish"},
capitalized = m["Latn"].capitalized,
translit = m["Latn"].translit,
parent = "Latn",
}
m["pjt-Latn"] = {
"Latin",
nil,
m["Latn"][3],
ranges = m["Latn"].ranges,
characters = m["Latn"].characters,
capitalized = m["Latn"].capitalized,
translit = m["Latn"].translit,
parent = "Latn",
}
m["Leke"] = {
"Leke",
19572613,
"abugida",
-- Not in Unicode
}
m["Lepc"] = process_ranges{
"Lepcha",
1481626,
"abugida",
aliases = {"Róng"},
ranges = {
0x1C00, 0x1C37,
0x1C3B, 0x1C49,
0x1C4D, 0x1C4F,
},
}
m["Limb"] = process_ranges{
"Limbu",
933796,
"abugida",
ranges = {
0x0965, 0x0965,
0x1900, 0x191E,
0x1920, 0x192B,
0x1930, 0x193B,
0x1940, 0x1940,
0x1944, 0x194F,
},
}
m["Lina"] = process_ranges{
"Linear A",
30972,
ranges = {
0x10107, 0x10133,
0x10600, 0x10736,
0x10740, 0x10755,
0x10760, 0x10767,
},
}
m["Linb"] = process_ranges{
"Linear B",
190102,
ranges = {
0x10000, 0x1000B,
0x1000D, 0x10026,
0x10028, 0x1003A,
0x1003C, 0x1003D,
0x1003F, 0x1004D,
0x10050, 0x1005D,
0x10080, 0x100FA,
0x10100, 0x10102,
0x10107, 0x10133,
0x10137, 0x1013F,
},
}
m["Lisu"] = process_ranges{
"Fraser",
1194621,
"alphabet",
aliases = {"Old Lisu", "Lisu"},
ranges = {
0x300A, 0x300B,
0xA4D0, 0xA4FF,
0x11FB0, 0x11FB0,
},
normalizationFixes = handle_normalization_fixes{
from = {"['’]", "[.ꓸ][.ꓸ]", "[.ꓸ][,ꓹ]"},
to = {"ʼ", "ꓺ", "ꓻ"}
},
translit = "Lisu-translit",
sort_key = {
from = {"𑾰"},
to = {"ꓬ" .. p[1]}
},
}
m["Loma"] = {
"Loma",
13023816,
"syllabary",
-- Not in Unicode
}
m["Lyci"] = process_ranges{
"Lycian",
913587,
"alphabet",
ranges = {
0x10280, 0x1029C,
},
}
m["Lydi"] = process_ranges{
"Lydian",
4261300,
"alphabet",
ranges = {
0x10920, 0x10939,
0x1093F, 0x1093F,
},
direction = "rtl",
}
m["Mahj"] = process_ranges{
"Mahajani",
6732850,
"abugida",
ranges = {
0x0964, 0x096F,
0xA830, 0xA839,
0x11150, 0x11176,
},
}
m["Maka"] = process_ranges{
"Makasar",
72947229,
"abugida",
aliases = {"Old Makasar"},
ranges = {
0x11EE0, 0x11EF8,
},
}
m["Mand"] = process_ranges{
"Mandaic",
1812130,
aliases = {"Mandaean"},
ranges = {
0x0640, 0x0640,
0x0840, 0x085B,
0x085E, 0x085E,
},
direction = "rtl",
}
m["Mani"] = process_ranges{
"Manichaean",
3544702,
"abjad",
ranges = {
0x0640, 0x0640,
0x10AC0, 0x10AE6,
0x10AEB, 0x10AF6,
},
direction = "rtl",
translit = "Mani-translit",
}
m["Marc"] = process_ranges{
"Marchen",
72403709,
"abugida",
ranges = {
0x11C70, 0x11C8F,
0x11C92, 0x11CA7,
0x11CA9, 0x11CB6,
},
}
m["Maya"] = process_ranges{
"Maya",
211248,
aliases = {"Maya hieroglyphic", "Mayan", "Mayan hieroglyphic"},
ranges = {
0x1D2E0, 0x1D2F3,
},
}
m["Medf"] = process_ranges{
"Medefaidrin",
1519764,
aliases = {"Oberi Okaime", "Oberi Ɔkaimɛ"},
ranges = {
0x16E40, 0x16E9A,
},
capitalized = true,
}
m["Mend"] = process_ranges{
"Mende",
951069,
aliases = {"Mende Kikakui"},
ranges = {
0x1E800, 0x1E8C4,
0x1E8C7, 0x1E8D6,
},
direction = "rtl",
}
m["Merc"] = process_ranges{
"Meroitic cursive",
73028124,
"abugida",
ranges = {
0x109A0, 0x109B7,
0x109BC, 0x109CF,
0x109D2, 0x109FF,
},
direction = "rtl",
}
m["Mero"] = process_ranges{
"Meroitic hieroglyphic",
73028623,
"abugida",
ranges = {
0x10980, 0x1099F,
},
direction = "rtl",
wikipedia_article = "Meroitic hieroglyphs",
}
m["Mlym"] = process_ranges{
"Malayalam",
1164129,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0D00, 0x0D0C,
0x0D0E, 0x0D10,
0x0D12, 0x0D44,
0x0D46, 0x0D48,
0x0D4A, 0x0D4F,
0x0D54, 0x0D63,
0x0D66, 0x0D7F,
0x1CDA, 0x1CDA,
0x1CF2, 0x1CF2,
0xA830, 0xA832,
},
normalizationFixes = handle_normalization_fixes{
from = {"ഇൗ", "ഉൗ", "എെ", "ഒാ", "ഒൗ", "ക്", "ണ്", "ന്റ", "ന്", "മ്", "യ്", "ര്", "ല്", "ള്", "ഴ്", "െെ", "ൻ്റ"},
to = {"ഈ", "ഊ", "ഐ", "ഓ", "ഔ", "ൿ", "ൺ", "ൻറ", "ൻ", "ൔ", "ൕ", "ർ", "ൽ", "ൾ", "ൖ", "ൈ", "ന്റ"}
},
translit = "ml-translit",
}
m["Modi"] = process_ranges{
"Modi",
1703713,
"abugida",
ranges = {
0xA830, 0xA839,
0x11600, 0x11644,
0x11650, 0x11659,
},
normalizationFixes = handle_normalization_fixes{
from = {"𑘀𑘹", "𑘀𑘺", "𑘁𑘹", "𑘁𑘺"},
to = {"𑘊", "𑘋", "𑘌", "𑘍"}
},
}
do
local Mong_displaytext = {
from = {"([ᠨ-ᡂᡸ])ᠶ([ᠨ-ᡂᡸ])", "([ᠠ-ᡂᡸ])ᠸ([^᠋ᠠ-ᠧ])", "([ᠠ-ᡂᡸ])ᠸ$"},
to = {"%1ᠢ%2", "%1ᠧ%2", "%1ᠧ"}
}
m["Mong"] = process_ranges{
"Mongolian",
1055705,
"alphabet",
aliases = {"Mongol bichig", "Hudum Mongol bichig"},
ranges = {
0x1800, 0x1805,
0x180A, 0x1819,
0x1820, 0x1842,
0x1878, 0x1878,
0x1880, 0x1897,
0x18A6, 0x18A6,
0x18A9, 0x18A9,
0x200C, 0x200D,
0x202F, 0x202F,
0x3001, 0x3002,
0x3008, 0x300B,
0x11660, 0x11668,
},
direction = "vertical-ltr",
display_text = Mong_displaytext,
strip_diacritics = Mong_displaytext,
translit = "Mong-translit",
}
m["mnc-Mong"] = process_ranges{
"Manchu",
122888,
m["Mong"][3],
ranges = {
0x1801, 0x1801,
0x1804, 0x1804,
0x1808, 0x180F,
0x1820, 0x1820,
0x1823, 0x1823,
0x1828, 0x182A,
0x182E, 0x1830,
0x1834, 0x1838,
0x183A, 0x183A,
0x185D, 0x185D,
0x185F, 0x1861,
0x1864, 0x1869,
0x186C, 0x1871,
0x1873, 0x1877,
0x1880, 0x1888,
0x188F, 0x188F,
0x189A, 0x18A5,
0x18A8, 0x18A8,
0x18AA, 0x18AA,
0x200C, 0x200D,
0x202F, 0x202F,
},
direction = "vertical-ltr",
parent = "Mong",
translit = "mnc-translit",
}
m["sjo-Mong"] = process_ranges{
"Xibe",
113624153,
m["Mong"][3],
aliases = {"Sibe"},
ranges = {
0x1804, 0x1804,
0x1807, 0x1807,
0x180A, 0x180F,
0x1820, 0x1820,
0x1823, 0x1823,
0x1828, 0x1828,
0x182A, 0x182A,
0x182E, 0x1830,
0x1834, 0x1838,
0x183A, 0x183A,
0x185D, 0x1872,
0x200C, 0x200D,
0x202F, 0x202F,
},
direction = "vertical-ltr",
parent = "mnc-Mong",
}
m["xwo-Mong"] = process_ranges{
"Clear Script",
529085,
m["Mong"][3],
aliases = {"Todo", "Todo bichig"},
ranges = {
0x1800, 0x1801,
0x1804, 0x1806,
0x180A, 0x1820,
0x1828, 0x1828,
0x182F, 0x1831,
0x1834, 0x1834,
0x1837, 0x1838,
0x183A, 0x183B,
0x1840, 0x1840,
0x1843, 0x185C,
0x1880, 0x1887,
0x1889, 0x188F,
0x1894, 0x1894,
0x1896, 0x1899,
0x18A7, 0x18A7,
0x200C, 0x200D,
0x202F, 0x202F,
0x11669, 0x1166C,
},
direction = "vertical-ltr",
parent = "Mong",
translit = "xwo-translit",
}
end
m["Moon"] = {
"Moon",
918391,
"alphabet",
aliases = {"Moon System of Embossed Reading", "Moon type", "Moon writing", "Moon alphabet", "Moon code"},
-- Not in Unicode
}
m["Morse"] = {
"Morse code",
79897,
ietf_subtag = "Zsym",
}
m["Mroo"] = process_ranges{
"Mru",
75919253,
aliases = {"Mro", "Mrung"},
ranges = {
0x16A40, 0x16A5E,
0x16A60, 0x16A69,
0x16A6E, 0x16A6F,
},
}
m["Mtei"] = process_ranges{
"Meitei Mayek",
2981413,
"abugida",
aliases = {"Meetei Mayek", "Manipuri"},
ranges = {
0xAAE0, 0xAAF6,
0xABC0, 0xABED,
0xABF0, 0xABF9,
},
}
m["Mult"] = process_ranges{
"Multani",
17047906,
"abugida",
ranges = {
0x0A66, 0x0A6F,
0x11280, 0x11286,
0x11288, 0x11288,
0x1128A, 0x1128D,
0x1128F, 0x1129D,
0x1129F, 0x112A9,
},
}
m["Music"] = process_ranges{
"musical notation",
233861,
"pictography",
ranges = {
0x2669, 0x266F,
0x1D100, 0x1D126,
0x1D129, 0x1D1EA,
},
ietf_subtag = "Zsym",
translit = false,
}
m["Mymr"] = process_ranges{
"Burmese",
43887939,
"abugida",
aliases = {"Myanmar"},
ranges = {
0x1000, 0x109F,
0xA92E, 0xA92E,
0xA9E0, 0xA9FE,
0xAA60, 0xAA7F,
0x116D0, 0x116E3,
},
spaces = false,
}
m["Nagm"] = process_ranges{
"Mundari Bani",
106917274,
"alphabet",
aliases = {"Nag Mundari"},
ranges = {
0x1E4D0, 0x1E4F9,
},
}
m["Nand"] = process_ranges{
"Nandinagari",
6963324,
"abugida",
ranges = {
0x0964, 0x0965,
0x0CE6, 0x0CEF,
0x1CE9, 0x1CE9,
0x1CF2, 0x1CF2,
0x1CFA, 0x1CFA,
0xA830, 0xA835,
0x119A0, 0x119A7,
0x119AA, 0x119D7,
0x119DA, 0x119E4,
},
}
m["Narb"] = process_ranges{
"Ancient North Arabian",
1472213,
"abjad",
aliases = {"Old North Arabian"},
ranges = {
0x10A80, 0x10A9F,
},
direction = "rtl",
translit = "Narb-translit",
}
m["Nbat"] = process_ranges{
"Nabataean",
855624,
"abjad",
aliases = {"Nabatean"},
ranges = {
0x10880, 0x1089E,
0x108A7, 0x108AF,
},
direction = "rtl",
}
m["Newa"] = process_ranges{
"Newa",
7237292,
"abugida",
aliases = {"Newar", "Newari", "Prachalit Nepal"},
ranges = {
0x11400, 0x1145B,
0x1145D, 0x11461,
},
}
m["Nkdb"] = {
"Dongba",
1190953,
"pictography",
aliases = {"Naxi Dongba", "Nakhi Dongba", "Tomba", "Tompa", "Mo-so"},
spaces = false,
-- Not in Unicode
}
m["Nkgb"] = {
"Geba",
731189,
"syllabary",
aliases = {"Nakhi Geba", "Naxi Geba"},
spaces = false,
-- Not in Unicode
}
m["Nkoo"] = process_ranges{
"N'Ko",
1062587,
"alphabet",
ranges = {
0x060C, 0x060C,
0x061B, 0x061B,
0x061F, 0x061F,
0x07C0, 0x07FA,
0x07FD, 0x07FF,
0xFD3E, 0xFD3F,
},
direction = "rtl",
}
m["None"] = {
"unspecified",
nil,
-- This should not have any characters listed
ietf_subtag = "Zyyy",
translit = false,
character_category = false, -- none
}
m["Nshu"] = process_ranges{
"Nüshu",
56436,
"syllabary",
aliases = {"Nushu"},
ranges = {
0x16FE1, 0x16FE1,
0x1B170, 0x1B2FB,
},
spaces = false,
}
m["Ogam"] = process_ranges{
"Ogham",
184661,
ranges = {
0x1680, 0x169C,
},
}
m["Olck"] = process_ranges{
"Ol Chiki",
201688,
aliases = {"Ol Chemetʼ", "Ol", "Santali"},
ranges = {
0x1C50, 0x1C7F,
},
}
m["Onao"] = process_ranges{
"Ol Onal",
108607084,
"alphabet",
ranges = {
0x0964, 0x0965,
0x1E5D0, 0x1E5FA,
0x1E5FF, 0x1E5FF,
},
}
m["Orkh"] = process_ranges{
"Old Turkic",
5058305,
aliases = {"Orkhon runic"},
ranges = {
0x10C00, 0x10C48,
},
direction = "rtl",
translit = "Orkh-translit",
}
m["Orya"] = process_ranges{
"Odia",
1760127,
"abugida",
aliases = {"Oriya"},
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0B01, 0x0B03,
0x0B05, 0x0B0C,
0x0B0F, 0x0B10,
0x0B13, 0x0B28,
0x0B2A, 0x0B30,
0x0B32, 0x0B33,
0x0B35, 0x0B39,
0x0B3C, 0x0B44,
0x0B47, 0x0B48,
0x0B4B, 0x0B4D,
0x0B55, 0x0B57,
0x0B5C, 0x0B5D,
0x0B5F, 0x0B63,
0x0B66, 0x0B77,
0x1CDA, 0x1CDA,
0x1CF2, 0x1CF2,
},
normalizationFixes = handle_normalization_fixes{
from = {"ଅା", "ଏୗ", "ଓୗ"},
to = {"ଆ", "ଐ", "ଔ"}
},
}
m["Osge"] = process_ranges{
"Osage",
7105529,
ranges = {
0x104B0, 0x104D3,
0x104D8, 0x104FB,
},
capitalized = true,
}
m["Osma"] = process_ranges{
"Osmanya",
1377866,
ranges = {
0x10480, 0x1049D,
0x104A0, 0x104A9,
},
}
m["Ougr"] = process_ranges{
"Old Uyghur",
1998938,
"abjad, alphabet",
ranges = {
0x0640, 0x0640,
0x10AF2, 0x10AF2,
0x10F70, 0x10F89,
},
-- This should ideally be "vertical-ltr", but getting the CSS right is tricky because it's right-to-left horizontally, but left-to-right vertically. Currently, displaying it vertically causes it to display bottom-to-top.
direction = "rtl",
}
m["Palm"] = process_ranges{
"Palmyrene",
17538100,
ranges = {
0x10860, 0x1087F,
},
direction = "rtl",
}
m["Pauc"] = process_ranges{
"Pau Cin Hau",
25339852,
ranges = {
0x11AC0, 0x11AF8,
},
}
m["Pcun"] = {
"Proto-Cuneiform",
1650699,
"pictography",
-- Not in Unicode
}
m["Pelm"] = {
"Proto-Elamite",
56305763,
"pictography",
-- Not in Unicode
}
m["Perm"] = process_ranges{
"Old Permic",
147899,
ranges = {
0x0483, 0x0483,
0x10350, 0x1037A,
},
}
m["Phag"] = process_ranges{
"Phags-pa",
822836,
"abugida",
ranges = {
0x1802, 0x1803,
0x1805, 0x1805,
0x200C, 0x200D,
0x202F, 0x202F,
0x3002, 0x3002,
0xA840, 0xA877,
},
direction = "vertical-ltr",
}
m["Phli"] = process_ranges{
"Inscriptional Pahlavi",
24089793,
"abjad",
ranges = {
0x10B60, 0x10B72,
0x10B78, 0x10B7F,
},
direction = "rtl",
}
m["Phlp"] = process_ranges{
"Psalter Pahlavi",
7253954,
"abjad",
ranges = {
0x0640, 0x0640,
0x10B80, 0x10B91,
0x10B99, 0x10B9C,
0x10BA9, 0x10BAF,
},
direction = "rtl",
}
m["Phlv"] = {
"Book Pahlavi",
72403118,
"abjad",
direction = "rtl",
wikipedia_article = "Pahlavi scripts#Book Pahlavi",
-- Not in Unicode
}
m["Phnx"] = process_ranges{
"Phoenician",
26752,
"abjad",
ranges = {
0x10900, 0x1091B,
0x1091F, 0x1091F,
},
direction = "rtl",
translit = "Phnx-translit",
}
m["Plrd"] = process_ranges{
"Pollard",
601734,
"abugida",
aliases = {"Miao"},
ranges = {
0x16F00, 0x16F4A,
0x16F4F, 0x16F87,
0x16F8F, 0x16F9F,
},
}
m["Prti"] = process_ranges{
"Inscriptional Parthian",
13023804,
ranges = {
0x10B40, 0x10B55,
0x10B58, 0x10B5F,
},
direction = "rtl",
}
m["Psin"] = {
"Proto-Sinaitic",
1065250,
"abjad",
direction = "rtl",
-- Not in Unicode
}
m["Ranj"] = {
"Ranjana",
2385276,
"abugida",
-- Not in Unicode
}
m["Rjng"] = process_ranges{
"Rejang",
2007960,
"abugida",
ranges = {
0xA930, 0xA953,
0xA95F, 0xA95F,
},
}
m["Rohg"] = process_ranges{
"Hanifi Rohingya",
21028705,
"alphabet",
ranges = {
0x060C, 0x060C,
0x061B, 0x061B,
0x061F, 0x061F,
0x0640, 0x0640,
0x06D4, 0x06D4,
0x10D00, 0x10D27,
0x10D30, 0x10D39,
},
direction = "rtl",
}
m["Roro"] = {
"Rongorongo",
209764,
-- Not in Unicode
}
m["Rumin"] = process_ranges{
"Rumi numerals",
nil,
ranges = {
0x10E60, 0x10E7E,
},
ietf_subtag = "Arab",
}
m["Runr"] = process_ranges{
"Runic",
82996,
"alphabet",
ranges = {
0x16A0, 0x16EA,
0x16EE, 0x16F8,
},
}
do
local Samr_stripdiacritics = {
remove_diacritics = c.CGJ .. u(0x0816) .. "-" .. u(0x082D),
}
m["Samr"] = process_ranges{
"Samaritan",
1550930,
"abjad",
ranges = {
0x0800, 0x082D,
0x0830, 0x083E,
},
direction = "rtl",
strip_diacritics = Samr_stripdiacritics,
sort_key = Samr_stripdiacritics,
}
end
m["Sarb"] = process_ranges{
"Ancient South Arabian",
446074,
"abjad",
aliases = {"Old South Arabian"},
ranges = {
0x10A60, 0x10A7F,
},
direction = "rtl",
translit = "Sarb-translit",
}
m["Saur"] = process_ranges{
"Saurashtra",
3535165,
"abugida",
ranges = {
0xA880, 0xA8C5,
0xA8CE, 0xA8D9,
},
}
m["Semap"] = {
"flag semaphore",
250796,
"pictography",
ietf_subtag = "Zsym",
}
m["Sgnw"] = process_ranges{
"SignWriting",
1497335,
"pictography",
aliases = {"Sutton SignWriting"},
ranges = {
0x1D800, 0x1DA8B,
0x1DA9B, 0x1DA9F,
0x1DAA1, 0x1DAAF,
},
translit = false,
}
m["Shaw"] = process_ranges{
"Shavian",
1970098,
aliases = {"Shaw"},
ranges = {
0x10450, 0x1047F,
},
}
m["Shrd"] = process_ranges{
"Sharada",
2047117,
"abugida",
ranges = {
0x0951, 0x0951,
0x1CD7, 0x1CD7,
0x1CD9, 0x1CD9,
0x1CDC, 0x1CDD,
0x1CE0, 0x1CE0,
0xA830, 0xA835,
0xA838, 0xA838,
0x11180, 0x111DF,
},
translit = "Shrd-translit",
}
m["Shui"] = {
"Sui",
752854,
"logography",
spaces = false,
-- Not in Unicode
}
m["Sidd"] = process_ranges{
"Siddham",
250379,
"abugida",
ranges = {
0x11580, 0x115B5,
0x115B8, 0x115DD,
},
translit = "Sidd-translit",
}
m["Sidt"] = {
"Sidetic",
36659,
"alphabet",
direction = "rtl",
-- Not in Unicode
}
m["Sind"] = process_ranges{
"Khudabadi",
6402810,
"abugida",
aliases = {"Khudawadi"},
ranges = {
0x0964, 0x0965,
0xA830, 0xA839,
0x112B0, 0x112EA,
0x112F0, 0x112F9,
},
normalizationFixes = handle_normalization_fixes{
from = {"𑊰𑋠", "𑊰𑋥", "𑊰𑋦", "𑊰𑋧", "𑊰𑋨"},
to = {"𑊱", "𑊶", "𑊷", "𑊸", "𑊹"}
},
}
m["Sinh"] = process_ranges{
"Sinhalese",
1574992,
"abugida",
aliases = {"Sinhala"},
ranges = {
0x0964, 0x0965,
0x0D81, 0x0D83,
0x0D85, 0x0D96,
0x0D9A, 0x0DB1,
0x0DB3, 0x0DBB,
0x0DBD, 0x0DBD,
0x0DC0, 0x0DC6,
0x0DCA, 0x0DCA,
0x0DCF, 0x0DD4,
0x0DD6, 0x0DD6,
0x0DD8, 0x0DDF,
0x0DE6, 0x0DEF,
0x0DF2, 0x0DF4,
0x1CF2, 0x1CF2,
0x111E1, 0x111F4,
},
normalizationFixes = handle_normalization_fixes{
from = {"අා", "අැ", "අෑ", "උෟ", "ඍෘ", "ඏෟ", "එ්", "එෙ", "ඔෟ", "ෘෘ"},
to = {"ආ", "ඇ", "ඈ", "ඌ", "ඎ", "ඐ", "ඒ", "ඓ", "ඖ", "ෲ"}
},
}
m["Sogd"] = process_ranges{
"Sogdian",
578359,
"abjad",
ranges = {
0x0640, 0x0640,
0x10F30, 0x10F59,
},
direction = "rtl",
}
m["Sogo"] = process_ranges{
"Old Sogdian",
72403254,
"abjad",
ranges = {
0x10F00, 0x10F27,
},
direction = "rtl",
}
m["Sora"] = process_ranges{
"Sorang Sompeng",
7563292,
aliases = {"Sora Sompeng"},
ranges = {
0x110D0, 0x110E8,
0x110F0, 0x110F9,
},
}
m["Soyo"] = process_ranges{
"Soyombo",
8009382,
"abugida",
ranges = {
0x11A50, 0x11AA2,
},
}
m["Sund"] = process_ranges{
"Sundanese",
51589,
"abugida",
ranges = {
0x1B80, 0x1BBF,
0x1CC0, 0x1CC7,
},
}
m["Sunu"] = process_ranges{
"Sunuwar",
109984965,
"alphabet",
ranges = {
0x11BC0, 0x11BE1,
0x11BF0, 0x11BF9,
},
}
m["Sylo"] = process_ranges{
"Sylheti Nagri",
144128,
"abugida",
aliases = {"Sylheti Nāgarī", "Syloti Nagri"},
ranges = {
0x0964, 0x0965,
0x09E6, 0x09EF,
0xA800, 0xA82C,
},
}
m["Syrc"] = process_ranges{
"Syriac",
26567,
"abjad", -- more precisely, impure abjad
ranges = {
0x060C, 0x060C,
0x061B, 0x061C,
0x061F, 0x061F,
0x0640, 0x0640,
0x064B, 0x0655,
0x0670, 0x0670,
0x0700, 0x070D,
0x070F, 0x074A,
0x074D, 0x074F,
0x0860, 0x086A,
0x1DF8, 0x1DF8,
0x1DFA, 0x1DFA,
},
direction = "rtl",
}
-- Syre, Syrj, Syrn are apparently subsumed into Syrc; discuss if this causes issues
m["Tagb"] = process_ranges{
"Tagbanwa",
977444,
"abugida",
ranges = {
0x1735, 0x1736,
0x1760, 0x176C,
0x176E, 0x1770,
0x1772, 0x1773,
},
}
m["Takr"] = process_ranges{
"Takri",
759202,
"abugida",
ranges = {
0x0964, 0x0965,
0xA830, 0xA839,
0x11680, 0x116B9,
0x116C0, 0x116C9,
},
normalizationFixes = handle_normalization_fixes{
from = {"𑚀𑚭", "𑚀𑚴", "𑚀𑚵", "𑚆𑚲"},
to = {"𑚁", "𑚈", "𑚉", "𑚇"}
},
}
m["Tale"] = process_ranges{
"Tai Nüa",
2566326,
"abugida",
aliases = {"Tai Nuea", "New Tai Nüa", "New Tai Nuea", "Dehong Dai", "Tai Dehong", "Tai Le"},
ranges = {
0x1040, 0x1049,
0x1950, 0x196D,
0x1970, 0x1974,
},
spaces = false,
}
m["Talu"] = process_ranges{
"New Tai Lue",
3498863,
"abugida",
ranges = {
0x1980, 0x19AB,
0x19B0, 0x19C9,
0x19D0, 0x19DA,
0x19DE, 0x19DF,
},
spaces = false,
}
m["Taml"] = process_ranges{
"Tamil",
26803,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0B82, 0x0B83,
0x0B85, 0x0B8A,
0x0B8E, 0x0B90,
0x0B92, 0x0B95,
0x0B99, 0x0B9A,
0x0B9C, 0x0B9C,
0x0B9E, 0x0B9F,
0x0BA3, 0x0BA4,
0x0BA8, 0x0BAA,
0x0BAE, 0x0BB9,
0x0BBE, 0x0BC2,
0x0BC6, 0x0BC8,
0x0BCA, 0x0BCD,
0x0BD0, 0x0BD0,
0x0BD7, 0x0BD7,
0x0BE6, 0x0BFA,
0x1CDA, 0x1CDA,
0xA8F3, 0xA8F3,
0x11301, 0x11301,
0x11303, 0x11303,
0x1133B, 0x1133C,
0x11FC0, 0x11FF1,
0x11FFF, 0x11FFF,
},
normalizationFixes = handle_normalization_fixes{
from = {"அூ", "ஸ்ரீ"},
to = {"ஆ", "ஶ்ரீ"}
},
}
m["Tang"] = process_ranges{
"Tangut",
1373610,
"logography, syllabary",
ranges = {
0x31EF, 0x31EF,
0x16FE0, 0x16FE0,
0x17000, 0x187F7,
0x18800, 0x18AFF,
0x18D00, 0x18D08,
},
spaces = false,
translit = "txg-translit",
}
m["Tavt"] = process_ranges{
"Tai Viet",
11818517,
"abugida",
ranges = {
0xAA80, 0xAAC2,
0xAADB, 0xAADF,
},
spaces = false,
}
m["Tayo"] = process_ranges{
"Lai Tay",
16306701,
"abugida",
aliases = {"Tai Yo"},
direction = "vertical-rtl",
ranges = {
0x1E6C0, 0x1E6DE,
0x1E6E0, 0x1E6F5,
0x1E6FE, 0x1E6FF,
},
spaces = false,
}
m["Telu"] = process_ranges{
"Telugu",
570450,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x0C00, 0x0C0C,
0x0C0E, 0x0C10,
0x0C12, 0x0C28,
0x0C2A, 0x0C39,
0x0C3C, 0x0C44,
0x0C46, 0x0C48,
0x0C4A, 0x0C4D,
0x0C55, 0x0C56,
0x0C58, 0x0C5A,
0x0C5D, 0x0C5D,
0x0C60, 0x0C63,
0x0C66, 0x0C6F,
0x0C77, 0x0C7F,
0x1CDA, 0x1CDA,
0x1CF2, 0x1CF2,
},
normalizationFixes = handle_normalization_fixes{
from = {"ఒౌ", "ఒౕ", "ిౕ", "ెౕ", "ొౕ"},
to = {"ఔ", "ఓ", "ీ", "ే", "ో"}
},
}
m["Teng"] = {
"Tengwar",
473725,
}
m["Tfng"] = process_ranges{
"Tifinagh",
208503,
"abjad, alphabet",
ranges = {
0x2D30, 0x2D67,
0x2D6F, 0x2D70,
0x2D7F, 0x2D7F,
},
other_names = {"Libyco-Berber", "Berber"}, -- per Wikipedia, Libyco-Berber is the parent
}
m["Tglg"] = process_ranges{
"Baybayin",
812124,
"abugida",
aliases = {"Tagalog"},
varieties = {"Kur-itan"},
ranges = {
0x1700, 0x1715,
0x171F, 0x171F,
0x1735, 0x1736,
},
}
m["Thaa"] = process_ranges{
"Thaana",
877906,
"abugida",
ranges = {
0x060C, 0x060C,
0x061B, 0x061C,
0x061F, 0x061F,
0x0660, 0x0669,
0x0780, 0x07B1,
0xFDF2, 0xFDF2,
0xFDFD, 0xFDFD,
},
direction = "rtl",
}
m["Thai"] = process_ranges{
"Thai",
236376,
"abugida",
ranges = {
0x0E01, 0x0E3A,
0x0E40, 0x0E5B,
},
spaces = false,
}
do
local Tibt_displaytext = {
from = {"ༀ", "༌", "།།", "༚༚", "༚༝", "༝༚", "༝༝", "ཷ", "ཹ", "ེེ", "ོོ"},
to = {"ཨོཾ", "་", "༎", "༛", "༟", "࿎", "༞", "ྲཱྀ", "ླཱྀ", "ཻ", "ཽ"}
}
m["Tibt"] = process_ranges{
"Tibetan",
46861,
"abugida",
ranges = {
0x0F00, 0x0F47,
0x0F49, 0x0F6C,
0x0F71, 0x0F97,
0x0F99, 0x0FBC,
0x0FBE, 0x0FCC,
0x0FCE, 0x0FD4,
0x0FD9, 0x0FDA,
0x3008, 0x300B,
},
normalizationFixes = handle_normalization_fixes{
combiningClasses = {["༹"] = 1},
from = {"ཷ", "ཹ"},
to = {"ྲཱྀ", "ླཱྀ"}
},
display_text = Tibt_displaytext,
strip_diacritics = Tibt_displaytext,
sort_key = "Tibt-sortkey",
translit = "Tibt-translit",
}
m["sit-tam-Tibt"] = {
"Tamyig",
109875213,
m["Tibt"][3],
-- There is no inheritance of properties currently implemented for scripts. Per [[User:Theknightwho]], this
-- is because it's tricky to do since there are several types of child scripts: those that are mere display
-- variants (like fa-Arab, kk-Arab), which should be eliminated in favor of CSS language selectors to
-- handle the font differences; those that are genuinely different scripts that happen to share the same
-- Unicode codepoints but have mostly different properties (e.g. Manchu vs. Mongolian); and those that are
-- somewhere in between (like Tamyig vs. Tibetan). As a result, we currently have to manually specify
-- which properties we want inherited as follows.
ranges = m["Tibt"].ranges,
characters = m["Tibt"].characters,
parent = "Tibt",
normalizationFixes = m["Tibt"].normalizationFixes,
display_text = m["Tibt"].display_text,
strip_diacritics = m["Tibt"].strip_diacritics,
sort_key = m["Tibt"].sort_key,
translit = m["Tibt"].translit,
}
end
m["Tirh"] = process_ranges{
"Tirhuta",
1765752,
"abugida",
ranges = {
0x0951, 0x0952,
0x0964, 0x0965,
0x1CF2, 0x1CF2,
0xA830, 0xA839,
0x11480, 0x114C7,
0x114D0, 0x114D9,
},
normalizationFixes = handle_normalization_fixes{
from = {"𑒁𑒰", "𑒋𑒺", "𑒍𑒺", "𑒪𑒵", "𑒪𑒶"},
to = {"𑒂", "𑒌", "𑒎", "𑒉", "𑒊"}
},
}
m["Tnsa"] = process_ranges{
"Tangsa",
105576311,
"alphabet",
ranges = {
0x16A70, 0x16ABE,
0x16AC0, 0x16AC9,
},
}
m["Todr"] = process_ranges{
"Todhri",
10274731,
"alphabet",
direction = "rtl",
ranges = {
0x105C0, 0x105F3,
},
}
m["Tols"] = {
"Tolong Siki",
4459822,
"alphabet",
-- Not in Unicode
}
m["Toto"] = process_ranges{
"Toto",
104837516,
"abugida",
ranges = {
0x1E290, 0x1E2AE,
},
}
m["Tutg"] = process_ranges{
"Tigalari",
2604990,
"abugida",
aliases = {"Tulu"},
ranges = {
0x1CF2, 0x1CF2,
0x1CF4, 0x1CF4,
0xA8F1, 0xA8F1,
0x11380, 0x11389,
0x1138B, 0x1138B,
0x1138E, 0x1138E,
0x11390, 0x113B5,
0x113B7, 0x113C0,
0x113C2, 0x113C2,
0x113C5, 0x113C5,
0x113C7, 0x113CA,
0x113CC, 0x113D5,
0x113D7, 0x113D8,
0x113E1, 0x113E2,
},
}
m["Ugar"] = process_ranges{
"Ugaritic",
332652,
"abjad",
ranges = {
0x10380, 0x1039D,
0x1039F, 0x1039F,
},
}
m["Vaii"] = process_ranges{
"Vai",
523078,
"syllabary",
ranges = {
0xA500, 0xA62B,
},
}
m["Visp"] = {
"Visible Speech",
1303365,
"alphabet",
-- Not in Unicode
}
m["Vith"] = process_ranges{
"Vithkuqi",
3301993,
"alphabet",
ranges = {
0x10570, 0x1057A,
0x1057C, 0x1058A,
0x1058C, 0x10592,
0x10594, 0x10595,
0x10597, 0x105A1,
0x105A3, 0x105B1,
0x105B3, 0x105B9,
0x105BB, 0x105BC,
},
capitalized = true,
}
m["Wara"] = process_ranges{
"Varang Kshiti",
79199,
aliases = {"Warang Citi"},
ranges = {
0x118A0, 0x118F2,
0x118FF, 0x118FF,
},
capitalized = true,
}
m["Wcho"] = process_ranges{
"Wancho",
33713728,
"alphabet",
ranges = {
0x1E2C0, 0x1E2F9,
0x1E2FF, 0x1E2FF,
},
}
m["Wole"] = {
"Woleai",
6643710,
"syllabary",
-- Not in Unicode
}
m["Xpeo"] = process_ranges{
"Old Persian",
1471822,
ranges = {
0x103A0, 0x103C3,
0x103C8, 0x103D5,
},
}
m["Xsux"] = process_ranges{
"Cuneiform",
401,
aliases = {"Sumero-Akkadian Cuneiform"},
ranges = {
0x12000, 0x12399,
0x12400, 0x1246E,
0x12470, 0x12474,
0x12480, 0x12543,
},
}
m["Yezi"] = process_ranges{
"Yezidi",
13175481,
"alphabet",
ranges = {
0x060C, 0x060C,
0x061B, 0x061B,
0x061F, 0x061F,
0x0660, 0x0669,
0x10E80, 0x10EA9,
0x10EAB, 0x10EAD,
0x10EB0, 0x10EB1,
},
direction = "rtl",
}
m["Yiii"] = process_ranges{
"Yi",
1197646,
"syllabary",
ranges = {
0x3001, 0x3002,
0x3008, 0x3011,
0x3014, 0x301B,
0x30FB, 0x30FB,
0xA000, 0xA48C,
0xA490, 0xA4C6,
0xFF61, 0xFF65,
},
}
m["Zanb"] = process_ranges{
"Zanabazar Square",
50809208,
"abugida",
ranges = {
0x11A00, 0x11A47,
},
}
m["Zmth"] = process_ranges{
"mathematical notation",
1140046,
ranges = {
0x00AC, 0x00AC,
0x00B1, 0x00B1,
0x00D7, 0x00D7,
0x00F7, 0x00F7,
0x03D0, 0x03D2,
0x03D5, 0x03D5,
0x03F0, 0x03F1,
0x03F4, 0x03F6,
0x0606, 0x0608,
0x2016, 0x2016,
0x2032, 0x2034,
0x2040, 0x2040,
0x2044, 0x2044,
0x2052, 0x2052,
0x205F, 0x205F,
0x2061, 0x2064,
0x207A, 0x207E,
0x208A, 0x208E,
0x20D0, 0x20DC,
0x20E1, 0x20E1,
0x20E5, 0x20E6,
0x20EB, 0x20EF,
0x2102, 0x2102,
0x2107, 0x2107,
0x210A, 0x2113,
0x2115, 0x2115,
0x2118, 0x211D,
0x2124, 0x2124,
0x2128, 0x2129,
0x212C, 0x212D,
0x212F, 0x2131,
0x2133, 0x2138,
0x213C, 0x2149,
0x214B, 0x214B,
0x2190, 0x21A7,
0x21A9, 0x21AE,
0x21B0, 0x21B1,
0x21B6, 0x21B7,
0x21BC, 0x21DB,
0x21DD, 0x21DD,
0x21E4, 0x21E5,
0x21F4, 0x22FF,
0x2308, 0x230B,
0x2320, 0x2321,
0x237C, 0x237C,
0x239B, 0x23B5,
0x23B7, 0x23B7,
0x23D0, 0x23D0,
0x23DC, 0x23E2,
0x25A0, 0x25A1,
0x25AE, 0x25B7,
0x25BC, 0x25C1,
0x25C6, 0x25C7,
0x25CA, 0x25CB,
0x25CF, 0x25D3,
0x25E2, 0x25E2,
0x25E4, 0x25E4,
0x25E7, 0x25EC,
0x25F8, 0x25FF,
0x2605, 0x2606,
0x2640, 0x2640,
0x2642, 0x2642,
0x2660, 0x2663,
0x266D, 0x266F,
0x27C0, 0x27FF,
0x2900, 0x2AFF,
0x2B30, 0x2B44,
0x2B47, 0x2B4C,
0xFB29, 0xFB29,
0xFE61, 0xFE66,
0xFE68, 0xFE68,
0xFF0B, 0xFF0B,
0xFF1C, 0xFF1E,
0xFF3C, 0xFF3C,
0xFF3E, 0xFF3E,
0xFF5C, 0xFF5C,
0xFF5E, 0xFF5E,
0xFFE2, 0xFFE2,
0xFFE9, 0xFFEC,
0x1D400, 0x1D454,
0x1D456, 0x1D49C,
0x1D49E, 0x1D49F,
0x1D4A2, 0x1D4A2,
0x1D4A5, 0x1D4A6,
0x1D4A9, 0x1D4AC,
0x1D4AE, 0x1D4B9,
0x1D4BB, 0x1D4BB,
0x1D4BD, 0x1D4C3,
0x1D4C5, 0x1D505,
0x1D507, 0x1D50A,
0x1D50D, 0x1D514,
0x1D516, 0x1D51C,
0x1D51E, 0x1D539,
0x1D53B, 0x1D53E,
0x1D540, 0x1D544,
0x1D546, 0x1D546,
0x1D54A, 0x1D550,
0x1D552, 0x1D6A5,
0x1D6A8, 0x1D7CB,
0x1D7CE, 0x1D7FF,
0x1EE00, 0x1EE03,
0x1EE05, 0x1EE1F,
0x1EE21, 0x1EE22,
0x1EE24, 0x1EE24,
0x1EE27, 0x1EE27,
0x1EE29, 0x1EE32,
0x1EE34, 0x1EE37,
0x1EE39, 0x1EE39,
0x1EE3B, 0x1EE3B,
0x1EE42, 0x1EE42,
0x1EE47, 0x1EE47,
0x1EE49, 0x1EE49,
0x1EE4B, 0x1EE4B,
0x1EE4D, 0x1EE4F,
0x1EE51, 0x1EE52,
0x1EE54, 0x1EE54,
0x1EE57, 0x1EE57,
0x1EE59, 0x1EE59,
0x1EE5B, 0x1EE5B,
0x1EE5D, 0x1EE5D,
0x1EE5F, 0x1EE5F,
0x1EE61, 0x1EE62,
0x1EE64, 0x1EE64,
0x1EE67, 0x1EE6A,
0x1EE6C, 0x1EE72,
0x1EE74, 0x1EE77,
0x1EE79, 0x1EE7C,
0x1EE7E, 0x1EE7E,
0x1EE80, 0x1EE89,
0x1EE8B, 0x1EE9B,
0x1EEA1, 0x1EEA3,
0x1EEA5, 0x1EEA9,
0x1EEAB, 0x1EEBB,
0x1EEF0, 0x1EEF1,
},
translit = false,
}
m["Zname"] = process_ranges{
"Znamenny musical notation",
965834,
"pictography",
ranges = {
0x1CF00, 0x1CF2D,
0x1CF30, 0x1CF46,
0x1CF50, 0x1CFC3,
},
ietf_subtag = "Zsym",
translit = false,
}
m["Zsym"] = process_ranges{
"symbolic",
80071,
"pictography",
ranges = {
0x20DD, 0x20E0,
0x20E2, 0x20E4,
0x20E7, 0x20EA,
0x20F0, 0x20F0,
0x2100, 0x2101,
0x2103, 0x2106,
0x2108, 0x2109,
0x2114, 0x2114,
0x2116, 0x2117,
0x211E, 0x2123,
0x2125, 0x2127,
0x212A, 0x212B,
0x212E, 0x212E,
0x2132, 0x2132,
0x2139, 0x213B,
0x214A, 0x214A,
0x214C, 0x214F,
0x21A8, 0x21A8,
0x21AF, 0x21AF,
0x21B2, 0x21B5,
0x21B8, 0x21BB,
0x21DC, 0x21DC,
0x21DE, 0x21E3,
0x21E6, 0x21F3,
0x2300, 0x2307,
0x230C, 0x231F,
0x2322, 0x237B,
0x237D, 0x239A,
0x23B6, 0x23B6,
0x23B8, 0x23CF,
0x23D1, 0x23DB,
0x23E3, 0x23FF,
0x2500, 0x259F,
0x25A2, 0x25AD,
0x25B8, 0x25BB,
0x25C2, 0x25C5,
0x25C8, 0x25C9,
0x25CC, 0x25CE,
0x25D4, 0x25E1,
0x25E3, 0x25E3,
0x25E5, 0x25E6,
0x25ED, 0x25F7,
0x2600, 0x2604,
0x2607, 0x263F,
0x2641, 0x2641,
0x2643, 0x265F,
0x2664, 0x266C,
0x2670, 0x27BF,
0x2B00, 0x2B2F,
0x2B45, 0x2B46,
0x2B4D, 0x2B73,
0x2B76, 0x2B95,
0x2B97, 0x2BFF,
0x4DC0, 0x4DFF,
0x1F000, 0x1F02B,
0x1F030, 0x1F093,
0x1F0A0, 0x1F0AE,
0x1F0B1, 0x1F0BF,
0x1F0C1, 0x1F0CF,
0x1F0D1, 0x1F0F5,
0x1F300, 0x1F6D7,
0x1F6DC, 0x1F6EC,
0x1F6F0, 0x1F6FC,
0x1F700, 0x1F776,
0x1F77B, 0x1F7D9,
0x1F7E0, 0x1F7EB,
0x1F7F0, 0x1F7F0,
0x1F800, 0x1F80B,
0x1F810, 0x1F847,
0x1F850, 0x1F859,
0x1F860, 0x1F887,
0x1F890, 0x1F8AD,
0x1F8B0, 0x1F8B1,
0x1F900, 0x1FA53,
0x1FA60, 0x1FA6D,
0x1FA70, 0x1FA7C,
0x1FA80, 0x1FA88,
0x1FA90, 0x1FABD,
0x1FABF, 0x1FAC5,
0x1FACE, 0x1FADB,
0x1FAE0, 0x1FAE8,
0x1FAF0, 0x1FAF8,
0x1FB00, 0x1FB92,
0x1FB94, 0x1FBCA,
0x1FBF0, 0x1FBF9,
},
translit = false,
character_category = false, -- none
}
m["Zyyy"] = {
"undetermined",
104839687,
-- This should not have any characters listed, probably
translit = false,
character_category = false, -- none
}
m["Zzzz"] = {
"uncoded",
104839675,
-- This should not have any characters listed
translit = false,
character_category = false, -- none
}
-- These should be defined after the scripts they are composed of.
m["Hrkt"] = process_ranges{
"Kana",
187659,
"syllabary",
aliases = {"Japanese syllabaries"},
ranges = union(
m["Hira"].ranges,
m["Kana"].ranges
),
spaces = false,
}
m["Jpan"] = process_ranges{
"Japanese",
190502,
"logography, syllabary",
ranges = union(
m["Hrkt"].ranges,
m["Hani"].ranges,
m["Latn"].ranges
),
spaces = false,
sort_by_scraping = true,
}
m["Kore"] = process_ranges{
"Korean",
711797,
"logography, syllabary",
ranges = union(
m["Hang"].ranges,
m["Hani"].ranges,
m["Latn"].ranges
),
-- `漢字(한자)`→`漢字`
-- `가-나-다`→`가나다`, `가--나--다`→`가-나-다`
-- `온돌(溫突/溫堗)`→`온돌` ([[ondol]])
strip_diacritics = {
remove_diacritics = u(0x302E) .. u(0x302F),
from = {"([" .. m["Hani"].characters .. "])%(.-%)", "^%-", "%-$", "%-(%-?)", "\1", "%([" .. m["Hani"].characters .. "/]+%)"},
to = {"%1", "\1", "\1", "%1", "-"}
}
}
return require("Module:languages").finalizeData(m, "script")
bc326cq4wluykbtp0ojm2h6el3ira4g
Teamplaid:documentation/documentation
10
4326
86229
75495
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/documentation]] gu [[Teamplaid:documentation/documentation]]
75495
wikitext
text/x-wiki
{{Template shortcut|Doc}}
{{pp-semi-indef}}
{{Distinguish|Teamplaid:Documentation subpage}}
{{Documentation subpage}}
{{Stack|{{Lua|Mòideal:documentation}}}}
<!---- Categories where indicated at the bottom of this page, please; interwikis at Wikidata ---->
This is the '''{{Tlf|Documentation}}''' template used on almost every {{enUici|Help:A quick guide to templates|template page}} to contain that template's documented instructions and information, including {{enUici|Wikipedia:TemplateData|<templatedata>}}.
For detailed instructions on how and when to use this template, see {{enUici|Wikipedia:Template documentation}} (shortcut: {{enUici|WP:TDOC}}).
This template displays a green documentation box like you are seeing now and automatically loads the content from a /doc subpage. It can also load the content from other places if instructed to.
This template is intended for documenting templates and other pages that are {{enUici|Wikipedia:Transclusion|transcluded}} onto other pages. It can be used in the {{enUici|Wikipedia:Template namespace|template namespace}} and most other {{enUici|Wikipedia:Namespace|namespace}}s.
Use of this template allows templates to be {{enUici|Wikipedia:Protection policy|protected}} where necessary, while allowing anyone to edit the documentation and categories.
{{=ùsaid=}}
Normally this template is used without any parameters, placed at the bottom of the template or page being documented, within a {{Tag|noinclude}} container:
<syntaxhighlight lang="xml+smarty">
<!--Last line of your template code--><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
</syntaxhighlight>
Then this template automatically loads the content from the /doc subpage of the template it is used on.
This template can also load the content from any other page. Like this:
<syntaxhighlight lang="xml+smarty">
<!--Last line of your template code--><noinclude>
{{Documentation |Teamplaid:Other page/doc}}
</noinclude>
</syntaxhighlight>
Note that when loading the documentation from a page other than the local /doc page it becomes tricky to handle the categories.
The content can also be fed directly as text. Like this:
<syntaxhighlight lang="xml+smarty">
<!--Last line of your template code--><noinclude>
{{Documentation
| content =
(some documentation)
}}</noinclude>
</syntaxhighlight>
When the {{Para|content}} parameter is used, the doc box normally does not show the [edit] [purge] links in the top right corner. Note that if the /doc page exists, a link to it is still shown in the link box below the doc box.
Parameter {{Para|1}} and the {{Para|content}} parameter can also be combined, like this:
<syntaxhighlight lang="xml+smarty">
<!--Last line of your template code--><noinclude>
{{Documentation |1=Template:Any page/doc
| content =
{{Teamplaid:Any page/doc |parameters}}
}}</noinclude>
</syntaxhighlight>
Then the pagename fed as parameter 1 is used for the [edit] [purge] links and for the /doc link in the link box below the doc box. But the '''content''' parameter is used for the content shown in the doc box. The above code means that the content is transcluded as {{Tnull|Teamplaid:Any page/doc{{!}}parameters}}. In this example a parameter is also fed to the /doc page being loaded.
===Place and tags===
This code should be added at the bottom of the template code, with no space before {{Tag|noinclude|o}} (which would cause extra space on pages where the template is used): <syntaxhighlight lang=moin><noinclude>
{{Documentation}}
</noinclude></syntaxhighlight>
To automatically insert the {{enUici|Wikipedia:Noinclude|noinclude tags}}, the template call and the guiding comment, you can also use this {{enUici|Wikipedia:Substitution|substitution}} code shortcut:
{{Tlx|Doc-code}}
Which results in: <syntaxhighlight lang=moin><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
</noinclude></syntaxhighlight>
===Best practice===
Categories that apply to the template itself should be added to the bottom of the /doc subpage, inside {{Tag|noinclude|p|content={{((}}Sandbox other{{!!}}...{{))}}}}. Interwiki links that apply to the template should be listed at [[d:|Wikidata]] (more at {{enUici|Wikipedia:Wikidata}}). For more complex cases, see {{enUici|Wikipedia:Template documentation#Categories and interwiki links}}.
If the documentation page contains {{Tag|includeonly|o}} or {{Tag|noinclude|o}} tags as part of the visible documentation text, replace the "<code><</code>" with "<code>&lt;</code>" or use {{enUici|Teamplaid:Tag}}.
===Heading===
When in the Teamplaid namespace, this template shows this heading:
:[[File:Test Template Info-Icon - Version (2).svg|32px|link={{enUici|Wikipedia:Template documentation}}]] '''Template documentation'''
In most other namespaces, such as "Wikipedia:", it shows this heading:
:'''Documentation'''
But when on File (image) pages it shows this heading:
:'''Summary'''
The '''heading''' parameter can be used to set the heading to something else. Like this:
:<code><nowiki>{{Documentation |heading=Infobox documentation}}</nowiki></code>
If the '''heading''' parameter is empty but defined, no heading is shown and no [edit] [purge] links are shown. Like this:
:<code><nowiki>{{Documentation |heading=}}</nowiki></code>
The '''heading-style''' parameter can be fed optional {{enUici|Cascading Style Sheets|CSS}} values. Without quotation marks <code>" "</code> but with the ending semicolons <code>;</code>. For example:
:<code>heading-style=font-size:150%;color:red;</code>
===Link box===
Below the big doc box is a small link box that shows some meta-data about the documentation. The link box shows different things depending on what parameters are fed to this template, and in which namespace it is used. In some cases the link box is not shown at all.
To hide the link box, add the parameter
: {{Para|link box|off}}.
You can also insert customised text into the link box, by setting the {{Para|link box}} parameter. For example:
<pre style="width:auto; overflow:scroll">
|link box=This documentation is automatically generated by {{enUici|Template:Country showdata}}
</pre>
===Automatic functions===
If the documentation page does not exist, the [create] link includes a [[mw:Manual:Creating pages with preloaded text|preload]] page so that clicking it will pre-fill the edit form with the basic documentation page format. Preload text is also used for the /sandbox and /testcases [create] links.
When this template is on a protected template page it now automatically adds {{Tl|pp-template}}, which shows the grey or red padlock in the top right corner. So no need to manually add {{Tlf|pp-template}} to templates that use {{Tl|Documentation}}.
When this template is on a /sandbox subpage it automatically adds the {{Tl|Template sandbox notice}}.
===Subject namespaces vs. talk namespaces===
Terminology: ''Subject namespaces'' are the opposite of ''talk namespaces''. For instance "Teamplaid:" is the subject space of "Template talk:".
This template is usually placed in a subject namespace, within {{Tag|noinclude|o}} tags. But in some cases this template needs to be on the talk page:
* In the Mediawiki namespace, since {{Tag|noinclude|}} often does not work in system messages, and since the Mediawiki namespace needs to be kept clean for performance reasons.
When placed on talk pages, this template usually is placed near the top of the page and without {{Tag|noinclude}} tags.
The /doc, /sandbox and /testcases pages should normally be in the subject namespace, except in the namespaces that do not have the MediaWiki [[meta:Help:Link#Subpage feature|subpage feature]] enabled: Main, File, Mediawiki and Category. (But currently we only show the /sandbox and /testcases links from User, User talk, Template and Template talk namespaces.) There are also a whole bunch of other technical reasons why the /doc page must be stored under the talk page for those (but only those) namespaces.
This template automatically points its [create] links for the /doc, /sandbox and /testcases to the right namespace.
===Testing===
You can simulate the output for a given page by using the {{Para|page}} parameter. For example, if you use the code {{Para|page|Template:Edit protected}}, the template will behave exactly as if it were on the page [[Teamplaid:Edit protected]], including showing the documentation from [[Teamplaid:Edit protected/documentation]], linking to [[Teamplaid:Edit protected/sandbox]], etc. This parameter is useful for testing and is used extensively on the [[Mòideal:documentation/testcases|module testcases page]].
===Technical details===
The preload page for the /doc [create] link is [[Teamplaid:Documentation/preload]]. The preload pages for the /sandbox and /testcases [create] links are [[Teamplaid:Documentation/preload-sandbox]] and [[Teamplaid:Documentation/preload-testcases]]. The preload page for the /sandbox [mirror] link is [[Teamplaid:Documentation/mirror]].
For more details, see the {{enUici|Template talk:Documentation|talk page}}.
====Full syntax====
<pre>
{{Documentation}}
{{Documentation
| content =
}}
{{Documentation
| [path to documentation page]
| heading-style =
| heading =
| link box =
}}
</pre>
{{=cuideachd=}}
* {{Tl|Documentation subpage}}, a notice placed at the top of a /doc subpage explaining its role and including a link to the page it documents.
* {{Tl|Barnstar documentation}}, a variant of {{Tl|Documentation}} for use with {{enUici|Wikipedia:Barnstars|barnstar}} templates.
* {{Tl|Documentation/color scheme}} presents the color scheme used by {{Tl|Documentation}}.
* {{enUici|Wikipedia:Template documentation}} is a how-to guide to template documentation.
* {{enUici|Wikipedia:Template sandbox and test cases}} explains the use of /sandbox and /testcases subpages and includes more information about template testing.
* {{enUici|User:Technical 13/Scripts/editTemplateNoDoc.js}}, a beta script that enables documentation to be hidden by default when editing templates.
<includeonly><!-- Make sure that only page [[Teamplaid:Documentation]] is categorised. No other page (no subpages, not when transcluded).
-->{{#ifeq:{{FULLPAGENAME}}|Template:Documentation|
[[Roinn-seòrsa:Template documentation| ]]
[[Roinn-seòrsa:Template namespace templates|Documentation]]
}}</includeonly>
0rzbyp4setv87ge1dvg0fb5xqy4v6y8
Mòideal:unsubst
828
12035
86254
70452
2026-07-22T01:56:52Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:Unsubst]] gu [[Mòideal:unsubst]]
63825
Scribunto
text/plain
local checkType = require('libraryUtil').checkType
local p = {}
local BODY_PARAM = '$B'
local specialParams = {
['$params'] = 'parameter list',
['$aliases'] = 'parameter aliases',
['$flags'] = 'flags',
['$B'] = 'template content'
}
function p.main(frame, body)
-- If we are substing, this function returns a template invocation, and if
-- not, it returns the template body. The template body can be specified in
-- the body parameter, or in the template parameter defined in the
-- BODY_PARAM variable. This function can be called from Lua or from
-- #invoke.
-- Return the template body if we aren't substing.
if not mw.isSubsting() then
if body ~= nil then
return body
elseif frame.args[BODY_PARAM] ~= nil then
return frame.args[BODY_PARAM]
else
error(string.format(
"no template content specified (use parameter '%s' from #invoke)",
BODY_PARAM
), 2)
end
end
-- Sanity check for the frame object.
if type(frame) ~= 'table'
or type(frame.getParent) ~= 'function'
or not frame:getParent()
then
error(
"argument #1 to 'main' must be a frame object with a parent " ..
"frame available",
2
)
end
-- Find the invocation name.
local mTemplateInvocation = require('Mòideal:Template invocation')
local name = mTemplateInvocation.name(frame:getParent():getTitle())
-- Combine passed args with passed defaults
local args = {}
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*override%s*,' ) then
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
else
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
end
-- Trim parameters, if not specified otherwise
if not string.find( ','..(frame.args['$flags'] or '')..',', ',%s*keep%-whitespace%s*,' ) then
for k, v in pairs( args ) do args[k] = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end
end
-- Pull information from parameter aliases
local aliases = {}
if frame.args['$aliases'] then
local list = mw.text.split( frame.args['$aliases'], '%s*,%s*' )
for k, v in ipairs( list ) do
local tmp = mw.text.split( v, '%s*>%s*' )
aliases[tonumber(mw.ustring.match(tmp[1], '^[1-9][0-9]*$')) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], '^[1-9][0-9]*$'))) or tmp[2])
end
end
for k, v in pairs( aliases ) do
if args[k] and ( not args[v] or args[v] == '' ) then
args[v] = args[k]
end
args[k] = nil
end
-- Remove empty parameters, if specified
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*remove%-empty%s*,' ) then
local tmp = 0
for k, v in ipairs( args ) do
if v ~= '' or ( args[k+1] and args[k+1] ~= '' ) or ( args[k+2] and args[k+2] ~= '' ) then
tmp = k
else
break
end
end
for k, v in pairs( args ) do
if v == '' then
if not (type(k) == 'number' and k < tmp) then args[k] = nil end
end
end
end
-- Order parameters
if frame.args['$params'] then
local params, tmp = mw.text.split( frame.args['$params'], '%s*,%s*' ), {}
for k, v in ipairs(params) do
v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v
if args[v] then tmp[v], args[v] = args[v], nil end
end
for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end
args = tmp
end
return mTemplateInvocation.invocation(name, args)
end
p[''] = p.main -- For backwards compatibility
return p
l2ngrd0hb9igqtzd94nthd43knzot4w
86258
86254
2026-07-22T01:57:35Z
Altronic
4137
Copy from English Wiktionary
86258
Scribunto
text/plain
-- Cannot unsubst if not currently being substed.
if not mw.isSubsting() then
local frame_title = mw.getCurrentFrame():getTitle()
-- If another module is calling this one, throw an error.
if frame_title ~= "Module:unsubst" then
error(("[[%s]] should not require [[Module:unsubst]] unless mw.isSubsting() returns true"):format(frame_title))
end
-- Otherwise, enable {{#invoke:unsubst|me|...}}.
local export = {}
local process_params = require("Module:parameters").process
function export.me(frame)
return process_params(frame.args, {
[""] = true
})[""]
end
return export
end
local m_pages = require("Module:pages")
local m_template_parser = require("Module:template parser")
local build_template = m_template_parser.buildTemplate
local concat = table.concat
local is_internal_title = m_pages.is_internal_title
local new_title = mw.title.new
local function get_title(frame)
local title = new_title(frame:getTitle())
return is_internal_title(title) and title or
-- This shouldn't happen.
error("frame returned an invalid title")
end
local function serialize(title, args)
return "{{" .. concat(build_template(title, args), "|") .. "}}"
end
local mt = {}
if m_pages.is_transcluded() then
local get_template_invocation_name = m_template_parser.getTemplateInvocationName
function mt:__index(entry_point)
return function(frame)
frame = frame:getParent()
return serialize(get_template_invocation_name(get_title(frame)), frame.args)
end
end
else
function mt:__index(entry_point)
return function(frame)
local title = get_title(frame)
return title.namespace == 828 and
(serialize(("safesubst:<noinclude/>#invoke:%s|%s"):format(title.text, entry_point), frame.args)) or
-- This shouldn't happen.
error(("[[Module:unsubst]] cannot work if the current frame is not in the %s namespace, because the #invoke magic word requires it"):format(mw.site.namespaces[828].canonicalName))
end
end
end
return setmetatable({}, mt)
rjuibpvzy2nn01hl2hrzknpim79uh80
Mòideal:unsubst/doc
828
12036
86256
75550
2026-07-22T01:56:52Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:Unsubst/doc]] gu [[Mòideal:unsubst/doc]]
75550
wikitext
text/x-wiki
<!-- Categories where indicated at the bottom of this page, please. -->
{{Lua|Mòideal:Template invocation}}
{{Lua sidebar}}
{{Toolbar|style=font-size:90% |separator=tpt-languages
| 1 = [[:Deasbaireachd mòideil:{{BASEPAGENAME}}|deasbaireachd]]
| 2 = {{Edit|1=Mòideal:{{BASEPAGENAME}}|2=deasaich}}
| 3 = {{History|Mòideal:{{BASEPAGENAME}}|eachdraidh}}
| 4 = [{{Fullurl:Sònraichte:WhatLinksHere/:Mòideal:{{BASEPAGENAME}}|limit=999}} ceanglaichean]
| 5 = [[:Mòideal:{{BASEPAGENAME}}/doc|doc]]
| 6 = [[:Mòideal:{{BASEPAGENAME}}/sandbox|bogsa-gainmhich]]
| 7 = [[:Teamplaid:{{BASEPAGENAME}}/testcases|cùisean deuchainn]]
}}
{{pp-template}}
{{Module rating|protected}}
Helper module to facilitate a substituted template transform into a template transclusion.
Maintenance templates, such as {{Tl|Citation needed}} or {{Tl|Refimprove}}, should never be substituted. A trick to avoid that is to make a template substitute to its transcluded form.
Infoboxes should use [[Mòideal:Unsubst-infobox]], as should any other templates with parameters listed in block format by default.
{{=ùsaid=}}
To turn a template into a self-substituting template, wrap the existing template code with:
<pre>
{{SAFESUBST:<noinclude />#invoke:Unsubst||$B=
[ ... existing template code ... ]
}}
</pre>
The wikitext to display when not substed must be given as "$B". All other parameters passed to the #invoke will be copied to the generated template invocation as default values. If the value of any of these default parameters is <code>__DATE__</code>, that value in the generated template invocation will be the current month and year.
Some templates have a {{Tag|noinclude|o}} but no matching {{Tag|noinclude|c}} at the end of the template. In such cases the missing {{Tag|noinclude|c}} must be added before the ending <code>{{))}}</code>.
==== Advanced ====
<pre>
{{SAFESUBST:<noinclude />#invoke:Unsubst||$params=[ parameters ]|$aliases=[ aliases ]|$flags=[ flags ]|$B=
[ ... existing template code ... ]
}}
</pre>
Due to Lua limitations, parameters are normally ordered randomly when the template is substituted. {{Para|$params}} can be used in #invoke:Unsubst to list template parameters in order, comma-separated (e.g. <code>egg,bacon,sausage,cheese,spam</code>). Numbered parameters should be before others in the list. Any remaining parameters are tacked onto the end of the generated invocation.
Parameter aliases can be listed in {{Para|$aliases}} (and shouldn't be listed in {{Para|$params}}), and will be replaced automatically. Each alias and its replacement should be formatted as <code>alias>replacement</code>, and each of those pairs should be comma-separated (e.g. <code>œuf>egg,melt>cheese</code>). Note that this parameter can function with or without {{Para|$params}}.
Parameter {{Para|$flags}} can be used to modify other facets of the module's behaviour; entries are comma-separated. Valid flags are <code>override</code> (allows parameters in the #invoke: to take precedence over parameters in the original template invocation); <code>keep-whitespace</code> (prevents whitespace from being trimmed from unnamed parameters); and <code>remove-empty</code> (removes empty parameters).
These parameters can be manipulated using parser functions to provide more complicated options (note that in the parameters any parser function, or template or module invocation, should also have <code><nowiki>SAFESUBST:<noinclude /></nowiki></code>).
{{-eisimpleir-}}
Consider a template Template:Example containing the following code:
<pre>
{{SAFESUBST:<noinclude />#invoke:Unsubst||foo=bar |date=__DATE__ |$B=
[ ... Template code goes here ... ]
}}
</pre>
{| class="wikitable"
! Original !! Result
|-
| {{Tlsc|example}} || {{Tlc|Example|foo=bar|date{{=}}{{#time:F Y}}}}
|-
| {{Tlsc|example|foo{{=}}X}} || {{Tlc|Example|foo{{=}}X|date{{=}}{{#time:F Y}}}}
|-
| {{Tlsc|example|baz{{=}}X}} || {{Tlc|Example|foo=bar|baz{{=}}X|date{{=}}{{#time:F Y}}}}
|-
| {{Tlsc|example|date{{=}}January 2001}} || {{Tlc|Example|foo{{=}}bar|date{{=}}January 2001}}
|}
<includeonly>{{Sandbox other||
| <!-- Categories below this line, please; interwikis at Wikidata -->
[[Roinn-seòrsa:Wikipedia metatemplates]]
[[Roinn-seòrsa:Modules that add a tracking category]]
}}</includeonly>
iemixupaqlpdh0plihfm7z4znu6skc3
86259
86256
2026-07-22T01:58:14Z
Altronic
4137
Copy from English Wiktionary
86259
wikitext
text/x-wiki
This module protects templates and modules from being wrongly substituted.
== Usage ==
There are two ways to use this module:
;Protecting all templates in a module:
First, put the following at the top of a module which contains functions designed to be called by {{tl|#invoke:}}:
{{lua|inline=0|
-- Prevent substitution.
if mw.isSubsting() then
return require("Module:unsubst")
end
}}
Second, edit each template which calls that module from:
: {{tl|#invoke:...|''function''|...}}
to:
: {{tl|safesubst:{{wt|noinclude/}}#invoke:...|''function''|...}}
'''Note''': this should only be used with modules that <u>only</u> return functions which are designed to be called by templates (not by other modules). If your module also returns functions (or other data) designed to be called by other modules, then the safest solution is to separate out the template functions into a separate module, usually in the format {{code|Module:.../templates}} (e.g. [[Module:links/templates]]). This is because it automatically throws an error if it detects that it is not being substituted, and it prevents any functions or data in a module from being accessed during substitution, which will disrupt other modules which need to access those functions while they are being substituted.
;In templates:
Template code can be wrapped as follows: <<noinclude/>pre>
{{tl|safesubst:{{wt|noinclude/}}#invoke:unsubst|me|{{=}}
...
}}</pre>
{{module cat|-|Utility}}
ta7zjtwm03x14nis6hv2a9gin60lx1p
Teamplaid:documentation/Metapage
10
12236
86213
69734
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/Metapage]] gu [[Teamplaid:documentation/Metapage]]
59660
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#if:{{REVISIONID}}|<!--null-->|<!--nur während Vorschau-->{{Warning|1={{#ifexist:{{FULLPAGENAME}}|
The modified values are only visible after saving and possibly [[:w:en:Help:Purge|Purging]].|
This page links to itself. Because the page still does not exist, there will be display errors. After saving and purging you can see the result.
}}}}}}</includeonly>
{| class="hintergrundfarbe1 rahmenfarbe1 {{{class|}}}" style="font-size:100%; border-style:solid; margin-top:2px; margin-bottom:2px; position:relative; padding:5px;"
| [[File:Information icon.svg|30px|Metadata-subpage|link=]]
| class="plainlinks" style="width: 100%;" | This metadata-subpage contains the [[:w:en:Help:Categories|categories]] of the [[{{#rel2abs:{{FULLPAGENAME}}/..}}]]. The content is included in <code><includeonly>…</includeonly></code> and is display under this block as a preview:
|}<includeonly>{{#ifeq:{{NAMESPACE}}|{{ns:10}}|
[[Roinn-seòrsa:Metadata templates|{{PAGENAME}}]]
<!--Maintenance-->{{#ifexist:{{#rel2abs:{{FULLPAGENAME}}/..}}|<!--not-->|
<span style="display:none;">[[Teamplaid:Documentation/Maintenance/Meta orphaned]]</span>
}}}}<!--Preview-->
{{#tag:pre|{{raw:{{FULLPAGENAME}}}}}}</includeonly></onlyinclude>
[[Roinn-seòrsa:Template namespace templates| {{PAGENAME}}]]
rsjbumiekq2zc05d494e48mmbq6aga0
Teamplaid:documentation/color scheme
10
12237
86215
69733
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/color scheme]] gu [[Teamplaid:documentation/color scheme]]
67475
wikitext
text/x-wiki
{| class=wikitable
|+ Wikipedia background colors for {{Tl|Documentation}} <small>([[:w:en:Help:Using colors]])</small>
! !! RGB !! HSV !! Color !! General usage !! Note
|-
| A
| <kbd>#ECFCF4</kbd> || 150°, 6%, 99%
| style="background:#ECFCF4" |
| Sample || Current documentation background
|-
| B
| <kbd>#00FF80</kbd>
| style="font-size:90%;" | {{Nowrap|1=Hue=150° <small>(41.7%; 106/255<small>dec</small>)</small> 100%, 100%}}
| style="background:#00FF80" |
| Basic hue || What we'd call ''the color''
|-
|
|-
| 1
| <kbd>#A3BFB1</kbd> || 150°, 15%, 75%
| style="background:#A3BFB1" |
| Header border only ||
|-
| 2
| <kbd>#CEF2E0</kbd> || 150°, 15%, 95%
| style="background:#CEF2E0" |
| Main border; header background ||
|-
| 3
| <kbd>#E6FFF2</kbd> || 150°, 10%, 100%
| style="background:#E6FFF2" |
| 2nd header, accent colour ||
|-
| 4
| <kbd>#F5FFFA</kbd> || 150°, 4%, 100%
| style="background:#F5FFFA" |
| Main background || So saturation in A is a bit off
|}
{{Collapse top|title=Colors for documentation navbox}}
As a suggestion, here are colors for a navbox intended for documentation pages only.
They follow the shading of regular blue navbox colors:
<pre>
| titlestyle = background:#ccffe5
| basestyle = background:#ddffee
<!-- basestyle= sets groupstyle, abovestyle, belowstyle together -->
</pre>
For subgroups, in child navboxes:
<pre>
{{Navbox|child
| groupstyle = background:#e6fff2
...
</pre>
Example:{{Tlx|Periodic table templates}}
{{Collapse bottom}}
<noinclude>
{{Documentation|Template:Documentation/doc}}
</noinclude>
gyhkq33mvm3tbpy8x8emoz2perocrt8
Teamplaid:documentation/color scheme for statistics
10
12238
86217
69732
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/color scheme for statistics]] gu [[Teamplaid:documentation/color scheme for statistics]]
67463
wikitext
text/x-wiki
{| class=wikitable
|+ Wikipedia background colors for {{Tl|Documentation}} <small>([[:w:en:Help:Using colors]])</small>
! !! RGB !! HSV !! Color !! General usage !! Note
|-
| A
| <kbd>#ECFCF4</kbd> || 150°, 6%, 99%
| style="background:#ECFCF4" |
| Sample || Current documentation background
|-
| B
| <kbd>#00FF80</kbd>
| style="font-size:90%;" | {{Nowrap|1=Hue=150° <small>(41.7%; 106/255<small>dec</small>)</small> 100%, 100%}}
| style="background:#00FF80" |
| Basic hue || What we'd call ''the color''
|-
|
|-
| 1
| <kbd>#A3BFB1</kbd> || 150°, 15%, 75%
| style="background:#A3BFB1" |
| Header border only ||
|-
| 2
| <kbd>#CEF2E0</kbd> || 150°, 15%, 95%
| style="background:#CEF2E0" |
| Main border; header background ||
|-
| 3
| <kbd>#E6FFF2</kbd> || 150°, 10%, 100%
| style="background:#E6FFF2" |
| 2nd header, accent colour ||
|-
| 4
| <kbd>#F5FFFA</kbd> || 150°, 4%, 100%
| style="background:#F5FFFA" |
| Main background || So saturation in A is a bit off
|}<noinclude>
[[Roinn-seòrsa:Documentation shared content templates|Colors]]
</noinclude>
r63ja7mb0ce05sc6lb294nhc3opb1bz
Teamplaid:documentation/core
10
12239
86219
59663
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/core]] gu [[Teamplaid:documentation/core]]
59663
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:Documentation]]
e6kxbq86idfxrqww6bojrcl79mgmzid
Teamplaid:documentation/data box
10
12240
86221
69731
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/data box]] gu [[Teamplaid:documentation/data box]]
59664
wikitext
text/x-wiki
{{#ifeq:{{{data exist|}}}|yes|<div class="template-documentation iezoomfix"><!--
-->This is the [[:w:en:Wikipedia:VisualEditor/TemplateData|TemplateData]] documentation for the template used by the new [[:w:en:Wikipedia:VisualEditor|VisualEditor]].
{{ {{{datapage}}} }}<!--
--></div>}}<noinclude>
</noinclude>
j9fqsg6hztotou3cy2wiv99o4upmbj8
Teamplaid:documentation/data box2
10
12241
86223
69730
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/data box2]] gu [[Teamplaid:documentation/data box2]]
59665
wikitext
text/x-wiki
{{Documentation/data box
| datapage =
{{#if: {{{templatedata|}}}
| {{{templatedata|}}}
| {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/templatedata
}}
| data exist =
{{#ifexist:
{{#if: {{{templatedata|}}}
| {{{templatedata|}}} <!--Other templatedata name fed-->
| {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/templatedata
}}
| yes
}}
}}<noinclude>
</noinclude>
g9m11b8moky9dh680zt3cfhjje20jkt
Teamplaid:documentation/docname
10
12242
86225
69729
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/docname]] gu [[Teamplaid:documentation/docname]]
59689
wikitext
text/x-wiki
{{#switch: {{SUBPAGENAME}}
|sandbox|testcases={{ #rel2abs: ../documentation }}
|#default={{SUBJECTPAGENAME}}/documentation
}}
hw27u71x4u3auvbnti0od079guvl04d
Teamplaid:documentation/docspace
10
12243
86227
69728
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/docspace]] gu [[Teamplaid:documentation/docspace]]
67443
wikitext
text/x-wiki
{{#switch: {{SUBJECTSPACE}}
| {{ns:0}}
| {{ns:File}}
| {{ns:MediaWiki}}
| {{ns:Category}} = {{TALKSPACE}}
| #default = {{SUBJECTSPACE}}
}}<noinclude>
{{Documentation|content=
This subtemplate of {{Tl|Documentation}} is used to determine the namespace of the documentation page.
}}</noinclude>
qatrbowqv267xy1zwl8sir1v0ka5zsq
Teamplaid:documentation/end box
10
12244
86231
69726
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/end box]] gu [[Teamplaid:documentation/end box]]
59668
wikitext
text/x-wiki
<!--
Link box below for the doc meta-data:
-->{{#if:
<!--Check if we should show the link box-->
{{#ifeq: {{{link box|}}} | off
|
| {{{doc exist|yes}}}{{
#switch: {{SUBJECTSPACE}}
| {{ns:User}}
| {{ns:Module}}
| {{ns:Template}} = yes
}}
}}
| {{Fmbox
| id = documentation-meta-data
| image = none
| style = background-color: #ecfcf4;
| textstyle = font-style: italic;
| text =
{{#if: {{{link box|}}}
| {{{link box}}} <!--Use custom link box content-->
| {{#if: {{{doc exist|yes}}}
| <!--/doc exists, link to it-->
The above [[:w:en:Wikipedia:Template documentation|documentation]] is [[:w:en:Wikipedia:Transclusion|transcluded]] from [[{{{docpage|{{FULLPAGENAME}}/doc}}}]]. <small style="font-style: normal">([{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=edit}} edit] | [{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=history}} history])</small> <br />
|<!-- /doc does not exist, ask to create one?
-->{{#switch: {{SUBJECTSPACE}}
| {{ns:Module}} = You might want to [{{fullurl: {{{docpage| {{FULLPAGENAME}}/doc }}} | action=edit&preload=Template:Documentation/preload-module-doc }} create] a documentation page for this [[:w:en:Wikipedia:Lua|Scribunto module]]<br>
| #default =
}}
}}<!--
Add links to /sandbox and /testcases when appropriate:
-->{{#switch: {{SUBJECTSPACE}}
| {{ns:User}}
| {{ns:Module}}
| {{ns:Template}} =
Editors can experiment in this {{#switch: {{SUBJECTSPACE}} | {{ns:module}} = module's | #default = template's}} {{
#ifexist: {{{sandbox| {{FULLPAGENAME}}/sandbox }}}
| [[{{{sandbox| {{FULLPAGENAME}}/sandbox }}}|sandbox]] <small style="font-style: normal">([{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit }} edit] <nowiki>|</nowiki> [{{fullurl:Special:ComparePages | page1={{urlencode:{{{template page|{{FULLPAGENAME}}}}}}}&page2={{urlencode:{{{sandbox|{{FULLPAGENAME}}/sandbox}}}}}}} diff])</small>
| sandbox <small style="font-style: normal">([{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit&preload=Template:Documentation/preload-{{#ifeq: {{SUBJECTSPACE}}|{{ns:Module}}|module-}}sandbox }} create] <nowiki>|</nowiki> [{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit&preload={{urlencode:{{{template page|{{FULLPAGENAME}}}}}}}&summary={{urlencode:Create sandbox version of [[{{{template page|{{FULLPAGENAME}}}}}]]}} }} mirror])</small>
}} and {{
#ifexist: {{{testcases| {{FULLPAGENAME}}/testcases }}}
| [[{{{testcases| {{FULLPAGENAME}}/testcases }}}|testcases]] <small style="font-style: normal">([{{fullurl: {{{testcases| {{FULLPAGENAME}}/testcases }}} | action=edit }} edit])</small>
| testcases <small style="font-style: normal">([{{fullurl: {{{testcases| {{FULLPAGENAME}}/testcases }}} | action=edit&preload=Template:Documentation/preload-{{#ifeq: {{SUBJECTSPACE}}|{{ns:Module}}|module-}}testcases&summary={{urlencode:Create testcases page for [[{{{template page|{{FULLPAGENAME}}}}}]]}} }} create])</small>
}} pages. <br />
}}<!--
Show the cats text, but not
if "content" fed or "docname fed" since then it is
unclear where to add the cats.
-->{{#if: {{{content|}}} {{{docname fed|}}}
|
| Please add categories to the [[{{{docpage|{{FULLPAGENAME}}/documentation}}}|/documentation]] subpage.
}}<!--
Show the "Subpages" link:
-->{{#switch: {{SUBJECTSPACE}}
| {{ns:File}} = <!--Don't show it-->
| {{ns:Module}} =  [[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this module]].
| {{ns:Template}} =  [[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this template]].
| #default =  [[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this page]].
}}
}}{{#ifexist:{{FULLPAGENAME}}/Print
|<br />A [[:w:en:Help:Books/for experts#Improving the book layout|print version]] of this template exists at [[/Print]]. If you make a change to this template, please update the print version as well.[[Category:Templates with print versions]]
}}
}}
}}<!--End link box--><!--
Detect and report strange usage:
-->{{#if:
<!--Check if {{documentation}} is transcluded
on a /doc or /testcases page-->
{{#switch: {{SUBPAGENAME}}
| doc
| testcases = strange
}}
<!--More checks can be added here, just return anything
to make the surrounding if-case trigger-->
| <includeonly>[[Category:Wikipedia pages with strange ((documentation)) usage|{{main other|Main:}}{{FULLPAGENAME}}]]<!-- Sort on namespace --></includeonly>
}}
0074h1u38lj4w2c90gg9r1gbq4312do
Teamplaid:documentation/end box2
10
12245
86233
69725
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/end box2]] gu [[Teamplaid:documentation/end box2]]
59669
wikitext
text/x-wiki
<noinclude><div></noinclude><div style="clear: both;"></div><!--So right or left floating items don't stick out of the doc box.-->
</div><!--End of green doc box--><!--
Link box below for the doc meta-data:
-->{{Documentation/end box
| preload = {{{preload|}}} <!--Allow custom preloads-->
| content = {{{content|}}}
| link box = {{{link box|}}} <!--So "link box=off" works-->
| docpage =
{{#if: {{{1|}}}
| {{{1|}}}
| {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc
}}
| doc exist =
{{#ifexist:
{{#if: {{{1|}}}
| {{{1|}}} <!--Other docname fed-->
| {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc
}}
| yes
}}
| docname fed =
{{#if: {{{1|}}}
| yes
}}
| sandbox =
{{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/sandbox
| testcases =
{{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/testcases
| template page =
{{NAMESPACE}}:{{{template page|{{PAGENAME}}}}}
}}<noinclude>
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
dmz3kk3mbqeh0wk13quauw63d5ahud4
Teamplaid:documentation/link box
10
12246
86235
69724
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/link box]] gu [[Teamplaid:documentation/link box]]
59670
wikitext
text/x-wiki
<!--
Link box below for the doc meta-data:
-->{{#if:
<!--Check if we should show the link box-->
{{#ifeq: {{{link box|}}} | off
|
| {{{doc exist|yes}}}{{
#switch: {{SUBJECTSPACE}}
| {{ns:User}}
| {{ns:Module}}
| {{ns:Template}} = yes
}}
}}
| {{Fmbox
| id = documentation-meta-data
| image = none
| style = background-color: #ecfcf4;
| textstyle = font-style: italic;
| text =
{{#if: {{{link box|}}}
| {{{link box}}} <!--Use custom link box content-->
| {{#if: {{{doc exist|yes}}}
| <!--/doc exists, link to it-->
The above [[:w:en:Wikipedia:Template documentation|documentation]] is [[:w:en:Wikipedia:Transclusion|transcluded]] from [[{{{docpage|{{FULLPAGENAME}}/doc}}}]]. <small style="font-style: normal">([{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=edit}} edit] | [{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=history}} history])</small> <br />
|<!-- /doc does not exist, ask to create one?
-->{{#switch: {{SUBJECTSPACE}}
| {{ns:Module}} = You might want to [{{fullurl: {{{docpage| {{FULLPAGENAME}}/doc }}} | action=edit&preload=Template:Documentation/preload-module-doc }} create] a documentation page for this [[:w:en:Wikipedia:Lua|Scribunto module]]<br>
| #default =
}}
}}<!--
Add links to /sandbox and /testcases when appropriate:
-->{{#switch: {{SUBJECTSPACE}}
| {{ns:User}}
| {{ns:Module}}
| {{ns:Template}} =
Editors can experiment in this {{#switch: {{SUBJECTSPACE}} | {{ns:module}} = module's | #default = template's}} {{
#ifexist: {{{sandbox| {{FULLPAGENAME}}/sandbox }}}
| [[{{{sandbox| {{FULLPAGENAME}}/sandbox }}}|sandbox]] <small style="font-style: normal">([{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit }} edit] <nowiki>|</nowiki> [{{fullurl:Special:ComparePages | page1={{urlencode:{{{template page|{{FULLPAGENAME}}}}}}}&page2={{urlencode:{{{sandbox|{{FULLPAGENAME}}/sandbox}}}}}}} diff])</small>
| sandbox <small style="font-style: normal">([{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit&preload=Template:Documentation/preload-{{#ifeq: {{SUBJECTSPACE}}|{{ns:Module}}|module-}}sandbox }} create] <nowiki>|</nowiki> [{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit&preload={{urlencode:{{{template page|{{FULLPAGENAME}}}}}}}&summary={{urlencode:Create sandbox version of [[{{{template page|{{FULLPAGENAME}}}}}]]}} }} mirror])</small>
}} and {{
#ifexist: {{{testcases| {{FULLPAGENAME}}/testcases }}}
| [[{{{testcases| {{FULLPAGENAME}}/testcases }}}|testcases]] <small style="font-style: normal">([{{fullurl: {{{testcases| {{FULLPAGENAME}}/testcases }}} | action=edit }} edit])</small>
| testcases <small style="font-style: normal">([{{fullurl: {{{testcases| {{FULLPAGENAME}}/testcases }}} | action=edit&preload=Template:Documentation/preload-{{#ifeq: {{SUBJECTSPACE}}|{{ns:Module}}|module-}}testcases }} create])</small>
}} pages. <br />
}}<!--
Show the cats text, but not
if "content" fed or "docname fed" since then it is
unclear where to add the cats.
-->{{#if: {{{content|}}} {{{docname fed|}}}
|
| Please add categories to the [[{{{docpage|{{FULLPAGENAME}}/documentation}}}|/documentation]] subpage.
}}<!--
Show the "Subpages" link:
-->{{#switch: {{SUBJECTSPACE}}
| {{ns:File}} = <!--Don't show it-->
| {{ns:Module}} =  [[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this module]].
| {{ns:Template}} =  [[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this template]].
| #default =  [[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this page]].
}}
}}{{#ifexist:{{FULLPAGENAME}}/Print
|<br />A [[:w:en:Help:Books/for experts#Improving the book layout|print version]] of this template exists at [[/Print]]. If you make a change to this template, please update the print version as well.[[Category:Templates with print versions]]
}}
}}
}}<!--End link box--><!--
Detect and report strange usage:
-->{{#if:
<!--Check if {{documentation}} is transcluded
on a /doc or /testcases page-->
{{#switch: {{SUBPAGENAME}}
| doc
| testcases = strange
}}
<!--More checks can be added here, just return anything
to make the surrounding if-case trigger-->
| <includeonly>[[Category:Wikipedia pages with strange ((documentation)) usage|{{main other|Main:}}{{FULLPAGENAME}}]]<!-- Sort on namespace --></includeonly>
}}
cvgc4cr1udm4pcw6lqczzijqgexicqx
Teamplaid:documentation/mirror
10
12247
86237
69723
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/mirror]] gu [[Teamplaid:documentation/mirror]]
59671
wikitext
text/x-wiki
{{subst:<noinclude/>^|
<!--Save this page to create a mirror-->
}}<includeonly>{{subst:msgnw:{{subst:NAMESPACE}}:{{subst:BASEPAGENAME}}}}</includeonly>
4zsnuilfw6kc6dwt8fngeorev5jlkod
Teamplaid:documentation/preload
10
12248
86239
69722
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/preload]] gu [[Teamplaid:documentation/preload]]
59672
wikitext
text/x-wiki
<noinclude><!--
Please note: This code must be kept in sync with that at [[:w:en:Wikipedia:Template documentation#How to create a documentation subpage]].
--></noinclude>{{Documentation subpage}}
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata (see [[:w:en:Wikipedia:Wikidata]]) -->
{{=ùsaid=}}
<include<includeonly></includeonly>only>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
}}</include<includeonly></includeonly>only>
gr21syqsmkp0vab5j1rx9kajtpht18p
Teamplaid:documentation/start box
10
12249
86241
85484
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/start box]] gu [[Teamplaid:documentation/start box]]
85484
wikitext
text/x-wiki
<!--
Start of green doc box
--><div id="template-documentation" class="template-documentation iezoomfix"><!--
Add the heading at the top of the doc box:
-->{{#ifeq: {{{heading|¬}}} | <!--Defined but empty-->
| <!--"heading=", do nothing-->
| <div style="padding-bottom: 3px; border-bottom: 1px solid #aaa; margin-bottom: 1ex;"><span style="{{#if: {{{heading-style|}}}
| {{{heading-style|}}}
| {{#ifeq: {{SUBJECTSPACE}} | {{Ns:Template}}
| font-weight: bold; font-size: 125%
| font-size: 150%
}}
}}">{{#switch: {{{heading|¬}}}
| ¬ =
<!--"heading" not defined in this or previous level-->
{{#switch: {{SUBJECTSPACE}}
| {{Ns:Template}} = [[Faidhle:Test Template Info-Icon.svg|50px|link=|alt=Documentation icon]] {{{Documentation alt text|Template documentation}}}
| {{Ns:Module}} = [[Faidhle:Test Template Info-Icon.svg|50px|link=|alt=Documentation icon]] Module documentation
| {{Ns:File}} = Summary
| #default = Documentation
}}
| #default =
<!--"heading" has data or is empty but defined-->
{{{heading|}}}
}}</span>{{
#if: {{{content|}}}
|
| <!--Add the [view][edit][history][Purge] or [create] links-->
<span class="mw-editsection plainlinks" id="doc_editlinks">{{
#if: {{{doc exist|yes}}}
| [[[{{{docpage|{{FULLPAGENAME}}/doc}}}|view]]] [[{{Fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=edit}} edit]] [[{{Fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=history}} history]] [{{Purge|purge}}]
| <!--/doc doesn't exist-->
[[{{Fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}| action=edit&preload={{
#if: {{{preload|}}}
| {{urlencode:{{{preload}}}}}
| {{#ifeq: {{SUBJECTSPACE}} | {{Ns:File}}
| Template:Documentation/preload-filespace
| Template:Documentation/preload
}} }} }} create]]
}}</span>
}}</div>
}}<noinclude><!-- close the div --></div>
{{pp-template}}
{{Not a sandbox}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
dfbzkpfv94i6w55zi87c5hztwaxcb6c
Teamplaid:documentation/start box2
10
12250
86243
69721
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/start box2]] gu [[Teamplaid:documentation/start box2]]
59690
wikitext
text/x-wiki
{{Documentation/start box
| preload = {{{preload|}}} <!--Allow custom preloads-->
| heading = {{{heading|¬}}} <!--Empty but defined means no header-->
| heading-style = {{{heading-style|}}}
| content = {{{content|}}}
| docpage =
{{#if: {{{1|}}}
| {{{1|}}}
| {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/documentation
}}
| doc exist =
{{#ifexist:
{{#if: {{{1|}}}
| {{{1|}}} <!--Other docname fed-->
| {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/documentation
}}
| yes
}}
}}<noinclude>
{{Documentation/end box2}}
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
5mclue86rxg7esulwrps18ppnxmabba
Teamplaid:documentation/template page
10
12251
86245
69720
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/template page]] gu [[Teamplaid:documentation/template page]]
59675
wikitext
text/x-wiki
{{#switch: {{SUBPAGENAME}}
| sandbox
| testcases = {{BASEPAGENAME}}
| #default = {{PAGENAME}}
}}<noinclude>{{Documentation|content=
This subtemplate of {{Tl|Documentation}} is used to determine the template page name.
}}</noinclude>
cmcykp07t0b6faabx27mezcogw4roed
Mòideal:script utilities/data
828
13825
86410
70748
2026-07-23T11:18:44Z
Altronic
4137
Copy from English Wiktionary
86410
Scribunto
text/plain
local data = {}
local translit = {
["term"] = {
--[=[ can't be done until Kana transliterations are correctly parsed by [[Module:links]]
["tag"] = "i",
]=]
["class"] = "mention-tr",
},
["usex"] = {
["tag"] = "i",
["class"] = "e-transliteration",
},
["head"] = {
["class"] = "headword-tr",
["dir"] = "ltr",
},
["default"] = {},
}
for _, v in next, translit do
if not v.tag then
v.tag = "span"
end
end
data.translit = translit
data.transcription = {
["head"] = {
["tag"] = "span",
["class"] = "headword-ts",
["dir"] = "ltr",
},
["usex"] = {
["tag"] = "span",
["class"] = "e-transcription",
},
["default"] = {},
}
data.definition = {
["gloss"] = {
["tag"] = "span",
["class"] = "mention-gloss",
},
["non-gloss"] = {
["tag"] = "span",
["class"] = "use-with-mention",
},
}
local faces = {
["term"] = {
["tag"] = "i",
["class"] = "mention",
},
["head"] = {
["tag"] = "strong",
["class"] = "headword",
},
["hypothetical"] = {
["prefix"] = '<span class="hypothetical-star">*</span>',
["tag"] = "i",
["class"] = "hypothetical",
},
["bold"] = {
["tag"] = "b",
},
["plain"] = {
["tag"] = "span",
}
}
faces["translation"] = faces["plain"]
data.faces = faces
return data
glatf44lq0ipqkut0sozbs72zba142n
Mòideal:array
828
13859
86283
69761
2026-07-22T07:04:46Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:Array]] gu [[Mòideal:array]]
62242
Scribunto
text/plain
local Array = {}
local array_constructor
local function load_table_module()
return require "Module:TableTools"
end
-- Copy table library so as not to unexpectedly change the behavior of code that
-- uses it.
local array_methods = mw.clone(table)
-- Create version of table.sort that returns the table.
array_methods.sort = function (t, comp)
table.sort(t, comp)
return t
end
-- ipairs and unpack operate on arrays.
array_methods.ipairs = ipairs
array_methods.unpack = unpack
function array_methods:type()
local mt = getmetatable(self)
return type(mt) == "table" and mt.__type or nil
end
function array_methods:adjustIndex(index)
index = math.floor(index)
if index < 0 then
index = #self + index + 1
end
return index
end
-- string.sub-style slicing.
function array_methods:slice(i, j)
if i == nil then
i = 1
elseif type(i) == "number" then
i = self:adjust_index(i)
else
error("Expected number, got " .. type(i))
end
if j == nil or type(j) == "number" then
j = self:adjust_index(j or -1)
else
error("Expected number, got " .. type(j))
end
local new_arr = array_constructor()
local k = 0
for index = i, j do
k = k + 1
new_arr[k] = self[index]
end
return new_arr
end
-- A function to convert string key-table modules such
-- as [[Module:languages/data2]] into arrays.
-- "from" is a bad name.
-- field_for_key supplies the field name in which the
-- key will be stored.
local function to_array(map, field_for_key)
m_table = m_table or load_table_module()
local arr = {}
local i = 0
for key, val in pairs(map) do
i = i + 1
local new_val = m_table.shallowcopy(val)
if field_for_key then
new_val[field_for_key] = key
end
arr[i] = new_val
end
return array_constructor(arr)
end
-- Functions from [[Module:TableTools]] that operate on arrays or sparse arrays.
-- List copied from [[Module:TableTools/documentation]].
local operate_on_array = {
-- non-sparse
"removeDuplicates", "length", "contains", "serialCommaJoin",
"reverseIpairs", "reverse", "invert", "listToSet", "isArray",
-- sparse
"numKeys", "maxIndex", "compressSparseArray", "sparseIpairs",
-- tables in general
"shallowcopy", "deepcopy",
}
-- Not all of these operate on arrays.
local create_new_array = {
-- Functions from [[Module:TableTools]] that create an array.
-- List copied from [[Module:TableTools/documentation]].
"removeDuplicates", "numKeys", "affixNums", "compressSparseArray",
"keysToList", "reverse",
-- Functions from [[Module:TableTools]] that create an table.
"shallowcopy", "deepcopy",
-- Functions from [[Module:fun]] that create an array.
"map", "filter",
}
-- Functions from [[Module:fun]] that take an array in the second argument.
-- They just have to have the argument order reversed to work as methods of the
-- array object.
local second_argument_is_array = { "map", "some", "all", "filter" }
-- Add aliases for the functions from [[Module:TableTools]] whose names
-- contain "array" or "list", which is redundant, and whose names don't conform
-- to the usual camel case.
-- The key redirects to the value.
local alias_of = {
compress = "compressSparseArray", keys = "keysToList", toSet = "listToSet",
deepCopy = "deepcopy", shallowCopy = "shallowcopy",
}
local function get_module_function(key, module, module_name)
return module[key]
or error("No function named " .. tostring(key) .. " in Module:" .. module_name)
end
local function wrap_in_array_constructor(func)
return function (...)
return array_constructor(func(...))
end
end
local function create_array_generating_func(key, module, module_name)
return wrap_in_array_constructor(get_module_function(key, module, module_name))
end
local function reverse_arguments(func)
return function (a, b)
return func(b, a, true)
end
end
local function underscore_to_camel_case(str)
if type(str) ~= "string" then return str end
str = str:gsub("_(.)", string.upper)
return str
end
local m_table, m_fun
local Array = {}
Array.__type = "array"
function Array:__index(key)
if type(key) ~= "string" then
return nil
end
-- Convert underscores to camel case: num_keys -> numKeys.
key = underscore_to_camel_case(key)
local val = array_methods[key]
if val then
return val
end
key = alias_of[key] or key
local func
m_table = m_table or load_table_module()
if m_table.contains(operate_on_array, key) then
if m_table.contains(create_new_array, key) then
func = create_array_generating_func(key, m_table, "table")
else
func = m_table[key]
end
elseif m_table.contains(second_argument_is_array, key) then
m_fun = m_fun or require "Module:fun"
local raw_func = reverse_arguments(get_module_function(key, m_fun, "fun"))
if m_table.contains(create_new_array, key) then
func = wrap_in_array_constructor(raw_func)
else
func = raw_func
end
end
if func then
array_methods[key] = func
return func
end
end
function Array.__add(a, b)
if type(a) == 'table' and type(b) == 'table' then
m_table = m_table or load_table_module()
local new_arr = array_constructor(m_table.shallowcopy(a))
for _, val in ipairs(b) do
new_arr:insert(val)
end
return new_arr
end
end
function Array:new(...)
local arr
if select("#", ...) == 1 and type((...)) == "table" then
arr = ...
local mt = getmetatable(arr)
-- If table has been loaded with mw.loadData, copy it to avoid the
-- limitations of it being a virtual table.
if mt and mt.mw_loadData then
m_table = m_table or load_table_module()
arr = m_table.shallowcopy(arr)
end
else
arr = { ... }
end
return setmetatable(arr, self)
end
-- Declared as local above.
function array_constructor(...)
return Array:new(...)
end
local array_generating_funcs = { from = to_array }
local Array_library_mt = {
__call = Array.new, __index = array_generating_funcs
}
setmetatable(Array, Array_library_mt)
function Array_library_mt:__index(key)
key = underscore_to_camel_case(key)
key = alias_of[key] or key
if array_generating_funcs[key] then
return array_generating_funcs[key]
end
m_table = m_table or load_table_module()
if m_table.contains(create_new_array, key) then
local func = create_array_generating_func(key, m_table, "table")
array_generating_funcs[key] = func
return func
end
end
return Array
6uk6poddb11pklvvpqs8avhncr5nygu
86287
86283
2026-07-22T07:21:18Z
Altronic
4137
Copy from English Wiktionary
86287
Scribunto
text/plain
local export = {}
local debug_track_module = "Module:debug/track"
local function_module = "Module:fun"
local table_module = "Module:table"
local get_array_mt -- Defined below.
local getmetatable = getmetatable
local ipairs = ipairs
local pairs = pairs
local rawget = rawget
local rawset = rawset
local require = require
local select = select
local setmetatable = setmetatable
local sort = table.sort
local type = type
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local upper = string.upper
local array_mt -- Defined below.
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function append(...)
append = require(table_module).append
return append(...)
end
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function list_to_set(...)
list_to_set = require(table_module).listToSet
return list_to_set(...)
end
local function shallow_copy(...)
shallow_copy = require(table_module).shallowCopy
return shallow_copy(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local m_function
local function get_m_function()
m_function, get_m_function = require(function_module), nil
return m_function
end
local m_table
local function get_m_table()
m_table, get_m_table = require(table_module), nil
return m_table
end
-- Functions from [[Module:table]] that operate on arrays or sparse arrays.
-- List copied from [[Module:table/documentation]].
local m_table_array_funcs
local function get_m_table_array_funcs()
m_table_array_funcs = list_to_set{
-- non-sparse
"signedIndex", "append", "extend", "extendIfNot", "slice", "removeDuplicates", "length",
"size", "contains", "serialCommaJoin", "reverseIpairs", "reverse",
"invert", "listToSet", "flatten", "isArray",
-- sparse
"numKeys", "maxIndex", "compressSparseArray", "indexPairs", "indexIpairs",
"sparseIpairs",
-- tables in general
"shallowCopy", "deepCopy"
}
get_m_table_array_funcs = nil
return m_table_array_funcs
end
-- Functions from [[Module:fun]] that take an array in the second argument.
-- They just have to have the argument order reversed to work as methods of the
-- array object.
local m_function_array_funcs
local function get_m_function_array_funcs()
m_function_array_funcs = list_to_set{
"map", "some", "all", "filter", "fold"
}
get_m_function_array_funcs = nil
return m_function_array_funcs
end
-- Functions from [[Module:table]] that create an array or table.
-- Not all of these operate on arrays.
local m_table_new_array_funcs
local function get_m_table_new_array_funcs()
m_table_new_array_funcs = list_to_set{
-- Array.
"append", "slice", "removeDuplicates", "numKeys", "compressSparseArray",
"keysToList", "reverse", "flatten",
-- Array or table.
"shallowCopy", "deepCopy"
}
get_m_table_new_array_funcs = nil
return m_table_new_array_funcs
end
-- Functions from [[Module:fun]] that create an array or table.
-- Not all of these operate on arrays.
local m_function_new_array_funcs
local function get_m_function_new_array_funcs()
m_function_new_array_funcs = list_to_set{
"map", "filter",
}
get_m_function_new_array_funcs = nil
return m_function_new_array_funcs
end
-- Add aliases for the functions from [[Module:table]] whose names
-- contain "array" or "list", which is redundant.
-- The key redirects to the value.
local alias_of = {
compress = "compressSparseArray",
keys = "keysToList",
toSet = "listToSet",
}
local function underscore_to_camel_case(str)
if type(str) ~= "string" then
return str
end
local ret = str:gsub("_(.)", upper)
if ret ~= str then
debug_track("array/underscore to camel case")
end
return ret
end
local function get_module_function(key, module, module_name)
return module[key] or
error(("Cannot find %s in [[Module:%s]]"):format(mw.dumpObject(key), module_name))
end
local function wrap_in_array_constructor(func)
return function (...)
return setmetatable(func(...), array_mt or get_array_mt())
end
end
function get_array_mt()
-- Copy table library so as not to unexpectedly change the behavior of code that
-- uses it.
local Array = deep_copy(table)
Array.ipairs = ipairs
Array.pairs = pairs
Array.unpack = unpack
Array.listToText = mw.text.listToText
-- Create version of table.sort that returns the table.
function Array:sort(comp)
sort(self, comp)
return self
end
function Array:type()
local mt = getmetatable(self)
return mt and type(mt) == "table" and rawget(mt, "__type") or nil
end
local Array_mt = {}
setmetatable(Array, Array_mt)
function Array_mt:__index(key)
if type(key) ~= "string" then
return nil
end
-- Convert underscores to camel case: num_keys -> numKeys.
-- FIXME: this is pointless overhead: remove once nothing relies on it.
key = underscore_to_camel_case(key)
key = alias_of[key] or key
local func = rawget(self, key)
if func ~= nil then
return func
elseif (m_table_array_funcs or get_m_table_array_funcs())[key] then
func = get_module_function(key, m_table or get_m_table(), "table")
if (m_table_new_array_funcs or get_m_table_new_array_funcs())[key] then
func = wrap_in_array_constructor(func)
end
elseif (m_function_array_funcs or get_m_function_array_funcs())[key] then
local raw_func = get_module_function(key, m_function or get_m_function(), "fun")
--[==[ Once isArray is no longer used:
function func(a, b, ...)
return raw_func(b, a, ...)
end
]==]
if key == "fold" then
function func(t, f, accum)
return raw_func(f, t, accum)
end
else
function func(a, b) -- TODO: isArray parameter is probably unnecessary, and doesn't work with sparse arrays anyway.
debug_track("array/isArray")
return raw_func(b, a, "isArray")
end
end
if (m_function_new_array_funcs or get_m_function_new_array_funcs())[key] then
func = wrap_in_array_constructor(func)
end
else
return nil
end
rawset(Array, key, func)
return func
end
array_mt = {
__index = Array,
__type = "array",
}
function array_mt:__add(v)
return setmetatable(append(self, v), array_mt or get_array_mt())
end
get_array_mt = nil
return array_mt
end
-- A function to convert string key-table modules such
-- as [[Module:languages/data/2]] into arrays.
-- "from" is a bad name.
-- field_for_key supplies the field name in which the
-- key will be stored.
function export.from(map, field_for_key)
local arr, i = {}, 0
for key, val in pairs(map) do
i = i + 1
local new_val = shallow_copy(val)
if field_for_key then
new_val[field_for_key] = key
end
arr[i] = new_val
end
return setmetatable(arr, array_mt or get_array_mt())
end
local export_mt = {}
function export_mt:__call(...)
local arr
if select("#", ...) == 1 and type((...)) == "table" then
arr = ...
local mt = getmetatable(arr)
-- If table has been loaded with mw.loadData, copy it to avoid the
-- limitations of it being a virtual table.
if mt and type(mt) == "table" and rawget(mt, "mw_loadData") == true then
arr = shallow_copy(arr)
end
else
arr = {...}
end
return setmetatable(arr, array_mt or get_array_mt())
end
function export_mt:__index(key)
-- Convert underscores to camel case: num_keys -> numKeys.
-- FIXME: this is pointless overhead: remove once nothing relies on it.
key = underscore_to_camel_case(key)
key = alias_of[key] or key
local func = rawget(self, key)
if func ~= nil then
return func
elseif (m_table_new_array_funcs or get_m_table_new_array_funcs())[key] then
func = get_module_function(key, m_table or get_m_table(), "table")
elseif (m_function_new_array_funcs or get_m_function_new_array_funcs())[key] then
func = get_module_function(key, m_function or get_m_function(), "fun")
else
return nil
end
func = wrap_in_array_constructor(func)
rawset(export, key, func)
return func
end
return setmetatable(export, export_mt)
sxt52fsnry0sg9endqo2zu3aaj23mkn
Mòideal:array/doc
828
13860
86285
69779
2026-07-22T07:04:46Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:Array/doc]] gu [[Mòideal:array/doc]]
69779
wikitext
text/x-wiki
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{Toolbar|style=font-size:90% |separator=tpt-languages
| 1 = [[:Deasbaireachd mòideil:Array|deasbaireachd]]
| 2 = {{Edit|1=Mòideal:Array|2=deasaich}}
| 3 = {{History|Mòideal:Array|eachdraidh}}
| 4 = [{{fullurl:Sònraichte:WhatLinksHere/:Mòideal:Array|limit=999}} ceanglaichean]
| 5 = [[:Mòideal:Array/doc|doc]]
| 6 = [[:Sònraichte:PrefixIndex/Mòideal:Array|fo-dhuilleagan]]
| 7 = [[:Mòideal:Array/sandbox|bogsa gainmhich]]
| 8 = [[:Mòideal:Array/testcases|cùisean deuchainn]]
}}
{{pp-template}}
{{Module rating|protected}}
Based on {{enUicl|Module:array}} on English Wiktionary. See there for more information.
Formerly used the submodule [[Mòideal:Array/table]], which was a copy of {{enUicl|Module:Table}} on English Wiktionary, but this was deleted because it was deemed too similar to {{enUicl|Module:TableTools}}. {{enUicl|Module:TableTools}} has many of the same methods, but is template-editor-protected and it is hard to keep it compatible with this module.
<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox | |
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Roinn-seòrsa:Lua metamodules]]
[[Roinn-seòrsa:Teamplaidean sa Bheurla]]
}}</includeonly><noinclude>
[[Roinn-seòrsa:Documentation subpages]]
</noinclude>
9c2p2dgrjwu3b0d0v968m64wl4ivpim
Mòideal:IPA
828
16476
86208
85059
2026-07-21T21:58:01Z
Altronic
4137
Update module to the most recent version on English Wiktionary
86208
Scribunto
text/plain
local export = {}
local force_cat = false -- for testing
local pages_module = "Module:pages"
local pron_qualifier_module = "Module:pron qualifier"
local qualifier_module = "Module:qualifier"
local references_module = "Module:references"
local string_utilities_module = "Module:string utilities"
local syllables_module = "Module:syllables"
local utilities_module = "Module:utilities"
local m_data = mw.loadData("Module:IPA/data")
local m_str_utils = require(string_utilities_module)
local m_syllables -- [[Module:syllables]]; loaded below if needed
local m_symbols = mw.loadData("Module:IPA/data/symbols")
local concat = table.concat
local decode_entities = m_str_utils.decode_entities
local find = string.find
local gcodepoint = m_str_utils.gcodepoint
local gmatch = m_str_utils.gmatch
local gsub = string.gsub
local insert = table.insert
local is_preview = require(pages_module).is_preview
local len = m_str_utils.len
local listToText = mw.text.listToText
local match = string.match
local pattern_escape = m_str_utils.pattern_escape
local sub = string.sub
local u = m_str_utils.char
local ugsub = m_str_utils.gsub
local umatch = m_str_utils.match
local usub = m_str_utils.sub
local function with_codepoints(s)
if find(s, "%S%s") then
local parts = {}
for ch in gmatch(s, "%S") do
parts[#parts + 1] = with_codepoints(ch)
end
return concat(parts, ", ")
end
local cps = {}
for cp in gcodepoint(s) do
cps[#cps + 1] = ("U+%04X"):format(cp)
end
return s .. " [" .. concat(cps, " ") .. "]"
end
local namespace = mw.title.getCurrentTitle().nsText
local function is_content_page(lang, namespace)
return namespace == "" or namespace == "Reconstruction" or
lang and lang:hasType("appendix-constructed") and namespace == "Appendix"
end
-- Etymology-only languages are not L2 entry languages; IPA should use the parent full language.
local function assert_not_etymology_only_lang(lang)
if lang and lang.hasType and lang:hasType("language", "etymology-only") then
local parent_code = lang.getParentCode and lang:getParentCode() or nil
error(("Cannot use IPA with the etymology-only language %q; use the parent full language %q instead."):format(lang:getCode(), parent_code))
end
end
local function track(page)
require("Module:debug/track")("IPA/" .. page)
return true
end
local function process_maybe_split_categories(split_output, categories, prontext, lang, errtext)
if split_output ~= "raw" then
if categories[1] then
categories = require(utilities_module).format_categories(categories, lang, nil, nil, force_cat)
else
categories = ""
end
end
if split_output then -- for use of IPA in links, etc.
if errtext then
return prontext, categories, errtext
else
return prontext, categories
end
else
return prontext .. (errtext or "") .. categories
end
end
--[==[
Format a line of one or more IPA pronunciations as {{tl|IPA}} would do it, i.e. with a preceding {"IPA:"} followed by
the word {"key"} linking to an Appendix page describing the language's phonology, and with an added category
` ``lang`` terms with IPA pronunciation`. Other than the extra preceding text and category, this is identical
to {format_IPA_multiple()}, and the considerations described there in the documentation apply here as well. There is a
single parameter `data`, an object with the following fields:
* `lang`: Object representing the language of the pronunciations, which is used when adding cleanup categories for
pronunciations with invalid phonemes; for determining how many syllables the pronunciations have in them, in order to
add a category such as [[:Category:Italian 2-syllable words]] (for certain languages only); for adding a category
` ``lang`` terms with IPA pronunciation`; and for determining the proper sort keys for categories. Unlike
for {format_IPA_multiple()}, `lang` may not be {nil}.
* `items`: List of pronunciations, in exactly the same format as for {format_IPA_multiple()}.
* `err`: If not {nil}, a string containing an error message to use in place of the link to the language's phonology.
* `separator`: The default separator to use when separating formatted items. Defaults to {", "}. Does not apply to the
first item, where the default separator is always the empty string. Overridden by the per-item `separator` field in
`items`.
* `sort_key`: Explicit sort key used for categories.
* `no_count`: Suppress adding a {#-syllable words} category such as [[:Category:Italian 2-syllable words]]. Note that
only certain languages add such categories to begin with, because it depends on knowing how to count syllables in a
given language, which depends on the phonology of the language. Also, this does not suppress the addition of cleanup
or other categories. If you need them suppressed, use `split_output` to return the categories separately and ignore
them.
* `split_output`: If not given, the return value is a concatenation of the formatted pronunciation and formatted
categories. Otherwise, two values are returned: the formatted pronunciation and the categories. If `split_output` is
the value {"raw"}, the categories are returned in list form, where the list elements are a combination of category
strings and category objects of the form suitable for passing to {format_categories()} in [[Module:utilities]]. If
`split_output` is any other value besides {nil}, the categories are returned as a pre-formatted concatenated string.
* `include_langname`: If specified, prefix the result with the language name, followed by a colon.
* `q`: {nil} or a list of left qualifiers (as in {{tl|q}}) to display at the beginning, before the formatted
pronunciations and preceding {"IPA:"}.
* `qq`: {nil} or a list of right qualifiers to display after all formatted pronunciations.
* `a`: {nil} or a list of left accent qualifiers (as in {{tl|a}}) to display at the beginning, before the formatted
pronunciations and preceding {"IPA:"}.
* `aa`: {nil} or a list of right accent qualifiers to display after all formatted pronunciations.
]==]
function export.format_IPA_full(data)
if type(data) ~= "table" or data.getCode then
error("Must now supply a table of arguments to format_IPA_full(); first argument should be that table, not a language object")
end
local lang = data.lang
local items = data.items
local err = data.err
local separator = data.separator
local sort_key = data.sort_key
local no_count = data.no_count
local split_output = data.split_output
local q = data.q
local qq = data.qq
local a = data.a
local aa = data.aa
local include_langname = data.include_langname
local hasKey = m_data.langs_with_infopages
if not lang or not lang.getCode then
error("Must specify language to format_IPA_full()")
end
assert_not_etymology_only_lang(lang)
local langname = lang:getCanonicalName()
local prefix_text
if err then
prefix_text = '<span class="error">' .. err .. '</span>'
else
if hasKey[lang:getCode()] then
prefix_text = "Appendix:" .. langname .. " pronunciation"
else
prefix_text = "wikipedia:" .. langname .. " phonology"
end
prefix_text = "[[" .. prefix_text .. "|key]]"
end
local prefix = "[[Wiktionary:International Phonetic Alphabet|IPA]]<sup>(" .. prefix_text .. ")</sup>: "
local IPAs, categories = export.format_IPA_multiple(lang, items, separator, no_count, "raw")
if is_content_page(lang, namespace) then
insert(categories, {
cat = langname .. " terms with IPA pronunciation",
sort_key = sort_key
})
end
local prontext = prefix .. IPAs
if q and q[1] or qq and qq[1] or a and a[1] or aa and aa[1] then
prontext = require(pron_qualifier_module).format_qualifiers {
lang = lang,
text = prontext,
q = q,
qq = qq,
a = a,
aa = aa,
}
end
if include_langname then
prontext = langname .. ": " .. prontext
end
return process_maybe_split_categories(split_output, categories, prontext, lang)
end
local function split_phonemic_phonetic(pron)
local reconstructed, phonemic, phonetic = match(pron, "^(%*?)(/.-/)%s+(%[.-%])$")
if reconstructed then
return reconstructed .. phonemic, reconstructed .. phonetic
else
return pron, nil
end
end
local function determine_repr(pron)
local reconstructed
-- Temporarily remove any initial asterisk before representation marks,
-- which avoids having to account for it in the data, but set the
-- `reconstructed` flag.
if sub(pron, 1, 1) == "*" then
reconstructed = true
pron = sub(pron, 2)
end
-- Some representation types have aliases for convenience (e.g. "// //" is
-- an alias for "⫽ ⫽"). and these need to be substituted in before checking
-- for other data.
local opening, n = match(pron, "^.[\128-\191]*")
local subs_data = m_data.representation_subs[opening]
if subs_data then
pron, n = ugsub(pron, subs_data[1], subs_data[2])
-- If the substitution was made, `opening` needs to be changed to the
-- new opening character.
if n ~= 0 then
opening = subs_data[3]
end
end
-- Get the type data based on the opening character (if any), and set the
-- representation type if the closing character matches.
local type_data, repr, closing = m_data.representation_types[opening]
if type_data then
closing = type_data[2]
if type_data and match(pron, pattern_escape(closing) .. "$", #opening + 1) then
repr = type_data[1]
end
end
-- Default to the empty string.
if not repr then
opening, closing = "", ""
end
-- Reattach the asterisk if reconstructed.
if reconstructed then
pron = "*" .. pron
end
return pron, repr, opening, closing, reconstructed
end
local function hasInvalidSeparators(transcription)
-- Escape certain characters as well as pauses, which have the format "(...)" (with any number of dots), to avoid false-positives.
transcription = transcription:gsub(".[\128-\191]*", m_symbols.separator_escapes)
:gsub("%(%.+%)", "\3")
:gsub("[()]+", "")
return (
transcription:find("..", nil, true) or
transcription:match("%.%f[%z \1\2\3,:;]") or
transcription:match("\1%f[%z \2\3,:;]") or
transcription:match("\2%f[%z \1\3,:;]") or
transcription:match("\3[:;]") or
transcription:match("%f[^%z \1\2\3,]%.")
) and true or false
end
--[==[
Format a line of one or more bare IPA pronunciations (i.e. without any preceding {"IPA:"} and without adding to a
category ` ``lang`` terms with IPA pronunciation`). Individual pronunciations are formatted using
{format_IPA()} and are combined with separators, qualifiers, pre-text, post-text, etc. to form a line of pronunciations.
Parameters accepted are:
* `lang` is an object representing the language of the pronunciations, which is used when adding cleanup categories for
pronunciations with invalid phonemes; for determining how many syllables the pronunciations have in them, in order to
add a category such as [[:Category:Italian 2-syllable words]] (for certain languages only); and for computing the
proper sort keys for categories. `lang` may be {nil}.
* `items` is a list of pronunciations, each of which is an object with the following properties:
** `pron`: the pronunciation, in the same format as is accepted by {format_IPA()}, i.e. it should be either phonemic
(surrounded by {/.../}), phonetic (surrounded by {[...]}), orthographic (surrounded by {⟨...⟩}) or a rhyme
(beginning with a hyphen);
** `pretext`: text to display directly before the formatted pronunciation, inside of any qualifiers or accent
qualifiers;
** `posttext`: text to display directly after the formatted pronunciation, inside of any qualifiers or accent
qualifiers;
** `q` or `qualifiers`: {nil} or a list of left qualifiers (as in {{tl|q}}) to display before the formatted
pronunciation; note that `qualifiers` is deprecated;
** `qq`: {nil} or a list of right qualifiers to display after the formatted pronunciation;
** `a`: {nil} or a list of left accent qualifiers (as in {{tl|a}}) to display before the formatted pronunciation;
** `aa`: {nil} or a list of right accent qualifiers to after before the formatted pronunciation;
** `refs`: {nil} or a list of references or reference specs to add after the pronunciation and any posttext and
qualifiers; the value of a list item is either a string containing the reference text (typically a call to a
citation template such as {{tl|cite-book}}, or a template wrapping such a call), or an object with fields `text`
(the reference text), `name` (the name of the reference, as in {{cd|<nowiki><ref name="foo">...</ref></nowiki>}}
or {{cd|<nowiki><ref name="foo" /></nowiki>}}) and/or `group` (the group of the reference, as in
{{cd|<nowiki><ref name="foo" group="bar">...</ref></nowiki>}} or
{{cd|<nowiki><ref name="foo" group="bar"/></nowiki>}}); this uses a parser function to format the reference
appropriately and insert a footnote number that hyperlinks to the actual reference, located in the
{{cd|<nowiki><references /></nowiki>}} section;
** `gloss`: {nil} or a gloss (definition) for this item, if different definitions have different pronunciations;
** `pos`: {nil} or a part of speech for this item, if different parts of speech have different pronunciations;
** `separator`: the separator text to insert directly before the formatted pronunciation and all qualifiers, accent
qualifiers and pre-text; defaults to the outer `separator` parameter.
* `separator`: The default separator to use when separating formatted items. Defaults to {", "}. Does not apply to the
first item, where the default separator is always the empty string. Overridden by the per-item `separator` field in
`items`.
* `no_count`: Suppress adding a {#-syllable words} category such as [[:Category:Italian 2-syllable words]]. Note that
only certain languages add such categories to begin with, because it depends on knowing how to count syllables in a
given language, which depends on the phonology of the language. Also, this does not suppress the addition of cleanup
categories. If you need them suppressed, use `split_output` to return the categories separately and ignore them.
* `split_output`: If not given, the return value is a concatenation of the formatted pronunciation and formatted
categories. Otherwise, two values are returned: the formatted pronunciation and the categories. If `split_output` is
the value {"raw"}, the categories are returned in list form, where the list elements are a combination of category
strings and category objects of the form suitable for passing to {format_categories()} in [[Module:utilities]]. If
`split_output` is any other value besides {nil}, the categories are returned as a pre-formatted concatenated string.
]==]
function export.format_IPA_multiple(lang, items, separator, no_count, split_output)
local categories = {}
separator = separator or ", "
if not lang then
track("format-multiple-nolang")
else
assert_not_etymology_only_lang(lang)
end
-- Format
if not items[1] then
if namespace == "Template" then
insert(items, {pron = "/aɪ piː ˈeɪ/"})
else
insert(categories, "Pronunciation templates without a pronunciation")
end
end
local bits = {}
for i, item in ipairs(items) do
local bit
-- If the pronunciation is entirely empty, allow this and don't do anything, so that e.g. the pretext and/or
-- posttext can be specified to force something like ''unknown'' to appear in place of the pronunciation
-- (as happens e.g. when ? is used as a respelling in [[Module:ca-IPA]]; see [[guèiser]] for an example).
if item.pron == "" then
bit = ""
else
local item_categories, errtext
bit, item_categories, errtext = export.format_IPA(lang, item.pron, "raw")
bit = bit .. errtext
for _, cat in ipairs(item_categories) do
insert(categories, cat)
end
end
if item.pretext then
bit = item.pretext .. bit
end
if item.posttext then
bit = bit .. item.posttext
end
local has_qualifiers = item.q and item.q[1] or item.qq and item.qq[1] or item.qualifiers and item.qualifiers[1]
or item.a and item.a[1] or item.aa and item.aa[1]
local has_gloss_or_pos = item.gloss or item.pos
if has_qualifiers or has_gloss_or_pos then
-- FIXME: Currently we tack the gloss and POS (in that order) onto the end of the regular left qualifiers.
-- Should we do something different?
local q = item.q
if has_gloss_or_pos then
q = mw.clone(item.q) or {}
if item.gloss then
local m_qualifier = require(qualifier_module)
insert(q, m_qualifier.wrap_qualifier_css("“", "quote") .. item.gloss ..
m_qualifier.wrap_qualifier_css("”", "quote"))
end
if item.pos then
-- FIXME: Consider expanding aliases as found in [[Module:headword/data]] or similar.
insert(q, item.pos)
end
end
bit = require("Module:pron qualifier").format_qualifiers {
lang = lang,
text = bit,
q = q,
qq = item.qq,
qualifiers = item.qualifiers,
a = item.a,
aa = item.aa,
}
end
if item.note then
-- Support removed on 2024-06-15.
error("Support for `.note` has been removed; switch to `.refs` (which must be a list)")
end
if item.refs then
local refspecs = item.refs
if #refspecs > 0 then
bit = bit .. require(references_module).format_references(refspecs)
end
end
bit = (item.separator or (i == 1 and "" or separator)) .. bit
insert(bits, bit)
--[=[ [[Special:WhatLinksHere/Wiktionary:Tracking/IPA/syntax-error]]
The length or gemination symbol should not appear after a syllable break or stress symbol. ]=]
-- The nature of the following pattern match is such that we don't have to split a combined '/.../ [...]' spec
-- into its parts in order to process.
if match(item.pron, "[.\203][\136\140]?\203[\144\145]") then -- [.ˈˌ][ːˑ]
track("syntax-error")
end
if lang then
-- Add syllable count if the language's diphthongs are listed in [[Module:syllables]].
-- Don't do this if the term has spaces, a liaison mark (‿) or isn't in mainspace.
if not no_count and namespace == "" then
m_syllables = m_syllables or require(syllables_module)
local langcode = lang:getCode()
if m_data.langs_to_generate_syllable_count_categories[langcode] then
local raw_phonemic, phonetic, use_it = split_phonemic_phonetic(item.pron)
local phonemic, repr = determine_repr(raw_phonemic)
if not phonetic then -- not a '/.../ [...]' combined pronunciation
if m_data.langs_to_use_phonetic_or_phonemic_notation[langcode] then
use_it = phonemic
elseif m_data.langs_to_use_phonetic_notation[langcode] then
use_it = repr == "phonetic" and phonemic or nil
else
use_it = repr == "phonemic" and phonemic or nil
end
elseif repr == "phonetic" then
use_it = phonetic
elseif repr == "phonemic" then
use_it = phonemic
end
-- Note: two uses of find with plain patterns is much faster than umatch with [ ‿].
if use_it and not (find(use_it, " ") or find(use_it, "‿")) then
local syllable_count = m_syllables.getVowels(use_it, lang)
if syllable_count then
insert(categories, lang:getCanonicalName() .. " " .. syllable_count ..
"-syllable words")
end
end
end
end
end
end
return process_maybe_split_categories(split_output, categories, concat(bits), lang)
end
--[=[
Format a single IPA pronunciation, which cannot be a combined spec (such as {/.../ [...]}). This has been extracted from
{format_IPA()} to allow the latter to handle such combined specs. This works like {format_IPA()} but requires that
pre-created {err} (for error messages) and {categories} lists be passed in, and adds any generated error messages and
categories to those lists. A single value is returned, the pronunciation, which is usually the same as passed in, but
may have HTML added surrounding invalid characters so they appear in red.
]=]
local function format_one_IPA(lang, raw_pron, err, categories)
-- Disallow wikilinks.
if match(raw_pron, "%[%[.-%]%]") then
error("IPA input must not contain wikilinks.")
end
raw_pron = decode_entities(raw_pron)
-- Detect the type of transcription.
local pron, repr, opening, closing, reconstructed = determine_repr(raw_pron)
-- Strip any reconstruction asterisk and representation marks.
pron = sub(pron, #opening + 1 + (reconstructed and 1 or 0), -#closing - 1)
if not repr then
insert(categories, "IPA pronunciations with invalid representation marks")
-- insert(err, "invalid representation marks")
-- Removed because it's annoying when previewing pronunciation pages.
end
if repr ~= "orthographic" and lang and lang:getCode() == "en" and hasInvalidSeparators(pron) then
insert(categories, "English IPA pronunciations with invalid separators")
end
if pron == "" then
insert(categories, "IPA pronunciations with no pronunciation present")
end
-- Check for obsolete and nonstandard symbols
for _, symbol in ipairs(m_data.nonstandard) do
local result
for nonstandard in gmatch(pron, symbol) do
if not result then
result = {}
end
insert(result, nonstandard)
insert(categories,
{cat = "IPA pronunciations with obsolete or nonstandard characters", sort_key = nonstandard}
)
end
if result then
insert(err, "obsolete or nonstandard characters (" .. concat(result) .. ")")
break
end
end
--[[ Check for invalid symbols after removing the following:
1. wikilinks (handled above)
2. paired HTML tags
3. bolding
4. italics
5. asterisk at beginning of transcription
6. comma followed by spacing characters
7. superscripts enclosed in superscript parentheses ]]
local found_HTML
local result = gsub(pron, "<(%a+)[^>]*>([^<]+)</%1>",
function(tagName, content)
found_HTML = true
return content
end)
result = gsub(result, "'''([^']*)'''", "%1")
result = gsub(result, "''([^']*)''", "%1")
result = gsub(result, "^%*", "")
result = ugsub(result, ",%s+", "")
-- VS15
local vs15_class = "[" .. m_symbols.add_vs15 .. "]"
if umatch(pron, vs15_class) then
local vs15 = u(0xFE0E)
if find(result, vs15) then
result = gsub(result, vs15, "")
pron = gsub(pron, vs15, "")
end
pron = ugsub(pron, vs15_class, "%0" .. vs15)
end
if result ~= "" then
local content_page = is_content_page(lang, namespace)
if lang then
-- Get the per_lang_valid data, and convert any per-language valid sequences to spaces.
local per_lang_valid = m_symbols.per_lang_valid[lang:getCode()]
if per_lang_valid then
if type(per_lang_valid) == "table" then
for _, pattern in pairs(per_lang_valid) do
result = ugsub(result, pattern, " ")
end
else -- Should be a string.
result = ugsub(result, per_lang_valid, " ")
end
end
end
local suggestions = {}
-- Check for any invalid sequences, excluding anything in the per-language lookup table.
for k, v in pairs(m_symbols.invalid) do
if find(result, k, nil, true) then
insert(suggestions, with_codepoints(k) .. " with " .. with_codepoints(v))
end
end
if suggestions[1] then
local replacements = "replace " .. listToText(suggestions)
if content_page then
error("Invalid IPA: " .. replacements)
end
insert(err, replacements)
end
-- Convert any valid character sequences to spaces
for _, pattern in pairs(m_symbols.valid) do
result = ugsub(result, pattern, " ")
end
if not match(result, "^ *$") then
local category = "IPA pronunciations with invalid IPA characters"
if not content_page then
category = category .. "/non_mainspace"
end
insert(categories, category)
insert(err, "invalid IPA characters: " .. with_codepoints(result))
end
end
if found_HTML then
insert(categories, "IPA pronunciations with paired HTML tags")
end
if (repr == "phonemic" or repr == "rhyme") and lang and m_data.phonemes[lang:getCode()] then
local valid_phonemes = m_data.phonemes[lang:getCode()]
local rest = pron
local phonemes = {}
while #rest > 0 do
local longestmatch, longestmatch_len = "", 0
local rest_init = sub(rest, 1, 1)
if rest_init == "(" or rest_init == ")" then
longestmatch = rest_init
longestmatch_len = 1
else
for _, phoneme in ipairs(valid_phonemes) do
local phoneme_len = len(phoneme)
if phoneme_len > longestmatch_len and usub(rest, 1, phoneme_len) == phoneme then
longestmatch = phoneme
longestmatch_len = len(longestmatch)
end
end
end
if longestmatch_len > 0 then
insert(phonemes, longestmatch)
rest = usub(rest, longestmatch_len + 1)
else
local phoneme = usub(rest, 1, 1)
insert(phonemes, "<span style=\"color: var(--wikt-palette-red,red)\">" .. phoneme .. "</span>")
rest = usub(rest, 2)
insert(categories, "IPA pronunciations with invalid phonemes/" .. lang:getCode())
track("invalid phonemes/" .. phoneme)
end
end
pron = concat(phonemes)
end
return (reconstructed and "*" or "") .. opening .. pron .. closing
end
--[==[
Format an IPA pronunciation. This wraps the pronunciation in appropriate CSS classes and adds cleanup categories and
error messages as needed. The pronunciation `pron` should be either phonemic (surrounded by {/.../}), phonetic
(surrounded by {[...]}), orthographic (surrounded by {⟨...⟩}), a rhyme (beginning with a hyphen) or a combined
phonemic/phonetic spec (of the form {/.../ [...]}). `lang` indicates the language of the pronunciation and can be {nil}.
If not {nil}, and the specified language has data in [[Module:IPA/data]] indicating the allowed phonemes, then the page
will be added to a cleanup category and an error message displayed next to the outputted pronunciation. Note that {lang}
also determines sort key processing in the added cleanup categories. If `split_output` is not given, the return value is
a concatenation of the formatted pronunciation, error messages and formatted cleanup categories. Otherwise, three values
are returned: the formatted pronunciation, the cleanup categories and the concatenated error messages. If `split_output`
is the value {"raw"}, the cleanup categories are returned in list form, where the list elements are a combination of
category strings and category objects of the form suitable for passing to {format_categories()} in [[Module:utilities]].
If `split_output` is any other value besides {nil}, the cleanup categories are returned as a pre-formatted concatenated
string.
]==]
function export.format_IPA(lang, pron, split_output)
local err = {}
local categories = {}
-- `pron` shouldn't contain ref tags.
if match(pron, "\127'\"`UNIQ%-%-ref%-[%dA-F]+%-QINU`\"'\127") then
error("<ref> tags found inside pronunciation parameter.")
end
if not lang then
track("format-nolang")
else
assert_not_etymology_only_lang(lang)
end
local phonemic, phonetic = split_phonemic_phonetic(pron)
pron = format_one_IPA(lang, phonemic, err, categories)
if phonetic then
track("phonemic-phonetic") -- There's no benefit to supporting the "/.../ [...]" format within one parameter.
phonetic = format_one_IPA(lang, phonetic, err, categories)
pron = pron .. " " .. phonetic
end
if err[1] and is_preview() then
err = '<span class="error" style="font-size: small;> ' .. concat(err, ", ") .. "</span>"
else
err = ""
end
return process_maybe_split_categories(split_output, categories, '<span class="IPA nowrap">' .. pron .. "</span>", lang,
err)
end
--[==[
Format a line of one or more enPR pronunciations as {{tl|enPR}} would do it, i.e. with a preceding {"enPR:"} (linked to
[[Appendix:English pronunciation]]) followed by one or more formatted, comma-separated enPR pronunciations. The
pronunciations are formatted by wrapping them in the `AHD` and `enPR` CSS classes and adding any left and
right regular and accent qualifiers. In addition, the overall result is wrapped in any overall left and right regular
and accent qualifiers. There is a single parameter `data`, an object with the following fields:
* `items` is a list of enPR pronunciations, each of which is an object with the following properties:
** `pron`: the enPR pronunciation;
** `q`: {nil} or a list of left qualifiers (as in {{tl|q}}) to display before the formatted pronunciation;
** `qq`: {nil} or a list of right qualifiers to display after the formatted pronunciation;
** `a`: {nil} or a list of left accent qualifiers (as in {{tl|a}}) to display before the formatted pronunciation;
** `aa`: {nil} or a list of right accent qualifiers to after before the formatted pronunciation.
* `q`: {nil} or a list of left qualifiers (as in {{tl|q}}) to display at the beginning, before the formatted
pronunciations and preceding {"enPR:"}.
* `qq`: {nil} or a list of right qualifiers to display after all formatted pronunciations.
* `a`: {nil} or a list of left accent qualifiers (as in {{tl|a}}) to display at the beginning, before the formatted
pronunciations and preceding {"enPR:"}.
* `aa`: {nil} or a list of right accent qualifiers to display after all formatted pronunciations.
]==]
function export.format_enPR_full(data)
local prefix = "[[Appendix:English pronunciation|enPR]]: "
local lang = require("Module:languages").getByCode("en")
local parts = {}
for _, item in ipairs(data.items) do
local part = '<span class="AHD enPR">' .. item.pron .. "</span>"
if item.q and item.q[1] or item.qq and item.qq[1] or item.a and item.a[1] or item.aa and item.aa[1] then
part = require("Module:pron qualifier").format_qualifiers {
lang = lang,
text = part,
q = item.q,
qq = item.qq,
a = item.a,
aa = item.aa,
}
end
insert(parts, part)
end
local prontext = prefix .. concat(parts, ", ")
if data.q and data.q[1] or data.qq and data.qq[1] or data.a and data.a[1] or data.aa and data.aa[1] then
prontext = require(pron_qualifier_module).format_qualifiers {
lang = lang,
text = prontext,
q = data.q,
qq = data.qq,
a = data.a,
aa = data.aa,
}
end
return prontext
end
return export
rywje37egglxdde7f60rf69k2hw36es
Mòideal:IPA/data
828
16477
86209
85060
2026-07-21T22:00:44Z
Altronic
4137
Update module to the most recent version on English Wiktionary
86209
Scribunto
text/plain
local list_to_set = require("Module:table").listToSet
local data = {}
--[=[
A list of representation types (e.g. /foo/ for phonemic and [bar] for phonetic),
given as a table. The key is the opening character, the first value the
representation type, and the second value the closing symbol.]=]
data.representation_types = {
["/"] = {"phonemic", "/"},
["["] = {"phonetic", "]"},
["⫽"] = {"morphophonemic", "⫽"},
["⟨"] = {"orthographic", "⟩"},
["-"] = {"rhyme", ""},
}
--[=[
A list of convenience inputs for certain representation types. The key is the
opening character, and the table is a three-item array consisting of (1) an
mw.ustring.gsub pattern which is anchored to the start and end of the string,
with a single capture group that excludes the characters to be substituted,
(2) a corresponding replacement pattern to be used with the pattern, and (3) the
replacement opening character.]=]
data.representation_subs = {
["<"] = {"^<(.*)>$", "⟨%1⟩", "⟨"},
["/"] = {"^//(.*)//$", "⫽%1⫽", "⫽"},
}
--[=[
This should list the language codes of all languages that have a pronunciation
page in the appendix of the form ''Appendix:LANG pronunciation'', e.g.
[[Appendix:Russian pronunciation]]. For these languages, the text "key" next to
the generated pronunciation links to such pages; for other languages, it links
to the "LANG phonology" page in Wikipedia (which may or may not exist).
[[Module:IPA]] is responsible for this linking; see format_IPA_full().]=]
data.langs_with_infopages = list_to_set{
"acw",
"ady",
"ang",
"arc",
"ba",
"bg",
"bo",
"ca",
"cho",
"cmn",
"cs",
"cv",
"cy",
"da",
"de",
"dsb",
"dz",
"egl",
"egy",
"el",
"en",
"enm",
"eo",
"es",
"fa",
"fi",
"fo",
"fr",
"fy",
"ga",
"gd",
"ghc",
"gmh",
"gmw-msc",
"got",
"he",
"hi",
"hrx",
"hu",
"hy",
"id",
"ii",
"is",
"it",
"iu",
"ja",
"jbo",
"ka",
"kls",
"ko",
"kw",
"la",
"lb",
"liv",
"lt",
"lv",
"mdf",
"mfe",
"mic",
"mk",
"mns-nor",
"ms",
"mt",
"mul",
"my",
"nan",
"nci",
"nl",
"nn",
"no",
"nov",
"nv",
"pjt",
"pl",
"ps",
"pt",
"ro",
"ru",
"scn",
"sco",
"sga",
"sh",
"sl",
"sq",
"sv",
"sw",
"syc",
"szl",
"tg",
"th",
"tl",
"tpw",
"tr",
"tyv",
"ug",
"uk",
"vi",
"vo",
"wlm",
"yi",
"yrl",
"yue",
"zlw-mas"
}
--[=[
This should list the diphthongs of a language (in the form of Lua patterns),
provided they do *NOT* contain semivowel symbols such as /j w ɰ ɥ/ or vowels
with nonsyllabic diacritics such as /i̯ u̯/. For example, list /au/ or /aʊ/,
but do not list /aw/ or /au̯/. The data in this table is used to count the
number of syllables in a word. [[Module:syllables]] automatically knows how
to correctly handle semivowel symbols and nonsyllabic diacritics.
Any language listed here will automatically have categories of the form
"LANG #-syllable words" generated. In addition, any language listed below under
`langs_to_generate_syllable_count_categories` will also have such categories
generated.
NOTE: There are some additional languages that have these categories.
For example:
* Thai words have these categories added by [[Module:th-pron]].]=]
data.diphthongs = {
["cs"] = { -- [[w:Czech phonology#Diphthongs]]
"[aeo]u",
},
["de"] = {
"a[ɪʊ]",
"ɔ[ʏɪ]",
},
["en"] = { -- from [[Appendix:English pronunciation]] mostly, but /ʌɪ/ is from the OED
"[aɑæeɛoɔʌ][ɪi]",
"[ɑɒæo]e",
"[əɐ]ʉ",
"[aɒəoɔæ]ʊ",
"æo",
"[ɛeɪiɔʊʉ]ə", -- /iə/ is a diphthong in NZE, but a disyllabic sequence in GA.
-- /ɪə/ is both a disyllabic sequence and a diphthong in old-fashioned RP.
"[aʌ][ʊɪ]ə", -- May be a disyllabic sequence in some or all dialects?
},
["grc"] = {
"[aeyo]i",
"[ae]u",
"[ɛɔa]ː[iu]",
},
["hrx"] = {
"aɪ̯",
"aʊ̯",
"oɪ̯",
"eʊ̯",
},
["is"] = { -- [[w:Icelandic phonology#Vowels]]
"[aeɔœʏ]i", -- diphthongs as the module generates them
"[ao]u", -- diphthongs as the module generates them
"ø[iɪy]", -- additional forms that may occur; Wikipedia is oddly specific about the second element: ei and ai, but øɪ.
},
["it"] = {
"[aeɛoɔu]i",
"[aeɛioɔ]u",
},
["lb"] = {
"[iu]ə",
"[ɜoæɑ]ɪ",
"[əæɑ]ʊ",
},
["lt"] = {
"ɐɪ", "ɒʊ", "ɛɪ", "ɛʊ", "ʊɪ", "ɔɪ", "ɔʊ", -- Simple diphthongs (unstressed forms)
"iɛ", "uɔ", -- Complex diphthongs
"ɑˑɪ", "ɑˑʊ", "æˑɪ", "æˑʊ", "oˑɪ", -- Falling tone (acute)
"ɐɪˑ", "ɒʊˑ", "ɛɪˑ", "ɛʊˑ", "ʊɪˑ", -- Rising tone (tilde) - lengthened second element
-- Note: Mixed diphthongs (e.g., ɐlˑ, æˑn, ʊl, etc.) are omitted since they are inherently monosyllabic
},
}
--[=[
This should list any languages for which categories of the form
"LANG #-syllable words", e.g. [[:Category:Russian 3-syllable words]], should be
generated. Do not list languages here if they have an entry above under
`data.diphthongs`; such languages are automatically added to this list.]=]
local langs_to_generate_syllable_count_categories = list_to_set{
"ar", -- Arabic has diphthongs, but they are transcribed
-- with semivowel symbols.
"ary", -- Moroccan Arabic has diphthongs, but they are transcribed
-- with semivowel symbols.
"bg", -- Bulgarian has diphthongs with /j/ and marginally with /w/,
-- but these are semivowels.
"ca", -- Catalan has diphthongs, but they are generally transcribed using
-- /w/ and /j/, so do not need to be listed (see [[w:Catalan language#Diphthongs and triphthongs]].
"eo",
"es", -- Spanish has diphthongs, but they are transcribed with i̯ etc.
"eu", -- Basque has dipthongs, but they are transcribed with i̯ and u̯.
"fi", -- Finnish has diphthongs, but they are now automatically transcribed with
-- the nonsyllabic diacritic
"fr", -- French has diphthongs, but they are transcribed
-- with semivowel symbols: [[w:French phonology#Glides and diphthongs]].
"hnn",
"id", -- Indonesian has diphthongs, but they are transcribed with i̯ or /j/ etc.
"ka",
"kne",
"kmr",
"ku",
"la", -- All diphthongs transcribed with e̯ or /j/ etc.
"mk",
"ms", -- Malay has diphthongs, but they are transcribed with i̯ or /j/ etc.
"mt", -- Maltese has diphthongs, but they are transcribed
-- with semivowel symbols.
"pl", -- No diphthongs, properly speaking; sequences of a vowel and /w/ or /j/ though.
"pt", -- Portuguese has diphthongs, but they are transcribed with i̯ or /j/ etc.
"rsk", -- No diphthongs but there are sequences of vowel and /j/ or /w/.
"ru", -- No diphthongs, properly speaking; sequences of a vowel and /j/ though.
"sk", -- Slovak has rising diphthongs, /i̯e, i̯a, i̯u, u̯o/, which are probably always spelled with the nonsyllabic diacritic, so do not need to be listed.
"sl", -- No diphthongs, properly speaking; sequences of a vowel, /j/ and /w/ though
"sq", -- [[w:Albanian language#Vowels]] doesn't mention anything about diphthongs.
"szy", -- All diphthongs are transcribed with /j/ or /w/
"tl", -- Tagalog has diphthongs, but they are transcribed with i̯ or /j/ etc
"tsg",
"ug", -- No diphthongs.
}
-- Also add languages listed under `data.diphthongs`.
for langcode, _ in pairs(data.diphthongs) do
langs_to_generate_syllable_count_categories[langcode] = true
end
data.langs_to_generate_syllable_count_categories = langs_to_generate_syllable_count_categories
-- Languages to use the phonetic not phonemic notation to compute syllable counts.
data.langs_to_use_phonetic_notation = list_to_set{
"bg",
"es",
"id",
"la",
"lt",
"mk",
"ms",
"rsk",
"ru",
}
-- Languages to use the phonetic or phonemic notation to compute syllable counts, whichever is available.
data.langs_to_use_phonetic_or_phonemic_notation = list_to_set{
-- [[Module:is-IPA]] generates [...] but many manual pronuns use /.../.
"is",
}
-- Non-standard or obsolete IPA symbols.
data.nonstandard = {
--[[ The following symbols consist of more than one character,
so we can't put them in the line below. ]]
"ɑ̢", "ɔ̗", "ɔ̖",
"[?ƍσƺƪƞƛłščžǰǧǯẋⱻʚω∅ØȣᴀᴇⱻQKPT]"
}
-- See valid IPA characters at [[Module:IPA/data/symbols]].
data.phonemes = {}
data.phonemes["dz"] = {
"m", "n", "ŋ",
"p", "t", "ʈ", "k",
"pʰ", "tʰ", "ʈʰ", "kʰ",
"t͡s", "t͡ɕ",
"t͡sʰ", "t͡ɕʰ",
"w", "s", "z", "ɬ", "l", "r", "ɕ", "ʑ", "j", "h",
"ɑ", "e", "i", "o", "u",
"ɑː", "eː", "ɛː", "iː", "oː", "øː", "uː", "yː",
"ɑ˥", "e˥", "i˥", "o˥", "u˥",
"ɑː˥", "eː˥", "ɛː˥", "iː˥", "oː˥", "øː˥", "uː˥", "yː˥",
"m˥", "n˥", "ŋ˥", "p˥", "k˥", "k̚˥", "w˥", "l˥", "r˥", "ɕ˥", "j˥", ")˥",
"ɑ˩", "e˩", "i˩", "o˩", "u˩",
"ɑː˩", "eː˩", "ɛː˩", "iː˩", "oː˩", "øː˩", "uː˩", "yː˩",
"m˩", "n˩", "ŋ˩", "p˩", "k˩", "k̚˩", "w˩", "l˩", "r˩", "ɕ˩", "j˩", ")˩",
".", ",", "-",
}
data.phonemes["eo"] = {
"a", "b", "d", "d͡ʒ", "d͡z", "e", "f", "h", "i", "j", "k",
"l", "m", "n", "o", "p", "r", "s", "t", "t͡s", "t͡ʃ",
"u", "u̯", "v", "w", "x", "z", "ɡ", "ʃ", "ʒ",
"ˈ", ".", " ", "-", "u̯", "i̯"
}
data.phonemes["hy"] = {
"ɑ", "b", "ɡ", "d", "e", "z", "ə", "tʰ", "ʒ", "i", "l", "χ", "t͡s",
"k", "h", "d͡z", "ʁ", "t͡ʃ", "m", "j", "n", "ʃ", "ɔ", "t͡ʃʰ", "p", "d͡ʒ",
"r", "s", "v", "t", "ɾ", "t͡sʰ", "v", "pʰ", "kʰ", "o", "f", "ŋɡ", "ŋk",
"ŋχ", "u", "œ", "ʏ", "ˈ", "ˌ", ".", " ", "ː",
}
data.phonemes["nl"] = {
"m", "n", "ŋ",
"p", "b", "t", "d", "k", "ɡ",
"f", "v", "s", "z", "ʃ", "ʒ", "x", "ɣ", "ɦ",
"ʋ", "l", "j", "r",
"ɪ", "ʏ", "ɛ", "ə", "ɔ", "ɑ",
"i", "iː", "y", "yː", "u", "uː", "eː", "øː", "oː", "ɛː", "œː", "ɔː", "aː",
"ɛi̯", "œy̯", "ɔi̯", "ɑu̯", "ɑi̯",
"iu̯", "yu̯", "ui̯", "eːu̯", "oːi̯", "aːi̯",
"ˈ", "ˌ", ".", " ", "-",
}
data.phonemes["mt"] = {
"m", "n",
"p", "t", "k", "ʔ",
"b", "d", "ɡ",
"t͡s", "t͡ʃ",
"d͡z", "d͡ʒ",
"f", "s", "ʃ", "ħ",
"v", "z", "ʒ", "ɣ",
"l", "j", "w",
"r",
"ɪ", "ɛ", "ɔ", "a", "u",
"ɛˤ", "ɔˤ", "aˤ", "əˤ",
"ɛˤː", "ɔˤː", "aˤː", "əˤː", "ɪˤː",
"iː", "ɪː", "ɛː", "ɔː", "aː", "uː",
"ˈ", "ˌ", ".", " ", "‿", "-"
}
return data
9j3yfr5dzmr70htnh6pfy97jzb11aph
Mòideal:IPA/data/symbols
828
16478
86210
85061
2026-07-21T22:03:20Z
Altronic
4137
Copy from English Wiktionary
86210
Scribunto
text/plain
local data = {}
--[=[ Valid IPA symbols.
Currently almost all values of "title" and "link" keys
are just the comments that were used in [[Module:IPA]].
The "link" fields should be checked (those that start with an uppercase letter are checked). ]=]
--[=[
local phones = {}
-- Vowels.
phones["i"] = {
close = true,
front = true,
unrounded = true,
vowel = true,
}
phones["e"] = {
["close-mid"] = true,
front = true,
unrounded = true,
vowel = true,
}
phones["ɛ"] = {
["open-mid"] = true,
front = true,
unrounded = true,
vowel = true,
}
phones["æ"] = {
["near-open"] = true,
front = true,
unrounded = true,
vowel = true,
}
phones["a"] = {
open = true,
front = true,
unrounded = true,
vowel = true,
}
phones["y"] = {
close = true,
front = true,
rounded = true,
vowel = true,
}
phones["ø"] = {
["close-mid"] = true,
front = true,
rounded = true,
vowel = true,
}
phones["œ"] = {
["open-mid"] = true,
front = true,
rounded = true,
vowel = true,
}
phones["ɶ"] = {
open = true,
front = true,
rounded = true,
vowel = true,
}
phones["ɪ"] = {
["near-close"] = true,
["near-front"] = true,
unrounded = true,
vowel = true,
}
phones["ʏ"] = {
["near-close"] = true,
["near-front"] = true,
rounded = true,
vowel = true,
}
phones["ɨ"] = {
close = true,
central = true,
unrounded = true,
vowel = true,
}
phones["ᵻ"] = {
["near-close"] = true,
central = true,
unrounded = true,
vowel = true,
}
phones["ɘ"] = {
["close-mid"] = true,
central = true,
unrounded = true,
vowel = true,
}
phones["ɜ"] = {
["open-mid"] = true,
central = true,
unrounded = true,
vowel = true,
}
phones["ɝ"] = {
rhotic = true,
["open-mid"] = true,
central = true,
unrounded = true,
vowel = true,
}
phones["ə"] = {
mid = true,
central = true,
vowel = true,
}
phones["ɚ"] = {
rhotic = true,
mid = true,
central = true,
vowel = true,
}
phones["ɐ"] = {
["near-open"] = true,
central = true,
vowel = true,
}
phones["ʉ"] = {
close = true,
central = true,
rounded = true,
vowel = true,
}
phones["ᵿ"] = {
["near-close"] = true,
central = true,
rounded = true,
vowel = true,
}
phones["ɵ"] = {
["close-mid"] = true,
central = true,
rounded = true,
vowel = true,
}
phones["ɞ"] = {
["open-mid"] = true,
central = true,
rounded = true,
vowel = true,
}
phones["ʊ"] = {
["near-close"] = true,
["near-back"] = true,
rounded = true,
vowel = true,
}
phones["ɯ"] = {
close = true,
back = true,
unrounded = true,
vowel = true,
}
phones["ɤ"] = {
["close-mid"] = true,
back = true,
unrounded = true,
vowel = true,
}
phones["ʌ"] = {
["open-mid"] = true,
back = true,
unrounded = true,
vowel = true,
}
phones["ɑ"] = {
open = true,
back = true,
unrounded = true,
vowel = true,
}
phones["u"] = {
close = true,
back = true,
rounded = true,
vowel = true,
}
phones["o"] = {
["close-mid"] = true,
back = true,
rounded = true,
vowel = true,
}
phones["ɔ"] = {
["open-mid"] = true,
back = true,
rounded = true,
vowel = true,
}
phones["ɒ"] = {
open = true,
back = true,
rounded = true,
vowel = true,
}
-- Nasals.
phones["m"] = {
voiced = true,
bilabial = true,
nasal = true,
}
phones["ɱ"] = {
voiced = true,
labiodental = true,
nasal = true,
}
phones["n"] = {
voiced = true,
alveolar = true,
nasal = true,
}
phones["ɳ"] = {
voiced = true,
retroflex = true,
nasal = true,
}
phones["ɲ"] = {
voiced = true,
palatal = true,
nasal = true,
}
phones["ŋ"] = {
voiced = true,
velar = true,
nasal = true,
}
phones["𝼇"] = {
voiced = true,
velodorsal = true,
nasal = true,
}
phones["ɴ"] = {
voiced = true,
uvular = true,
nasal = true,
}
-- Plosives.
phones["p"] = {
voiceless = true,
bilabial = true,
plosive = true,
}
phones["b"] = {
voiced = true,
bilabial = true,
plosive = true,
}
phones["t"] = {
voiceless = true,
alveolar = true,
plosive = true,
}
phones["d"] = {
voiced = true,
alveolar = true,
plosive = true,
}
phones["ʈ"] = {
voiceless = true,
retroflex = true,
plosive = true,
}
phones["ɖ"] = {
voiced = true,
retroflex = true,
plosive = true,
}
phones["c"] = {
voiceless = true,
palatal = true,
plosive = true,
}
phones["ɟ"] = {
voiced = true,
palatal = true,
plosive = true,
}
phones["k"] = {
voiceless = true,
velar = true,
plosive = true,
}
phones["ɡ"] = {
voiced = true,
velar = true,
plosive = true,
}
phones["𝼃"] = {
voiceless = true,
velodorsal = true,
plosive = true,
}
phones["𝼁"] = {
voiced = true,
velodorsal = true,
plosive = true,
}
phones["q"] = {
voiceless = true,
uvular = true,
plosive = true,
}
phones["ɢ"] = {
voiced = true,
uvular = true,
plosive = true,
}
phones["ꞯ"] = {
voiceless = true,
["upper-pharyngeal"] = true,
plosive = true,
}
phones["𝼂"] = {
voiced = true,
["upper-pharyngeal"] = true,
plosive = true,
}
phones["ʡ"] = {
epiglottal = true,
plosive = true,
}
phones["ʔ"] = {
glottal = true,
plosive = true,
}
-- Fricatives.
phones["ɸ"] = {
voiceless = true,
bilabial = true,
fricative = true,
}
phones["β"] = {
voiced = true,
bilabial = true,
fricative = true,
}
phones["ʍ"] = {
voiceless = true,
["labial-velar"] = true,
fricative = true,
}
phones["f"] = {
voiceless = true,
labiodental = true,
fricative = true,
}
phones["v"] = {
voiced = true,
labiodental = true,
fricative = true,
}
phones["θ"] = {
voiceless = true,
dental = true,
["non-sibilant"] = true,
fricative = true,
}
phones["ð"] = {
voiced = true,
dental = true,
["non-sibilant"] = true,
fricative = true,
}
phones["s"] = {
voiceless = true,
alveolar = true,
sibilant = true,
fricative = true,
}
phones["z"] = {
voiced = true,
alveolar = true,
sibilant = true,
fricative = true,
}
phones["ɬ"] = {
voiceless = true,
alveolar = true,
lateral = true,
fricative = true,
}
phones["ɮ"] = {
voiced = true,
alveolar = true,
lateral = true,
fricative = true,
}
phones["ʃ"] = {
voiceless = true,
postalveolar = true,
sibilant = true,
fricative = true,
}
phones["ʒ"] = {
voiced = true,
postalveolar = true,
sibilant = true,
fricative = true,
}
phones["ʂ"] = {
voiceless = true,
retroflex = true,
sibilant = true,
fricative = true,
}
phones["ʐ"] = {
voiced = true,
retroflex = true,
sibilant = true,
fricative = true,
}
phones["ꞎ"] = {
voiceless = true,
retroflex = true,
lateral = true,
fricative = true,
}
phones["𝼅"] = {
voiced = true,
retroflex = true,
lateral = true,
fricative = true,
}
phones["ɕ"] = {
voiceless = true,
["alveolo-palatal"] = true,
sibilant = true,
fricative = true,
}
phones["ʑ"] = {
voiced = true,
["alveolo-palatal"] = true,
sibilant = true,
fricative = true,
}
phones["ç"] = {
voiceless = true,
palatal = true,
fricative = true,
}
phones["ʝ"] = {
voiced = true,
palatal = true,
fricative = true,
}
phones["𝼆"] = {
voiceless = true,
palatal = true,
lateral = true,
fricative = true,
}
phones["ɧ"] = {
voiceless = true,
["palatal-velar"] = true,
fricative = true,
}
phones["x"] = {
voiceless = true,
velar = true,
fricative = true,
}
phones["ɣ"] = {
voiced = true,
velar = true,
fricative = true,
}
phones["𝼄"] = {
voiceless = true,
velar = true,
lateral = true,
fricative = true,
}
phones["ʩ"] = {
voiceless = true,
velopharyngeal = true,
fricative = true,
}
phones["χ"] = {
voiceless = true,
uvular = true,
fricative = true,
}
phones["ʁ"] = {
voiced = true,
uvular = true,
fricative = true,
}
phones["ħ"] = {
voiceless = true,
pharyngeal = true,
fricative = true,
}
phones["ʕ"] = {
voiced = true,
pharyngeal = true,
fricative = true,
}
phones["ʜ"] = {
voiceless = true,
epiglottal = true,
fricative = true,
}
phones["ʢ"] = {
voiced = true,
epiglottal = true,
fricative = true,
}
phones["h"] = {
voiceless = true,
glottal = true,
fricative = true,
}
phones["ɦ"] = {
voiced = true,
glottal = true,
fricative = true,
}
-- Approximants.
phones["ʋ"] = {
voiced = true,
labiodental = true,
approximant = true,
}
phones["ɥ"] = {
voiced = true,
["labial–palatal"] = true,
approximant = true,
}
phones["w"] = {
voiced = true,
["labial–velar"] = true,
approximant = true,
}
phones["ɹ"] = {
voiced = true,
alveolar = true,
approximant = true,
}
phones["ꭨ"] = {
["velarized or pharyngealized"] = true,
voiced = true,
alveolar = true,
approximant = true,
}
phones["l"] = {
voiced = true,
alveolar = true,
lateral = true,
approximant = true,
}
phones["ɫ"] = {
["velarized or pharyngealized"] = true,
voiced = true,
alveolar = true,
lateral = true,
approximant = true,
}
phones["ɻ"] = {
voiced = true,
retroflex = true,
approximant = true,
}
phones["ɭ"] = {
voiced = true,
retroflex = true,
lateral = true,
approximant = true,
}
phones["j"] = {
voiced = true,
palatal = true,
approximant = true,
}
phones["ʎ"] = {
voiced = true,
palatal = true,
lateral = true,
approximant = true,
}
phones["ɰ"] = {
voiced = true,
velar = true,
approximant = true,
}
phones["ʟ"] = {
voiced = true,
velar = true,
lateral = true,
approximant = true,
}
-- Flaps.
phones["ⱱ"] = {
voiced = true,
labiodental = true,
flap = true,
}
phones["ɾ"] = {
voiced = true,
alveolar = true,
flap = true,
}
phones["ɺ"] = {
voiced = true,
alveolar = true,
lateral = true,
flap = true,
}
phones["ɽ"] = {
voiced = true,
retroflex = true,
flap = true,
}
phones["𝼈"] = {
voiced = true,
retroflex = true,
lateral = true,
flap = true,
}
-- Trills.
phones["ʙ"] = {
voiced = true,
bilabial = true,
trill = true,
}
phones["r"] = {
voiced = true,
alveolar = true,
trill = true,
}
phones["𝼀"] = {
voiceless = true,
velopharyngeal = true,
trill = true,
}
phones["ʀ"] = {
voiced = true,
uvular = true,
trill = true,
}
phones["ᴙ"] = {
voiced = true,
pharyngeal = true,
trill = true,
}
-- Clicks.
phones["ʘ"] = {
bilabial = true,
click = true,
}
phones["ǀ"] = {
dental = true,
click = true,
}
phones["ǃ"] = {
alveolar = true,
click = true,
}
phones["𝼊"] = {
retroflex = true,
click = true,
}
phones["ǂ"] = {
palatal = true,
click = true,
}
phones["ʞ"] = {
velar = true,
click = true,
}
phones["ǁ"] = {
lateral = true,
click = true,
}
-- Implosives.
phones["ɓ"] = {
voiced = true,
bilabial = true,
implosive = true,
}
phones["ɗ"] = {
voiced = true,
alveolar = true,
implosive = true,
}
phones["ᶑ"] = {
voiced = true,
retroflex = true,
implosive = true,
}
phones["ʄ"] = {
voiced = true,
palatal = true,
implosive = true,
}
phones["ɠ"] = {
voiced = true,
velar = true,
implosive = true,
}
phones["ʛ"] = {
voiced = true,
uvular = true,
implosive = true,
}
-- Percussives.
phones["ʬ"] = {
bilabial = true,
percussive = true,
}
phones["ʭ"] = {
bidental = true,
percussive = true,
}
phones["¡"] = {
sublaminal = true,
["lower-alveolar"] = true,
percussive = true,
}
]=]
local u = require("Module:string/char")
data[1] = {
-- PULMONIC CONSONANTS
-- nasal
["m"] = {
title = "bilabial nasal",
link = "w:Bilabial nasal",
},
["ɱ"] = {
title = "labiodental nasal",
link = "w:Labiodental nasal",
},
["n"] = {
title = "alveolar nasal",
link = "w:Alveolar nasal",
},
["ɳ"] = {
title = "retroflex nasal",
link = "w:Retroflex nasal",
},
["ɲ"] = {
title = "palatal nasal",
link = "w:Palatal nasal",
},
["ŋ"] = {
title = "velar nasal",
link = "w:Velar nasal",
},
["ɴ"] = {
title = "uvular nasal",
link = "w:Uvular nasal",
},
-- plosive
["p"] = {
title = "voiceless bilabial plosive",
link = "w:Voiceless bilabial stop",
},
["b"] = {
title = "voiced bilabial plosive",
link = "w:Voiced bilabial stop",
},
["t"] = {
title = "voiceless alveolar plosive",
link = "w:Voiceless alveolar stop",
},
["d"] = {
title = "voiced alveolar plosive",
link = "w:Voiced alveolar stop",
},
["ʈ"] = {
title = "voiceless retroflex plosive",
link = "w:Voiceless retroflex stop",
},
["ɖ"] = {
title = "voiced retroflex plosive",
link = "w:Voiced retroflex stop",
},
["c"] = {
title = "voiceless palatal plosive",
link = "w:Voiceless palatal stop",
},
["ɟ"] = {
title = "voiced palatal plosive",
link = "w:Voiced palatal stop",
},
["k"] = {
title = "voiceless velar plosive",
link = "w:Voiceless velar stop",
},
["ɡ"] = {
title = "voiced velar plosive",
link = "w:Voiced velar stop",
},
["q"] = {
title = "voiceless uvular plosive",
link = "w:Voiceless uvular stop",
},
["ɢ"] = {
title = "voiced uvular plosive",
link = "w:Voiced uvular stop",
},
["ʡ"] = {
title = "epiglottal plosive",
link = "w:Epiglottal stop",
},
["ʔ"] = {
title = "glottal stop",
link = "w:Glottal stop",
},
-- fricative
["ɸ"] = {
title = "voiceless bilabial fricative",
link = "w:Voiceless bilabial fricative",
},
["β"] = {
title = "voiced bilabial fricative",
link = "w:Voiced bilabial fricative",
},
["f"] = {
title = "voiceless labiodental fricative",
link = "w:Voiceless labiodental fricative",
},
["v"] = {
title = "voiced labiodental fricative",
link = "w:Voiced labiodental fricative",
},
["θ"] = {
title = "voiceless dental fricative",
link = "w:Voiceless dental fricative",
},
["ð"] = {
title = "voiced dental fricative",
link = "w:Voiced dental fricative",
},
["s"] = {
title = "voiceless alveolar fricative",
link = "w:Voiceless alveolar fricative",
},
["z"] = {
title = "voiced alveolar fricative",
link = "w:Voiced alveolar fricative",
},
["ʃ"] = {
title = "voiceless postalveolar fricative",
link = "w:Voiceless palato-alveolar sibilant",
},
["ʒ"] = {
title = "voiced postalveolar fricative",
link = "w:Voiced palato-alveolar sibilant",
},
["ʂ"] = {
title = "voiceless retroflex fricative",
link = "w:Voiceless retroflex sibilant",
},
["ʐ"] = {
title = "voiced retroflex fricative",
link = "w:Voiced retroflex sibilant",
},
["ɕ"] = {
title = "voiceless alveolo-palatal fricative",
link = "w:Voiceless alveolo-palatal sibilant",
},
["ʑ"] = {
title = "voiced alveolo-palatal fricative",
link = "w:Voiced alveolo-palatal sibilant",
},
["ç"] = {
title = "voiceless palatal fricative",
link = "w:Voiceless palatal fricative",
},
["ʝ"] = {
title = "voiced palatal fricative",
link = "w:Voiced palatal fricative",
},
["x"] = {
title = "voiceless velar fricative",
link = "w:Voiceless velar fricative",
},
["ɣ"] = {
title = "voiced velar fricative",
link = "w:Voiced velar fricative",
},
["χ"] = {
title = "voiceless uvular fricative",
link = "w:Voiceless uvular fricative",
},
["ʁ"] = {
title = "voiced uvular fricative",
link = "w:Voiced uvular fricative",
},
["ħ"] = {
title = "voiceless pharyngeal fricative",
link = "w:Voiceless pharyngeal fricative",
},
["ʕ"] = {
title = "voiced pharyngeal fricative",
link = "w:Voiced pharyngeal fricative",
},
["ʜ"] = {
title = "voiceless epiglottal fricative",
link = "w:Voiceless epiglottal fricative",
},
["ʢ"] = {
title = "voiced epiglottal fricative",
link = "w:Voiced epiglottal fricative",
},
["h"] = {
title = "voiceless glottal fricative",
link = "w:Voiceless glottal fricative",
},
["ɦ"] = {
title = "voiced glottal fricative",
link = "w:Voiced glottal fricative",
},
-- approximant
["ʋ"] = {
title = "labiodental approximant",
link = "w:Labiodental approximant",
},
["ɹ"] = {
title = "alveolar approximant",
link = "w:Alveolar approximant",
},
["ɻ"] = {
title = "retroflex approximant",
link = "w:Retroflex approximant",
},
["j"] = {
title = "palatal approximant",
link = "w:Palatal approximant",
},
["ɰ"] = {
title = "velar approximant",
link = "w:Velar approximant",
},
-- tap, flap
["ⱱ"] = {
title = "labiodental tap",
link = "w:Labiodental flap",
},
["ɾ"] = {
title = "alveolar flap",
link = "w:Alveolar flap",
},
["ɽ"] = {
title = "retroflex flap",
link = "w:Retroflex flap",
},
-- trill
["ʙ"] = {
title = "bilabial trill",
link = "w:Bilabial trill",
},
["r"] = {
title = "alveolar trill",
link = "w:Alveolar trill",
},
["ʀ"] = {
title = "uvular trill",
link = "w:Uvular trill",
},
["ᴙ"] = {
title = "epiglottal trill",
link = "w:Epiglottal trill",
},
-- lateral fricative
["ɬ"] = {
title = "voiceless alveolar lateral fricative",
link = "w:Voiceless alveolar lateral fricative",
},
["ɮ"] = {
title = "voiced alveolar lateral fricative",
link = "w:Voiced alveolar lateral fricative",
},
-- no precomposed Unicode character --TOMOVE
--["ɬ̢"] = {title = "voiceless retroflex lateral fricative", link = "w:voiceless retroflex lateral fricative"},
-- no precomposed Unicode character --TOMOVE:3
--["ʎ̝̊"] = {title = "voiceless palatal lateral fricative", link = "w:voiceless palatal lateral fricative"},
-- no precomposed Unicode character --TOMOVE:3
--["ʟ̝̊"] = {title = "voiceless velar lateral fricative", link = "w:voiceless velar lateral fricative"},
-- no precomposed Unicode character --TOMOVE
--["ʟ̝"] = {title = "voiced velar lateral fricative", link = "w:voiced velar lateral fricative"},
-- lateral approximant
["l"] = {
title = "alveolar lateral approximant",
link = "w:Alveolar lateral approximant",
},
["ɭ"] = {
title = "retroflex lateral approximant",
link = "w:Retroflex lateral approximant",
},
["ʎ"] = {
title = "palatal lateral approximant",
link = "w:Palatal lateral approximant",
},
["ʟ"] = {
title = "velar lateral approximant",
link = "w:Velar lateral approximant",
},
-- lateral flap
["ɺ"] = {
title = "alveolar lateral flap",
link = "w:Alveolar lateral flap",
},
--["ɭ̆"] = {title = "retroflex lateral flap", link = "w:retroflex lateral flap"}, -- no precomposed Unicode character --TOMOVE
--["ɺ˞"] = {title = "retroflex lateral flap", link = "w:retroflex lateral flap"}, -- no precomposed Unicode character --TOMOVE
-- NON-PULMONIC CONSONANTS
-- clicks
["ʘ"] = {
title = "bilabial click",
link = "w:Bilabial clicks",
},
["ǀ"] = {
title = "dental click",
link = "w:Dental clicks",
},
["ǃ"] = {
title = "postalveolar click",
link = "w:Alveolar clicks",
},
["𝼊"] = {
title = "subapical retroflex",
link = "w:Retroflex clicks",
}, -- NOT IN X-SAMPA
["ǂ"] = {
title = "palatal click",
link = "w:Palatal clicks",
},
["ǁ"] = {
title = "alveolar lateral click",
link = "w:Lateral clicks",
},
-- implosives
["ɓ"] = {
title = "voiced bilabial implosive",
link = "w:Voiced bilabial implosive",
},
["ɗ"] = {
title = "voiced alveolar implosive",
link = "w:Voiced alveolar implosive",
},
-- NOT IN X-SAMPA
["ᶑ"] = {
title = "retroflex implosive",
link = "w:Voiced retroflex implosive",
},
["ʄ"] = {
title = "voiced palatal implosive",
link = "w:Voiced palatal implosive",
},
["ɠ"] = {
title = "voiced velar implosive",
link = "w:Voiced velar implosive",
},
["ʛ"] = {
title = "voiced uvular implosive",
link = "w:Voiced uvular implosive",
},
-- ejectives
["ʼ"] = {
title = "ejective",
link = "w:Ejective consonant",
},
-- CO-ARTICULATED CONSONANTS
["ʍ"] = {
title = "voiceless labial-velar fricative",
link = "w:Voiceless labio-velar approximant",
},
["w"] = {
title = "labial-velar approximant",
link = "w:Labio-velar approximant",
},
["ɥ"] = {
title = "labial-palatal approximant",
link = "w:Labialized palatal approximant",
},
["ɧ"] = {
title = "voiceless palatal-velar fricative",
link = "w:Sj-sound",
},
-- should be handled in [[Module:IPA]] and not through this table
-- BRACKETS
--[[
-- ["//"] = {
title = "morphophonemic",
link = "w:morphophonemic",
},
["/"] = {
title = "phonemic",
link = "w:phonemic",
},
["["] = {
title = "phonetic",
link = "w:phonetic",
},
["["] = {
title = "phonetic",
link = "w:phonetic",
},
["〈"] = {
title = "orthographic",
link = "w:orthographic",
},
["〉"] = {
title = "orthographic",
link = "w:orthographic",
},
["⟨"] = {
title = "orthographic",
link = "w:orthographic",
},
["⟩"] = {
title = "orthographic",
link = "w:orthographic",
},
]]
-- VOWELS
-- close
["i"] = {
title = "close front unrounded vowel",
link = "w:Close front unrounded vowel",
},
["y"] = {
title = "close front rounded vowel",
link = "w:Close front rounded vowel",
},
["ɨ"] = {
title = "close central unrounded vowel",
link = "w:Close central unrounded vowel",
},
["ʉ"] = {
title = "close central rounded vowel",
link = "w:Close central rounded vowel",
},
["ɯ"] = {
title = "close back unrounded vowel",
link = "w:Close back unrounded vowel",
},
["u"] = {
title = "close back rounded vowel",
link = "w:Close back rounded vowel",
},
-- near close
["ɪ"] = {
title = "near-close near-front unrounded vowel",
link = "w:Near-close near-front unrounded vowel",
},
["ʏ"] = {
title = "near-close near-front rounded vowel",
link = "w:Near-close near-front rounded vowel",
},
["ᵻ"] = {
title = "near-close central unrounded vowel",
link = "w:Near-close central unrounded vowel",
},
-- (alternative) --TOMOVE
--[[
["ɪ̈"] = {
title = "near-close central unrounded vowel",
link = "w:near-close central unrounded vowel",
}, ]]
["ᵿ"] = {
title = "near-close central rounded vowel",
link = "w:Near-close central rounded vowel",
},
--[[
(alternative) TOMOVE
["ʊ̈"] = {
title = "near-close central rounded vowel",
link = "w:near-close central rounded vowel",
},
]]
["ʊ"] = {
title = "near-close near-back rounded vowel",
link = "w:Near-close near-back rounded vowel",
},
--close mid
["e"] = {
title = "close-mid front unrounded vowel",
link = "w:Close-mid front unrounded vowel",
},
["ø"] = {
title = "close-mid front rounded vowel",
link = "w:Close-mid front rounded vowel",
},
["ɘ"] = {
title = "close-mid central unrounded vowel",
link = "w:Close-mid central unrounded vowel",
},
["ɵ"] = {
title = "close-mid central rounded vowel",
link = "w:Close-mid central rounded vowel",
},
["ɤ"] = {
title = "close-mid back unrounded vowel",
link = "w:Close-mid back unrounded vowel",
},
["o"] = {
title = "close-mid back rounded vowel",
link = "w:Close-mid back rounded vowel",
},
-- mid
["ə"] = {
title = "schwa",
link = "w:Schwa",
},
["ɚ"] = {
title = "schwa+r",
link = "w:R-colored vowel",
},
-- open mid
["ɛ"] = {
title = "open-mid front unrounded vowel",
link = "w:Open-mid front unrounded vowel",
},
["œ"] = {
title = "open-mid front rounded vowel",
link = "w:Open-mid front rounded vowel",
},
["ɜ"] = {
title = "open-mid central unrounded vowel",
link = "w:Open-mid central unrounded vowel",
},
["ɝ"] = {
title = "open-mid central unrounded vowel+r",
link = "w:R-colored vowel",
},
["ɞ"] = {
title = "open-mid central rounded vowel",
link = "w:Open-mid central rounded vowel",
},
["ʌ"] = {
title = "open-mid back unrounded vowel",
link = "w:Open-mid back unrounded vowel",
},
["ɔ"] = {
title = "open-mid back rounded vowel",
link = "w:Open-mid back rounded vowel",
},
-- near open
["æ"] = {
title = "near-open front unrounded vowel",
link = "w:Near-open front unrounded vowel",
},
["ɐ"] = {
title = "near-open central vowel",
link = "w:Near-open central vowel",
},
-- open
["a"] = {
title = "open front unrounded vowel",
link = "w:Open front unrounded vowel",
},
["ɶ"] = {
title = "open front rounded vowel",
link = "w:Open front rounded vowel",
},
["ɑ"] = {
title = "open back unrounded vowel",
link = "w:Open back unrounded vowel",
},
["ɒ"] = {
title = "open back rounded vowel",
link = "w:Open back rounded vowel",
},
-- SUPRASEGMENTALS
["ˈ"] = {title = "primary stress", link = "w:Stress (linguistics)", XSAMPA = "\""},
--[[
["???"] = {
title = "extra stress: no Unicode char; double primary stress instead",
link = "w:extra stress: no Unicode char; double primary stress instead",
XSAMPA = ""
}, --TOMOVE:3 ]]
["ˌ"] = {
title = "secondary stress",
link = "w:Secondary stress",
},
["ː"] = {
title = "long",
link = "w:Length (phonetics)",
},
["ˑ"] = {
title = "half long",
link = "w:Length (phonetics)",
},
["̆"] = {
title = "extra-short",
link = "w:Length (phonetics)",
},
--[[
["%."] = {
title = "syllable break",
link = "w:syllable break",
},
]]
--TOMOVE
["‿"] = {
title = "linking mark (absence of a break)",
link = "w:Tie (typography)#International_Phonetic_Alphabet",
},
[" "] = {
title = "separator",
link = "w:separator",
},
-- TONE
-- level tones
["˥"] = {
title = "top",
link = "w:Tone letter",
},
["˦"] = {
title = "high",
link = "w:Tone letter",
},
["˧"] = {
title = "mid",
link = "w:Tone letter",
},
["˨"] = {
title = "low",
link = "w:Tone letter",
},
["˩"] = {
title = "bottom",
link = "w:Tone letter",
},
["̋"] = {
title = "extra high tone",
link = "w:Tone letter",
},
["́"] = {
title = "high tone",
link = "w:Tone letter",
},
["̄"] = {
title = "mid tone",
link = "w:Tone letter",
},
["̀"] = {
title = "low tone",
link = "w:Tone letter",
},
["̏"] = {
title = "extra low tone",
link = "w:Tone letter",
},
-- tone terracing
["ꜛ"] = {
title = "upstep",
link = "w:Upstep",
},
["ꜜ"] = {
title = "downstep",
link = "w:Downstep",
},
-- contour tones
["̌"] = {
title = "rising tone",
link = "w:Tone (linguistics)",
},
["̂"] = {
title = "falling tone",
link = "w:Tone (linguistics)",
},
["᷄"] = {
title = "high rising tone",
link = "w:Tone (linguistics)",
},
["᷅"] = {
title = "low rising tone",
link = "w:Tone (linguistics)",
},
["᷇"] = {
title = "high falling tone",
link = "w:Tone (linguistics)",
},
["᷆"] = {
title = "low falling tone",
link = "w:Tone (linguistics)",
},
["᷈"] = {
title = "rising falling tone (peaking)",
link = "w:Tone (linguistics)",
},
["᷉"] = {
title = "dipping",
link = "w:Tone (linguistics)",
}, -- [extrapolated from the chart -- please confirm]
-- intonation
["|"] = {
title = "minor (foot) group",
link = "w:Prosodic unit",
},
["‖"] = {
title = "major (intonation) group",
link = "w:Prosodic unit",
},
["↗"] = {
title = "global rise",
link = "w:Intonation (linguistics)",
},
["↘"] = {
title = "global fall",
link = "w:Intonation (linguistics)",
},
-- DIACRITICS
-- syllabicity & releases
["̩"] = {
title = "syllabi ",
link = "w:Syllabic consonant",
withdescender = "̍"
}, -- (or "_="
["̯"] = {
title = "non-syllabic",
link = "w:Semivowel",
withdescender = "̑"
},
["ʰ"] = {
title = "aspirated",
link = "w:Aspirated consonant",
},
["ⁿ"] = {
title = "nasal release",
link = "w:Nasal release",
},
["ˡ"] = {
title = "lateral release",
link = "w:Lateral release (phonetics)",
},
["̚"] = {
title = "no audible release",
link = "w:No audible release",
},
-- phonation
["̥"] = {
title = "voiceless",
link = "w:Voicelessness",
withdescender = "̊"
},
["̬"] = {
title = "voiced",
link = "w:Voice (phonetics)",
},
["̤"] = {
title = "breathy voice",
link = "w:Breathy voice",
},
["̰"] = {
title = "creaky voice",
link = "w:Creaky voice",
},
["᷽"] = {
title = "strident",
link = "w:Strident vowel",
},
-- primary articulation
["̪"] = {
title = "dental",
link = "w:Dental consonant",
},
["̺"] = {
title = "apical",
link = "w:Apical consonant",
},
["̻"] = {
title = "laminal",
link = "w:Laminal consonant",
},
["̟"] = {
title = "advanced",
link = "w:Relative articulation#Advanced_and_retracted",
withdescender = "˖"
},
["̠"] = {
title = "retracted",
link = "w:Relative articulation#Retracted",
withdescender = "˗"
},
["̼"] = {
title = "linguolabial",
link = "w:Linguolabial consonant",
},
["̈"] = {
title = "centralized",
link = "w:Relative articulation#Centralized_vowels",
XSAMPA = "_\""
},
["̽"] = {
title = "mid-centralized",
link = "Relative articulation#Mid-centralized_vowel",
},
["̞"] = {
title = "lowered",
link = "w:Relative articulation#Raised_and_lowered",
withdescender = "˕"
},
["̝"] = {
title = "raised",
link = "w:Relative articulation#Raised_and_lowered",
withdescender = "˔"
},
["͡"] = {
title = "coarticulated",
link = "w:Co-articulated consonant",
},
["͈"] = {
title = "strong articulation",
link = "w:Fortis and lenis",
},
-- secondary articulation
["ʷ"] = {
title = "labialized",
link = "w:Labialization",
},
["ʲ"] = {
title = "palatalized",
link = "w:Palatalization (phonetics)",
},
["ˠ"] = {
title = "velarized",
link = "w:Velarization",
},
["ˤ"] = {
title = "pharyngealized",
link = "w:Pharyngealization",
},
-- also see _e
["ɫ"] = {
title = "velarized alveolar lateral approximant",
link = "w:Alveolar lateral approximant",
},
["̴"] = {
title = "velarized or pharyngealized; also see 5",
link = "w:Velarization",
},
["̹"] = {
title = "more rounded",
link = "w:Roundedness",
},
["̜"] = {
title = "less rounded",
link = "w:Roundedness",
},
["̃"] = {
title = "nasalization",
link = "w:Nasalization",
},
["˞"] = {
title = "rhotacization in vowels, retroflexion in consonants",
link = "w:R-colored vowel",
},
["̘"] = {
title = "advanced tongue root",
link = "w:Advanced and retracted tongue root",
},
["̙"] = {
title = "retracted tongue root",
link = "w:Advanced and retracted tongue root",
},
}
data[2] = {
-- TODO
--["%("] = {},
--["%)"] = {},
["ːː"] = {
title = "extra long",
link = "w:Length (phonetics)",
},
["r̥"] = {title = "voiceless alveolar trill", link = "w:Voiceless alveolar trill"},
["ɬ’"] = {title = "alveolar lateral ejective fricative", link = "w:Alveolar lateral ejective fricative"},
}
data[3] = {
["t͡s"] = {title = "voiceless alveolar sibilant affricate", link = "w:Voiceless alveolar affricate"},
["d͡z"] = {title = "voiced alveolar sibilant affricate", link = "w:Voiced alveolar affricate"},
["t͡ʃ"] = {title = "voiceless palato-alveolar affricate", link = "w:Voiceless palato-alveolar affricate", descender = true},
["d͡ʒ"] = {title = "voiced palato-alveolar affricate", link = "w:Voiced palato-alveolar affricate"},
["ʈ͡ʂ"] = {title = "voiceless retroflex affricate", link = "w:Voiceless retroflex affricate", descender = true},
["ɖ͡ʐ"] = {title = "voiced retroflex affricate", link = "w:Voiced retroflex affricate, descender = true"},
["t͡ɕ"] = {title = "voiceless alveolo-palatal affricate", link = "w:Voiceless alveolo-palatal affricate"},
["d͡ʑ"] = {title = "voiced alveolo-palatal affricate", link = "w:Voiced alveolo-palatal affricate"},
["c͡ç"] = {title = "voiceless palatal affricate", link = "w:Voiceless palatal affricate, descender = true"},
["ɟ͡ʝ"] = {title = "voiced palatal affricate", link = "w:Voiced palatal affricate, descender = true"},
["k͡x"] = {title = "voiceless velar affricate", link = "w:Voiceless velar affricate"},
["ɡ͡ɣ"] = {title = "voiced velar affricate", link = "w:Voiced velar affricate, descender = true"},
}
data[4] = {
["ǃ͡qʼ"] = {title = "alveolar linguo-glottalic stop", link = "w:Ejective-contour clicks, descender = true"},
["ǁ͡χʼ"] = {title = "lateral linguo-glottalic affricate (homorganic)", link = "w:Ejective-contour clicks", descender = true},
}
data[5] = {
["k͡ʟ̝̊"] = {title = "voiceless velar lateral affricate", link = "w:Voiceless velar lateral affricate"},
["ᶢǀ͡qʼ"] = {title = "voiced dental linguo-glottalic stop", link = "w:Ejective-contour clicks"},
["ǂ͡kxʼ"] = {title = "palatal linguo-glottalic affricate (heterorganic)", link = "w:Ejective-contour clicks"},
}
data[6] = {
["k͡ʟ̝̊ʼ"] = {title = "velar lateral ejective affricate", link = "w:Velar lateral ejective affricate"},
["ᶢʘ͡kxʼ"] = {title = "voiced labial linguo-glottalic affricate", link = "w:Ejective-contour clicks"},
}
data.separator_escapes = {
["⁽"] = "(", ["⁾"] = ")",
["₍"] = "(", ["₎"] = ")",
["ˈ"] = "\1", ["ˌ"] = "\2",
["ː"] = ":", ["ˑ"] = ";",
}
-- acute and grave tone marks
local diacritics = u(
-- grave, acute, circumflex, tilde, macron, breve
0x300, 0x301, 0x302, 0x303, 0x304, 0x306,
-- diaeresis, ring above, double acute, caron, vertical line above, double grave, left tack
0x308, 0x30A, 0x30B, 0x30C, 0x30D, 0x30F, 0x318,
-- right tack, left angle, left half ring below, up tack below, down tack below, plus sign below
0x319, 0x31A, 0x31C, 0x31D, 0x31E, 0x31F,
-- minus sign below, rhotic hook below, dot below, diaeresis below, ring below, vertical line below, bridge below
0x320, 0x322, 0x323, 0x324, 0x325, 0x329, 0x32A,
-- caron below, inverted breve below
0x32C, 0x32F,
-- tilde below, combining tilde overlay, right half ring below, inverted bridge below, square below, seagull below, x above
0x330, 0x334, 0x339, 0x33A, 0x33B, 0x33C, 0x33D,
-- grave tone mark, acute tone mark, bridge above, equals sign below, double vertical line below
0x340, 0x341, 0x346, 0x347, 0x348,
-- left angle below, not tilde above, homothetic above, almost equal above, left right arrow below
0x349, 0x34A, 0x34B, 0x34C, 0x34D,
-- upwards arrow below, left arrowhead below, right arrowhead below
0x34E, 0x354, 0x355,
-- double rightwards arrow below, combining Latin small letter a
0x362, 0x361,
-- macron–acute, grave–macron, macron–grave, acute–macron, grave–acute–grave, acute–grave–acute
0x1DC4, 0x1DC5, 0x1DC6, 0x1DC7, 0x1DC8, 0x1DC9)
data.diacritics = diacritics
data.vowels = "iyɨʉɯuɪᵻʏʊᵿeøɘɵɤoəɚɛœɜɝɞʌɔæɐaɶɑɒäëïöüÿ"
local tones = "˥˦˧˨˩꜒꜓꜔꜕꜖꜈꜉꜊꜋꜌꜍꜎꜏꜐꜑¹²³⁴⁵⁶⁷⁸⁹⁰"
data.tones = tones
local superscripts = u(0xA0) .. " ⁰¹²³⁴⁵⁶⁷⁸⁹ᵃ𐞃ᵄᵅᶛᵇ𐞄𐞅ᶜᶝᵈᶞ𐞋𐞌𐞍ᵉᵊᵋ𐞎ᶟᵌ𐞏𐞑ᶠᶢ𐞒𐞓𐞔ˠʰ𐞕𐞖ʱ𐞗ⁱᶦᶤʲᶨᶡ𐞘ᵏˡᶫꭞ𐞛ᶩ𐞞𐞠𐞡ᵐᶬⁿᶰᶮᶯᵑᵒ𐞢ꟹ𐞣ᵓᶱᵖᶲ𐞥ʳ𐞪ʴ𐞦𐞧ʵ𐞨𐞩ʶˢᶳᶴᵗ𐞯ᵘᶶᶣᵚᶭᶷᵛᶹ𐞰ᶺʷꭩˣʸ𐞲ᶻᶼᶽᶾˀˤ𐞳𐞴𐞶𐞷𐞸𐞹𐞵ᵝᶿᵡ˞⁻𐞁𐞂"
data.superscripts = superscripts
-- An array of patterns of valid character sequences.
data.valid = {
"⁽[" .. superscripts .. "]+⁾",
"[ %(%)%%<>{|}%-→~⁓%.◌abcdefhijklmnopqrstuvwxyz¡àáâãāăēäæçèéêëĕěħìíîïĩīĭĺḿǹńňðòóôõöōŏőœøŕùúûüũūŭűýÿŷŋ"
.. "ǀǁǂǃǎǐǒǔřǖǘǚǜǟǣǽǿȁȅȉȍȕȫȭȳɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɪᵻɫɬɭɮɯɰɱɲɳɴɵɶɸɹɺ𝼈ɻɽɾʀʁʂʃʄʈʉʊᵿʋṽʌʍʎ𝼆ʏʐʑʒʔʕʘʞʙʛʜʝʟʡʢ𝼊ʬʭ"
.. "ʼˈˌːˑˣ˔˕ˬ͗˭ˇ˖β͜θχᴙᶑ᷽ḁḛḭḯṍṏṳṵṹṻạẹẽịọụỳỵỹ‖․‥…‿↑↓↗↘ⱱꜛꜜꟸ𝆏𝆑˗ˋˊ–⸨⸩⁽⁾" .. diacritics .. tones .. superscripts .. "]+"
}
-- Character sequences which are valid only in a particular language.
-- These can be either a single pattern (as a string), or an array of patterns (as a table).
data.per_lang_valid = {
["egy"] = "V+", -- V for uncertain vowel
["okm"] = "[LHR!WT]+", -- irregular verb morphophonemes
}
-- Characters to add VARIATION SELECTOR-15 (U+FE0E) after.
-- These are characters with emoji variants that are used by default by some clients.
-- Adding VS15 after them instructs them to draw the characters as text instead.
data.add_vs15 = "↗↘"
data.invalid = {
["!"] = "ǃ",
["ꜝ"] = "ꜜ",
["ꜞ"] = "ꜛ",
["ꜟ"] = "ꜛ",
["'"] = "ˈ",
["’"] = "ʼ",
[":"] = "ː",
-- Confusable Latin letters
["B"] = "ʙ",
["g"] = "ɡ",
["G"] = "ɢ",
["Ɠ"] = "ʛ",
["H"] = "ʜ",
["ı"] = "ɪ",
["I"] = "ɪ",
["L"] = "ʟ",
["N"] = "ɴ",
["Œ"] = "ɶ",
["Q"] = "ꞯ",
["R"] = "ʀ",
["∫"] = "ʃ",
["⨎"] = "ǂ", -- due to confusion with obsolete 𝼋 below
["ß"] = "β",
["ẞ"] = "β",
["Y"] = "ʏ",
["Ə"] = "ə",
["ǝ"] = "ə",
["Ɂ"] = "ʔ",
["ɂ"] = "ʔ",
["ˁ"] = "ˤ",
-- Confusable Greek letters
["α"] = "ɑ",
["γ"] = "ɣ",
["δ"] = "ð",
["ε"] = "ɛ",
["Η"] = "ʜ",
["η"] = "ŋ",
["ι"] = "ɪ",
["λ"] = "ʎ",
["υ"] = "ʋ",
["Ψ"] = "𝼊",
["ψ"] = "𝼊",
["Φ"] = "ɸ",
["ϕ"] = "ɸ",
["ꭓ"] = "χ", -- Actually Latin, since IPA uses the Greek letter(!)
-- Confusable Cyrillic letters
["ӕ"] = "æ",
["Ә"] = "ə",
["ә"] = "ə",
["В"] = "ʙ",
["в"] = "ʙ",
["е"] = "e",
["З"] = "ɜ",
["з"] = "ɜ",
["Ѕ"] = "s",
["ѕ"] = "s",
["і"] = "i",
["ј"] = "j",
["Н"] = "ʜ",
["н"] = "ʜ",
["О"] = "o",
["о"] = "o",
["р"] = "p",
["с"] = "c",
["у"] = "y",
["Ү"] = "ʏ",
["ү"] = "ʏ",
["Ф"] = "ɸ",
["ф"] = "ɸ",
["х"] = "x",
["Һ"] = "h",
["һ"] = "h",
["Я"] = "ᴙ",
["я"] = "ᴙ",
["Ѱ"] = "𝼊",
["ѱ"] = "𝼊",
["Ѵ"] = "ⱱ",
["ѵ"] = "ⱱ",
["Ҁ"] = "ʕ",
["ҁ"] = "ʕ",
-- Palatalization
["ᶀ"] = "bʲ",
["ꞔ"] = "cʲ",
["ᶁ"] = "dʲ",
["ȡ"] = "d̠ʲ",
["d̂"] = "d̠ʲ",
["ᶂ"] = "fʲ",
["ᶃ"] = "ɡʲ",
["ꞕ"] = "hʲ",
["ᶄ"] = "kʲ",
["ᶅ"] = "lʲ",
["ȴ"] = "l̠ʲ",
["l̂"] = "l̠ʲ",
["𝼓"] = "ɬʲ",
["ᶆ"] = "mʲ",
["ᶇ"] = "nʲ",
["ȵ"] = "n̠ʲ",
["n̂"] = "n̠ʲ",
["𝼔"] = "ŋʲ",
["ᶈ"] = "pʲ",
["ᶉ"] = "rʲ",
["𝼕"] = "ɹʲ",
["𝼖"] = "ɾʲ",
["ᶊ"] = "sʲ",
["𝼞"] = "ɕ",
["𐞺"] = "ᶝ",
["ᶋ"] = "ʃʲ",
["ʆ"] = "ʃʲ",
["ƫ"] = "tʲ",
["ȶ"] = "t̠ʲ",
["t̂"] = "t̠ʲ",
["ᶌ"] = "vʲ",
["ᶍ"] = "xʲ",
["ᶎ"] = "zʲ",
["𝼘"] = "ʒʲ",
["ʓ"] = "ʒʲ",
-- Retroflex
["𝼝"] = "ʈ͡ʂ",
["𝼥"] = "ɖ",
["𝼦"] = "ɭ",
["𝼧"] = "ɳ",
["𝼨"] = "ɽ",
["𝼩"] = "ʂ",
["𝼪"] = "ʈ",
-- Rhotic vowels
["ᶏ"] = "a˞",
["ᶐ"] = "ɑ˞",
["ᶒ"] = "e˞",
["ə˞"] = "ɚ",
["ᶕ"] = "ɚ",
["ᶓ"] = "ɛ˞",
["ɜ˞"] = "ɝ",
["ᶔ"] = "ɝ",
["ᶖ"] = "i˞",
["𝼚"] = "ɨ˞",
["𝼛"] = "o˞",
["ᶗ"] = "ɔ˞",
["ᶙ"] = "u˞",
-- Syllabic fricatives
["ɿ"] = "z̩",
["ʅ"] = "ʐ̩",
["ʮ"] = "z̩ʷ",
["ʯ"] = "ʐ̩ʷ",
-- Clicks
["ʗ"] = "ǃ",
["𝼋"] = "ǂ",
["ʇ"] = "ǀ",
["ʖ"] = "ǁ",
["‼"] = "𝼊",
-- Voiceless implosives
["ƈ"] = "ʄ̊",
["ƙ"] = "ɠ̊",
["ƥ"] = "ɓ̥",
["ʠ"] = "ʛ̥",
["ƭ"] = "ɗ̥",
["𝼉"] = "ᶑ̥",
-- Monographs
["ꜰ"] = "ɸ",
["ɩ"] = "ɪ",
["ɼ"] = "r̝",
["ᴜ"] = "ʊ",
["ɷ"] = "ʊ",
["𐞤"] = "ᶷ",
["ƛ"] = "t͡ɬ",
["ƻ"] = "d͡z",
["ƾ"] = "t͡s",
-- Digraphs
["ȸ"] = "b̪",
["ʣ"] = "d͡z",
["ʥ"] = "d͡ʑ",
["ꭦ"] = "ɖ͡ʐ",
["ʤ"] = "d͡ʒ",
["𝼒"] = "d͡ʒʲ",
["𝼙"] = "d͡ᶚ",
["ʪ"] = "ɬ͡s",
["ʫ"] = "ɮ͡z",
["ȹ"] = "p̪",
["ʦ"] = "t͡s",
["ʨ"] = "t͡ɕ",
["ꭧ"] = "ʈ͡ʂ",
["ʧ"] = "t͡ʃ",
["𝼗"] = "t͡ʃʲ",
["𝼜"] = "t͡ᶘ",
-- Deprecated or confusable diacritics
["̫"] = "ʷ",
["͂"] = "̃",
["᫇"] = "ʷ",
["⸋"] = "̚",
["̱"] = "̠", -- COMBINING MACRON BELOW (U+0331) -> COMBINING MINUS SIGN BELOW (U+0320)
-- Precomposed characters with deprecated or confusable diacritics; the left is a precomposed
-- version of a lowercase letter with COMBINING MACRON BELOW and the right is the equivalent
-- using COMBINING MINUS SIGN BELOW
["ḇ"] = "b̠",
["ḏ"] = "d̠",
["ẖ"] = "h̠",
["ḵ"] = "k̠",
["ḻ"] = "l̠",
["ṉ"] = "n̠",
["ṟ"] = "r̠",
["ṯ"] = "t̠",
["ẕ"] = "z̠",
}
return data
8x872iec1dh4h0gdlleo671vcnykg1g
MediaWiki:BabelConfig.json
8
16599
86358
85938
2026-07-23T01:16:07Z
Altronic
4137
update
86358
json
application/json
{
"$version": "1.0.0",
"BabelAutoCreate": true,
"BabelCategoryNames": {
"0": "",
"1": "Cleachdaiche %code%-1",
"2": "Cleachdaiche %code%-2",
"3": "Cleachdaiche %code%-3",
"4": "Cleachdaiche %code%-4",
"5": "",
"N": "Cleachdaiche %code%-N"
},
"BabelMainCategory": "Cleachdaiche %code%",
"BabelUseUserLanguage": false
}
drd2dgeisdgnue14tfkltngir8vi1v9
Mòideal:headword
828
16651
86372
86136
2026-07-23T01:52:49Z
Altronic
4137
change some names
86372
Scribunto
text/plain
local export = {}
-- Named constants for all modules used, to make it easier to swap out sandbox versions.
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
local gender_and_number_module = "Module:gender and number"
local headword_data_module = "Module:headword/data"
local headword_page_module = "Module:headword/page"
local links_module = "Module:links"
local load_module = "Module:load"
local pages_module = "Module:pages"
local palindromes_module = "Module:palindromes"
local pron_qualifier_module = "Module:pron qualifier"
local scripts_module = "Module:scripts"
local scripts_data_module = "Module:scripts/data"
local script_utilities_module = "Module:script utilities"
local script_utilities_data_module = "Module:script utilities/data"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local dump = mw.dumpObject
local insert = table.insert
local ipairs = ipairs
local max = math.max
local new_title = mw.title.new
local pairs = pairs
local require = require
local toNFC = mw.ustring.toNFC
local toNFD = mw.ustring.toNFD
local type = type
local ufind = mw.ustring.find
local ugmatch = mw.ustring.gmatch
local ugsub = mw.ustring.gsub
local umatch = mw.ustring.match
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function encode_entities(...)
encode_entities = require(string_utilities_module).encode_entities
return encode_entities(...)
end
local function extend(...)
extend = require(table_module).extend
return extend(...)
end
local function find_best_script_without_lang(...)
find_best_script_without_lang = require(scripts_module).findBestScriptWithoutLang
return find_best_script_without_lang(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function format_genders(...)
format_genders = require(gender_and_number_module).format_genders
return format_genders(...)
end
local function format_pron_qualifiers(...)
format_pron_qualifiers = require(pron_qualifier_module).format_qualifiers
return format_pron_qualifiers(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function get_current_L2(...)
get_current_L2 = require(pages_module).get_current_L2
return get_current_L2(...)
end
local function get_link_page(...)
get_link_page = require(links_module).get_link_page
return get_link_page(...)
end
local function get_script(...)
get_script = require(scripts_module).getByCode
return get_script(...)
end
local function is_palindrome(...)
is_palindrome = require(palindromes_module).is_palindrome
return is_palindrome(...)
end
local function language_link(...)
language_link = require(links_module).language_link
return language_link(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities_module).pattern_escape
return pattern_escape(...)
end
local function pluralize(...)
pluralize = require(en_utilities_module).pluralize
return pluralize(...)
end
local function process_page(...)
process_page = require(headword_page_module).process_page
return process_page(...)
end
local function remove_links(...)
remove_links = require(links_module).remove_links
return remove_links(...)
end
local function shallow_copy(...)
shallow_copy = require(table_module).shallowCopy
return shallow_copy(...)
end
local function tag_text(...)
tag_text = require(script_utilities_module).tag_text
return tag_text(...)
end
local function tag_transcription(...)
tag_transcription = require(script_utilities_module).tag_transcription
return tag_transcription(...)
end
local function tag_translit(...)
tag_translit = require(script_utilities_module).tag_translit
return tag_translit(...)
end
local function trim(...)
trim = require(string_utilities_module).trim
return trim(...)
end
local function ulen(...)
ulen = require(string_utilities_module).len
return ulen(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local m_data
local function get_data()
m_data = load_data(headword_data_module)
return m_data
end
local script_data
local function get_script_data()
script_data = load_data(scripts_data_module)
return script_data
end
local script_utilities_data
local function get_script_utilities_data()
script_utilities_data = load_data(script_utilities_data_module)
return script_utilities_data
end
-- If set to true, categories always appear, even in non-mainspace pages
local test_force_categories = false
-- Add a tracking category to track entries with certain (unusually undesirable) properties. `track_id` is an identifier
-- for the particular property being tracked and goes into the tracking page. Specifically, this adds a link in the
-- page text to [[Wiktionary:Tracking/headword/TRACK_ID]], meaning you can find all entries with the `track_id` property
-- by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID]].
--
-- If `lang` (a language object) is given, an additional tracking page [[Wiktionary:Tracking/headword/TRACK_ID/CODE]] is
-- linked to where CODE is the language code of `lang`, and you can find all entries in the combination of `track_id`
-- and `lang` by visiting [[Special:WhatLinksHere/Wiktionary:Tracking/headword/TRACK_ID/CODE]]. This makes it possible to
-- isolate only the entries with a specific tracking property that are in a given language. Note that if `lang`
-- references at etymology-only language, both that language's code and its full parent's code are tracked.
local function track(track_id, lang)
local tracking_page = "headword/" .. track_id
if lang and lang:hasType("etymology-only") then
debug_track{tracking_page, tracking_page .. "/" .. lang:getCode(),
tracking_page .. "/" .. lang:getFullCode()}
elseif lang then
debug_track{tracking_page, tracking_page .. "/" .. lang:getCode()}
else
debug_track(tracking_page)
end
return true
end
local function text_in_script(text, script_code)
local sc = get_script(script_code)
if not sc then
error("Internal error: Bad script code " .. script_code)
end
local characters = sc.characters
local out
if characters then
text = ugsub(text, "%W", "")
out = ufind(text, "[" .. characters .. "]")
end
if out then
return true
else
return false
end
end
local spacingPunctuation = "[%s%p]+"
--[[ List of punctuation or spacing characters that are found inside of words.
Used to exclude characters from the regex above. ]]
local wordPunc = "-#%%&@־׳״'.·*’་•:᠊"
local notWordPunc = "[^" .. wordPunc .. "]+"
-- Format a term (either a head term or an inflection term) along with any left or right qualifiers, labels, references
-- or customized separator: `part` is the object specifying the term (and `lang` the language of the term), which should
-- optionally contain:
-- * left qualifiers in `q`, an array of strings;
-- * right qualifiers in `qq`, an array of strings;
-- * left labels in `l`, an array of strings;
-- * right labels in `ll`, an array of strings;
-- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text`
-- (formatted reference text) and optionally `name` and/or `group`;
-- * a separator in `separator`, defaulting to " <i>or</i> " if this is not the first term (j > 1), otherwise "".
-- `formatted` is the formatted version of the term itself, and `j` is the index of the term.
local function format_term_with_qualifiers_and_refs(lang, part, formatted, j)
local function part_non_empty(field)
local list = part[field]
if not list then
return nil
end
if type(list) ~= "table" then
error(("Internal error: Wrong type for `part.%s`=%s, should be \"table\""):format(field, dump(list)))
end
return list[1]
end
if part_non_empty("q") or part_non_empty("qq") or part_non_empty("l") or
part_non_empty("ll") or part_non_empty("refs") then
formatted = format_pron_qualifiers {
lang = lang,
text = formatted,
q = part.q,
qq = part.qq,
l = part.l,
ll = part.ll,
refs = part.refs,
}
end
local separator = part.separator or j > 1 and " <i>or</i> " -- use "" to request no separator
if separator then
formatted = separator .. formatted
end
return formatted
end
--[==[Return true if the given head is multiword according to the algorithm used in full_headword().]==]
function export.head_is_multiword(head)
for possibleWordBreak in ugmatch(head, spacingPunctuation) do
if umatch(possibleWordBreak, notWordPunc) then
return true
end
end
return false
end
do
local function workaround_to_exclude_chars(s)
return (ugsub(s, notWordPunc, "\2%1\1"))
end
--[==[Add links to a multiword head.]==]
function export.add_multiword_links(head, default)
head = "\1" .. ugsub(head, spacingPunctuation, workaround_to_exclude_chars) .. "\2"
if default then
head = head
:gsub("(\1[^\2]*)\\([:#][^\2]*\2)", "%1\\\\%2")
:gsub("(\1[^\2]*)([:#][^\2]*\2)", "%1\\%2")
end
--Escape any remaining square brackets to stop them breaking links (e.g. "[citation needed]").
head = encode_entities(head, "[]", true, true)
--[=[
use this when workaround is no longer needed:
head = "[[" .. ugsub(head, WORDBREAKCHARS, "]]%1[[") .. "]]"
Remove any empty links, which could have been created above
at the beginning or end of the string.
]=]
return (head
:gsub("\1\2", "")
:gsub("[\1\2]", {["\1"] = "[[", ["\2"] = "]]"}))
end
end
local function non_categorizable(full_raw_pagename)
return full_raw_pagename:find("^Appendix:Gestures/") or
-- Unsupported titles with descriptive names.
(full_raw_pagename:find("^Unsupported titles/") and not full_raw_pagename:find("`"))
end
local function tag_text_and_add_quals_and_refs(data, head, formatted, j)
-- Add language and script wrapper.
formatted = tag_text(formatted, data.lang, head.sc, "head", nil, j == 1 and data.id or nil)
-- Add qualifiers, labels, references and separator.
return format_term_with_qualifiers_and_refs(data.lang, head, formatted, j)
end
-- Format a headword with transliterations.
local function format_headword(data)
-- Are there non-empty transliterations?
local has_translits = false
local has_manual_translits = false
------ Format the headwords. ------
local head_parts = {}
local unique_head_parts = {}
local has_multiple_heads = not not data.heads[2]
for j, head in ipairs(data.heads) do
if head.tr or head.ts then
has_translits = true
end
if head.tr and head.tr_manual or head.ts then
has_manual_translits = true
end
local formatted
-- Apply processing to the headword, for formatting links and such.
if head.term:find("[[", nil, true) and head.sc:getCode() ~= "Image" then
formatted = language_link{term = head.term, lang = data.lang}
else
formatted = data.lang:makeDisplayText(head.term, head.sc, true)
end
local head_part = tag_text_and_add_quals_and_refs(data, head, formatted, j)
insert(head_parts, head_part)
-- If multiple heads, try to determine whether all heads display the same. To do this we need to effectively
-- rerun the text tagging and addition of qualifiers and references, using 1 for all indices.
if has_multiple_heads then
local unique_head_part
if j == 1 then
unique_head_part = head_part
else
unique_head_part = tag_text_and_add_quals_and_refs(data, head, formatted, 1)
end
unique_head_parts[unique_head_part] = true
end
end
local set_size = 0
if has_multiple_heads then
for _ in pairs(unique_head_parts) do
set_size = set_size + 1
end
end
if set_size == 1 then
head_parts = head_parts[1]
else
head_parts = concat(head_parts)
end
if has_manual_translits then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/manual-tr/LANGCODE]]
track("manual-tr", data.lang)
end
------ Format the transliterations and transcriptions. ------
local translits_formatted
if has_translits then
local translit_parts = {}
for _, head in ipairs(data.heads) do
if head.tr or head.ts then
local this_parts = {}
if head.tr then
insert(this_parts, tag_translit(head.tr, data.lang:getCode(), "head", nil, head.tr_manual))
if head.ts then
insert(this_parts, " ")
end
end
if head.ts then
insert(this_parts, "/" .. tag_transcription(head.ts, data.lang:getCode(), "head") .. "/")
end
insert(translit_parts, concat(this_parts))
end
end
translits_formatted = " (" .. concat(translit_parts, " <i>no</i> ") .. ")"
local langname = data.lang:getCanonicalName()
local transliteration_page = new_title(langname .. " transliteration", "Wiktionary")
local saw_translit_page = false
if transliteration_page and transliteration_page:getContent() then
translits_formatted = " [[Wiktionary:" .. langname .. " transliteration|•]]" .. translits_formatted
saw_translit_page = true
end
-- If data.lang is an etymology-only language and we didn't find a translation page for it, fall back to the
-- full parent.
if not saw_translit_page and data.lang:hasType("etymology-only") then
langname = data.lang:getFullName()
transliteration_page = new_title(langname .. " transliteration", "Wiktionary")
if transliteration_page and transliteration_page:getContent() then
translits_formatted = " [[Wiktionary:" .. langname .. " transliteration|•]]" .. translits_formatted
end
end
else
translits_formatted = ""
end
------ Paste heads and transliterations/transcriptions. ------
local lemma_gloss
if data.gloss then
lemma_gloss = ' <span class="ib-content qualifier-content">' .. data.gloss .. '</span>'
else
lemma_gloss = ""
end
return head_parts .. translits_formatted .. lemma_gloss
end
local function format_headword_genders(data)
local retval = ""
if data.genders and data.genders[1] then
if data.gloss then
retval = ","
end
local pos_for_cat
if not data.nogendercat then
local no_gender_cat = (m_data or get_data()).no_gender_cat
if not (no_gender_cat[data.lang:getCode()] or no_gender_cat[data.lang:getFullCode()]) then
pos_for_cat = (m_data or get_data()).pos_for_gender_number_cat[data.pos_category:gsub("^reconstructed ", "")]
end
end
local text, cats = format_genders(data.genders, data.lang, pos_for_cat)
if cats then
extend(data.categories, cats)
end
retval = retval .. " " .. text
end
return retval
end
-- Forward reference
local format_inflections
local function format_inflection_parts(data, parts)
for j, part in ipairs(parts) do
if type(part) ~= "table" then
part = {term = part}
end
local partaccel = part.accel
local face = part.face or "bold"
if face ~= "bold" and face ~= "plain" and face ~= "hypothetical" then
error("The face `" .. face .. "` " .. (
(script_utilities_data or get_script_utilities_data()).faces[face] and
"should not be used for non-headword terms on the headword line." or
"is invalid."
))
end
-- Here the final part 'or data.nolinkinfl' allows to have 'nolinkinfl=true'
-- right into the 'data' table to disable inflection links of the entire headword
-- when inflected forms aren't entry-worthy, e.g.: in Vulgar Latin
local nolinkinfl = part.face == "hypothetical" or (part.nolink and track("nolink") or part.nolinkinfl) or (
data.nolink and track("nolink") or data.nolinkinfl)
local formatted
if part.label then
-- FIXME: There should be a better way of italicizing a label. As is, this isn't customizable.
formatted = "<i>" .. part.label .. "</i>"
else
-- Convert the term into a full link. Don't show a transliteration here unless enable_auto_translit is
-- requested, either at the `parts` level (i.e. per inflection) or at the `data.inflections` level (i.e.
-- specified for all inflections). This is controllable in {{head}} using autotrinfl=1 for all inflections,
-- or fNautotr=1 for an individual inflection (remember that a single inflection may be associated with
-- multiple terms). The reason for doing this is to avoid clutter in headword lines by default in languages
-- where the script is relatively straightforward to read by learners (e.g. Greek, Russian), but allow it
-- to be enabled in languages with more complex scripts (e.g. Arabic).
--
-- FIXME: With nested inflections, should we also respect `enable_auto_translit` at the top level of the
-- nested inflections structure?
local tr = part.tr or not (parts.enable_auto_translit or data.inflections.enable_auto_translit) and "-" or nil
-- FIXME: Temporary errors added 2025-10-03. Remove after a month or so.
if part.translit then
error("Internal error: Use field `tr` not `translit` for specifying an inflection part translit")
end
if part.transcription then
error("Internal error: Use field `ts` not `transcription` for specifying an inflection part transcription")
end
local postprocess_annotations
if part.inflections then
postprocess_annotations = function(infldata)
insert(infldata.annotations, format_inflections(data, part.inflections))
end
end
formatted = full_link(
{
term = not nolinkinfl and part.term or nil,
alt = part.alt or (nolinkinfl and part.term or nil),
lang = part.lang or data.lang,
sc = part.sc or parts.sc or nil,
gloss = part.gloss,
pos = part.pos,
lit = part.lit,
id = part.id,
genders = part.genders,
tr = tr,
ts = part.ts,
accel = partaccel or parts.accel,
postprocess_annotations = postprocess_annotations,
},
face
)
end
parts[j] = format_term_with_qualifiers_and_refs(part.lang or data.lang, part,
formatted, j)
end
local parts_output
if parts[1] then
parts_output = (parts.label and " " or "") .. concat(parts)
elseif parts.request then
parts_output = " <small>[briathair a dhìth]</small>"
insert(data.categories, "Requests for inflections in " .. data.lang:getFullName() .. " entries")
else
parts_output = ""
end
local parts_label = parts.label and ("<i>" .. parts.label .. "</i>") or ""
return format_term_with_qualifiers_and_refs(data.lang, parts, parts_label .. parts_output, 1)
end
-- Format the inflections following the headword or nested after a given inflection. Declared local above.
function format_inflections(data, inflections)
if inflections and inflections[1] then
-- Format each inflection individually.
for key, infl in ipairs(inflections) do
inflections[key] = format_inflection_parts(data, infl)
end
return concat(inflections, ", ")
else
return ""
end
end
-- Format the top-level inflections following the headword. Currently this just adds parens around the
-- formatted comma-separated inflections in `data.inflections`.
local function format_top_level_inflections(data)
local result = format_inflections(data, data.inflections)
if result ~= "" then
return " (" .. result .. ")"
else
return result
end
end
-- Forward reference
local check_red_link_inflections
-- Check a single inflection (which consists of a label and zero or more terms, each possibly with nested inflections)
-- for red links. If so, insert a red-link category based on `plpos` (the plural part of speech to insert in the
-- category), stop further processing, and return true. If no red links found, return false.
local function check_red_link_inflection_parts(data, parts, plpos)
for _, part in ipairs(parts) do
if type(part) ~= "table" then
part = {term = part}
end
local term = part.term
if term and not term:find("%[%[") then
local stripped_physical_term = get_link_page(term, data.lang, part.sc or parts.sc or nil)
if stripped_physical_term then
local title = mw.title.new(stripped_physical_term)
if title and not title:getContent() then
insert(data.categories, data.lang:getFullName() .. " " .. plpos .. " with red links in their headword lines")
return true
end
end
end
if part.inflections then
if check_red_link_inflections(data, part.inflections, plpos) then
return true
end
end
end
return false
end
-- Check a set of inflections (each of which describes a single inflection of the term, such as feminine or plural, and
-- consists of a label and zero or more terms, each possibly with nested inflections) for red links. If so, insert a
-- red-link category based on `plpos` (the plural part of speech to insert in the category), stop further processing,
-- and return true. If no red links found, return false.
function check_red_link_inflections(data, inflections, plpos)
if inflections and inflections[1] then
-- Check each inflection individually.
for key, infl in ipairs(inflections) do
if check_red_link_inflection_parts(data, infl, plpos) then
return true
end
end
end
return false
end
-- Check the top-level inflections in `data.inflections`, along with any nested inflections, for red links. If so,
-- insert a red-link category based on `plpos` (the plural part of speech to insert in the category), stop further
-- processing, and return true. If no red links found, return false.
local function check_red_link_inflections_top_level(data, plpos)
return check_red_link_inflections(data, data.inflections, plpos)
end
--[==[
Returns the plural form of `pos`, a raw part of speech input, which could be singular or
plural. Irregular plural POS are taken into account (e.g. "kanji" pluralizes to
"kanji").
]==]
function export.pluralize_pos(pos)
-- Make the plural form of the part of speech
return (m_data or get_data()).irregular_plurals[pos] or
pos:sub(-1) == "s" and pos or
pluralize(pos)
end
--[==[
Return "lemma" if the given POS is a lemma, "non-lemma form" if a non-lemma form, or nil
if unknown. The POS passed in must be in its plural form ("nouns", "prefixes", etc.).
If you have a POS in its singular form, call {export.pluralize_pos()} above to pluralize it
in a smart fashion that knows when to add "-s" and when to add "-es", and also takes
into account any irregular plurals.
If `best_guess` is given and the POS is in neither the lemma nor non-lemma list, guess
based on whether it ends in " forms"; otherwise, return nil.
]==]
function export.pos_lemma_or_nonlemma(plpos, best_guess)
local m_headword_data = m_data or get_data()
local isLemma = m_headword_data.lemmas
-- Is it a lemma category?
if isLemma[plpos] then
return "lemma"
end
local plpos_no_recon = plpos:gsub("^reconstructed ", "")
if isLemma[plpos_no_recon] then
return "lemma"
end
-- Is it a nonlemma category?
local isNonLemma = m_headword_data.nonlemmas
if isNonLemma[plpos] or isNonLemma[plpos_no_recon] then
return "non-lemma form"
end
local plpos_no_mut = plpos:gsub("^mutated ", "")
if isLemma[plpos_no_mut] or isNonLemma[plpos_no_mut] then
return "non-lemma form"
elseif best_guess then
return plpos:find(" forms$") and "non-lemma form" or "lemma"
else
return nil
end
end
--[==[
Canonicalize a part of speech as specified in 2= in {{tl|head}}. This checks for POS aliases and non-lemma form
aliases ending in 'f', and then pluralizes if the POS term does not have an invariable plural.
]==]
function export.canonicalize_pos(pos)
-- FIXME: Temporary code to throw an error for alias 'pre' (= preposition) that will go away.
if pos == "pre" then
-- Don't throw error on 'pref' as it's an alias for "prefix".
error("POS 'pre' for 'preposition' no longer allowed as it's too ambiguous; use 'prep'")
end
-- Likewise for pro = pronoun.
if pos == "pro" or pos == "prof" then
error("POS 'pro' for 'pronoun' no longer allowed as it's too ambiguous; use 'pron'")
end
local m_headword_data = m_data or get_data()
if m_headword_data.pos_aliases[pos] then
pos = m_headword_data.pos_aliases[pos]
elseif pos:sub(-1) == "f" then
pos = pos:sub(1, -2)
pos = (m_headword_data.pos_aliases[pos] or pos) .. " forms"
end
return export.pluralize_pos(pos)
end
-- Find and return the maximum index in the array `data[element]` (which may have gaps in it), and initialize it to a
-- zero-length array if unspecified. Check to make sure all keys are numeric (other than "maxindex", which is set by
-- [[Module:parameters]] for list parameters), all values are strings, and unless `allow_blank_string` is given,
-- no blank (zero-length) strings are present.
local function init_and_find_maximum_index(data, element, allow_blank_string)
local maxind = 0
if not data[element] then
data[element] = {}
end
local typ = type(data[element])
if typ ~= "table" then
error(("Internal error: In full_headword(), `data.%s` must be an array but is a %s"):format(element, typ))
end
for k, v in pairs(data[element]) do
if k ~= "maxindex" then
if type(k) ~= "number" then
error(("Internal error: Unrecognized non-numeric key '%s' in `data.%s`"):format(k, element))
end
if k > maxind then
maxind = k
end
if v then
if type(v) ~= "string" then
error(("Internal error: For key '%s' in `data.%s`, value should be a string but is a %s"):format(k, element, type(v)))
end
if not allow_blank_string and v == "" then
error(("Internal error: For key '%s' in `data.%s`, blank string not allowed; use 'false' for the default"):format(k, element))
end
end
end
end
return maxind
end
--[==[
-- Add the page to various maintenance categories for the language and the
-- whole page. These are placed in the headword somewhat arbitrarily, but
-- mainly because headword templates are mandatory for entries (meaning that
-- in theory it provides full coverage).
--
-- This is provided as an external entry point so that modules which transclude
-- information from other entries (such as {{tl|ja-see}}) can take advantage
-- of this feature as well, because they are used in place of a conventional
-- headword template.]==]
do
-- Handle any manual sortkeys that have been specified in raw categories
-- by tracking if they are the same or different from the automatically-
-- generated sortkey, so that we can track them in maintenance
-- categories.
local function handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats)
sortkey = sortkey or lang:makeSortKey(page.pagename)
-- If there are raw categories with no sortkey, then they will be
-- sorted based on the default MediaWiki sortkey, so we check against
-- that.
if tbl == true then
if page.raw_defaultsort ~= sortkey then
insert(lang_cats, lang:getFullName() .. " terms with non-redundant non-automated sortkeys")
end
return
end
local redundant, different
for k in pairs(tbl) do
if k == sortkey then
redundant = true
else
different = true
end
end
if redundant then
insert(lang_cats, lang:getFullName() .. " terms with redundant sortkeys")
end
if different then
insert(lang_cats, lang:getFullName() .. " terms with non-redundant non-automated sortkeys")
end
return sortkey
end
function export.maintenance_cats(page, lang, lang_cats, page_cats)
extend(page_cats, page.cats)
lang = lang:getFull() -- since we are just generating categories
local canonical = lang:getCanonicalName()
local tbl, sortkey = page.wikitext_topic_cat[lang:getCode()]
if tbl then
sortkey = handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats)
insert(lang_cats, canonical .. " entries with topic categories using raw markup")
end
tbl = page.wikitext_langname_cat[canonical]
if tbl then
handle_raw_sortkeys(tbl, sortkey, page, lang, lang_cats)
insert(lang_cats, canonical .. " entries with language name categories using raw markup")
end
if get_current_L2() ~= canonical then
insert(lang_cats, canonical .. " entries with incorrect language header")
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/incorrect language header/LANGCODE]]
track("incorrect language header", lang)
end
end
end
--[==[This is the primary external entry point.
{{lua|full_headword(data)}}
This is used by {{temp|head}} and various language-specific headword templates (e.g. {{temp|ru-adj}} for Russian adjectives, {{temp|de-noun}} for German nouns, etc.) to display an entire headword line.
See [[#Further explanations for full_headword()]]
]==]
function export.full_headword(data)
-- Prevent data from being destructively modified.
local data = shallow_copy(data)
------------ 1. Basic checks for old-style (multi-arg) calling convention. ------------
if data.getCanonicalName then
error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) of properties, not a language object")
end
if not data.lang or type(data.lang) ~= "table" or not data.lang.getCode then
error("Internal error: In full_headword(), the first argument `data` needs to be a Lua object (table) and `data.lang` must be a language object")
end
if data.id and type(data.id) ~= "string" then
error("Internal error: The id in the data table should be a string.")
end
------------ 2. Initialize pagename etc. ------------
local langcode = data.lang:getCode()
local full_langcode = data.lang:getFullCode()
local langname = data.lang:getCanonicalName()
local full_langname = data.lang:getFullName()
local raw_pagename = data.pagename
local page
local m_headword_data = m_data or get_data()
if raw_pagename and raw_pagename ~= m_headword_data.pagename then -- for testing, doc pages, etc.
-- data.pagename is often set on documentation and test pages through the pagename= parameter of various
-- templates, to emulate running on that page. Having a large number of such test templates on a single
-- page often leads to timeouts, because we fetch and parse the contents of each page in turn. However,
-- we don't really need to do that and can function fine without fetching and parsing the contents of a
-- given page, so turn off content fetching/parsing (and also setting the DEFAULTSORT key through a parser
-- function, which is *slooooow*) in certain namespaces where test and documentation templates are likely to
-- be found and where actual content does not live (User, Template, Module).
local actual_namespace = m_headword_data.page.namespace
local no_fetch_content = actual_namespace == "User" or actual_namespace == "Template" or
actual_namespace == "Module"
page = process_page(raw_pagename, no_fetch_content)
else
page = m_headword_data.page
end
local namespace = page.namespace
------------ 3. Initialize `data.heads` table; if old-style, convert to new-style. ------------
if type(data.heads) == "table" and type(data.heads[1]) == "table" then
-- new-style
if data.translits or data.transcriptions then
error("Internal error: In full_headword(), if `data.heads` is new-style (array of head objects), `data.translits` and `data.transcriptions` cannot be given")
end
else
-- convert old-style `heads`, `translits` and `transcriptions` to new-style
local maxind = max(
init_and_find_maximum_index(data, "heads"),
init_and_find_maximum_index(data, "translits", true),
init_and_find_maximum_index(data, "transcriptions", true)
)
for i = 1, maxind do
data.heads[i] = {
term = data.heads[i],
tr = data.translits[i],
ts = data.transcriptions[i],
}
end
end
-- Make sure there's at least one head.
if not data.heads[1] then
data.heads[1] = {}
end
------------ 4. Initialize and validate `data.categories` and `data.whole_page_categories`, and determine `pos_category` if not given, and add basic categories. ------------
-- EXPERIMENTAL: see [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]]
if data.altform then
data.noposcat = true
end
init_and_find_maximum_index(data, "categories")
init_and_find_maximum_index(data, "whole_page_categories")
local pos_category_already_present = false
if data.categories[1] then
local escaped_langname = pattern_escape(full_langname)
local matches_lang_pattern = "^" .. escaped_langname .. " "
for _, cat in ipairs(data.categories) do
-- Does the category begin with the language name? If not, tag it with a tracking category.
if not cat:find(matches_lang_pattern) then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/no lang category/LANGCODE]]
track("no lang category", data.lang)
end
end
-- If `pos_category` not given, try to infer it from the first specified category. If this doesn't work, we
-- throw an error below.
if not data.pos_category and data.categories[1]:find(matches_lang_pattern) then
data.pos_category = data.categories[1]:gsub(matches_lang_pattern, "")
-- Optimization to avoid inserting category already present.
pos_category_already_present = true
end
end
if not data.pos_category then
error("Internal error: `data.pos_category` not specified and could not be inferred from the categories given in "
.. "`data.categories`. Either specify the plural part of speech in `data.pos_category` "
.. "(e.g. \"proper nouns\") or ensure that the first category in `data.categories` is formed from the "
.. "language's canonical name plus the plural part of speech (e.g. \"Norwegian Bokmål proper nouns\")."
)
end
-- Insert a category at the beginning for the part of speech unless it's already present or `data.noposcat` given.
if not pos_category_already_present and not data.noposcat then
local pos_category = full_langname .. " " .. data.pos_category
-- FIXME: [[User:Theknightwho]] Why is this special case here? Please add an explanatory comment.
if pos_category ~= "Translingual Han characters" then
insert(data.categories, 1, pos_category)
end
end
-- Try to determine whether the part of speech refers to a lemma or a non-lemma form; if we can figure this out,
-- add an appropriate category.
local postype = export.pos_lemma_or_nonlemma(data.pos_category)
if not postype then
-- We don't know what this category is, so tag it with a tracking category.
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANGCODE]]
track("unrecognized pos", data.lang)
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/POS/LANGCODE]]
track("unrecognized pos/pos/" .. data.pos_category, data.lang)
elseif not data.noposcat then
insert(data.categories, 1, full_langname .. " " .. postype .. "s")
end
-- EXPERIMENTAL: see [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]]
if data.altform then
insert(data.categories, 1, full_langname .. " alternative forms")
end
------------ 5. Create a default headword, and add links to multiword page names. ------------
-- Determine if this is an "anti-asterisk" term, i.e. an attested term in a language that must normally be
-- reconstructed.
local is_anti_asterisk = data.heads[1].term and data.heads[1].term:find("^!!")
local lang_reconstructed = data.lang:hasType("reconstructed")
if is_anti_asterisk then
if not lang_reconstructed then
error("Anti-asterisk feature (head= beginning with !!) can only be used with reconstructed languages")
end
lang_reconstructed = false
end
-- Determine if term is reconstructed
local is_reconstructed = namespace == "Reconstruction" or lang_reconstructed
-- Create a default headword based on the pagename, which is determined in
-- advance by the data module so that it only needs to be done once.
local default_head = page.pagename
-- Add links to multi-word page names when appropriate
if not (is_reconstructed or data.nolinkhead) then
local no_links = m_headword_data.no_multiword_links
if not (no_links[langcode] or no_links[full_langcode]) and export.head_is_multiword(default_head) then
default_head = export.add_multiword_links(default_head, true)
end
end
if is_reconstructed then
default_head = "*" .. default_head
end
------------ 6. Check the namespace against the language type. ------------
if namespace == "" then
if lang_reconstructed then
error("Entries in " .. langname .. " must be placed in the Reconstruction: namespace")
elseif data.lang:hasType("appendix-constructed") then
error("Entries in " .. langname .. " must be placed in the Appendix: namespace")
end
elseif namespace == "Citations" or namespace == "Thesaurus" then
error("Headword templates should not be used in the " .. namespace .. ": namespace.")
end
------------ 7. Fill in missing values in `data.heads`. ------------
-- True if any script among the headword scripts has spaces in it.
local any_script_has_spaces = false
-- True if any term has a redundant head= param.
local has_redundant_head_param = false
for _, head in ipairs(data.heads) do
------ 7a. If missing head, replace with default head.
if not head.term then
head.term = default_head
elseif head.term == default_head then
has_redundant_head_param = true
elseif is_anti_asterisk and head.term == "!!" then
-- If explicit head=!! is given, it's an anti-asterisk term and we fill in the default head.
head.term = "!!" .. default_head
elseif head.term:find("^[!?]$") then
-- If explicit head= just consists of ! or ?, add it to the end of the default head.
head.term = default_head .. head.term
end
head.term_no_initial_bang_bang = is_anti_asterisk and head.term:sub(3) or head.term
if is_reconstructed then
local head_term = head.term
if head_term:find("%[%[") then
head_term = remove_links(head_term)
end
if head_term:sub(1, 1) ~= "*" then
error("The headword '" .. head_term .. "' must begin with '*' to indicate that it is reconstructed.")
end
end
------ 7b. Try to detect the script(s) if not provided. If a per-head script is provided, that takes precedence,
------ otherwise fall back to the overall script if given. If neither given, autodetect the script.
local auto_sc = data.lang:findBestScript(head.term)
if (
auto_sc:getCode() == "None" and
find_best_script_without_lang(head.term):getCode() ~= "None"
) then
insert(data.categories, full_langname .. " terms in nonstandard scripts")
end
if not (head.sc or data.sc) then -- No script code given, so use autodetected script.
head.sc = auto_sc
else
if not head.sc then -- Overall script code given.
head.sc = data.sc
end
-- Track uses of sc parameter.
if head.sc:getCode() == auto_sc:getCode() then
track("redundant script code", data.lang)
if not data.no_script_code_cat then
insert(data.categories, full_langname .. " terms with redundant script codes")
end
else
track("non-redundant manual script code", data.lang)
if not data.no_script_code_cat then
insert(data.categories, full_langname .. " terms with non-redundant manual script codes")
end
end
end
-- If using a discouraged character sequence, add to maintenance category.
if head.sc:hasNormalizationFixes() == true then
local composed_head = toNFC(head.term)
if head.sc:fixDiscouragedSequences(composed_head) ~= composed_head then
insert(data.whole_page_categories, "Pages using discouraged character sequences")
end
end
any_script_has_spaces = any_script_has_spaces or head.sc:hasSpaces()
------ 7c. Create automatic transliterations for any non-Latin headwords without manual translit given
------ (provided automatic translit is available, e.g. not in Persian or Hebrew).
-- Make transliterations
head.tr_manual = nil
-- Try to generate a transliteration if necessary
if head.tr == "-" then
head.tr = nil
else
local notranslit = m_headword_data.notranslit
if not (notranslit[langcode] or notranslit[full_langcode]) and head.sc:isTransliterated() then
head.tr_manual = not not head.tr
local text = head.term_no_initial_bang_bang
if not data.lang:link_tr(head.sc) then
text = remove_links(text)
end
local automated_tr = data.lang:transliterate(text, head.sc)
if automated_tr then
local manual_tr = head.tr
if manual_tr then
if remove_links(manual_tr) == remove_links(automated_tr) then
insert(data.categories, full_langname .. " terms with redundant transliterations")
else
insert(data.categories, full_langname .. " terms with non-redundant manual transliterations")
end
end
if not manual_tr then
head.tr = automated_tr
end
end
-- There is still no transliteration?
-- Add the entry to a cleanup category.
if not head.tr then
head.tr = "<small>transliteration needed</small>"
-- FIXME: No current support for 'Request for transliteration of Classical Persian terms' or similar.
-- Consider adding this support in [[Module:category tree/poscatboiler/data/entry maintenance]].
insert(data.categories, "Requests for transliteration of " .. full_langname .. " terms")
else
-- Otherwise, trim it.
head.tr = trim(head.tr)
end
end
end
-- Link to the transliteration entry for languages that require this.
if head.tr and data.lang:link_tr(head.sc) then
head.tr = full_link{
term = head.tr,
lang = data.lang,
sc = get_script("Latn"),
tr = "-"
}
end
end
------------ 8. Maybe tag the title with the appropriate script code, using the `display_title` mechanism. ------------
-- Assumes that the scripts in "toBeTagged" will never occur in the Reconstruction namespace.
-- (FIXME: Don't make assumptions like this, and if you need to do so, throw an error if the assumption is violated.)
-- Avoid tagging ASCII as Hani even when it is tagged as Hani in the headword, as in [[check]]. The check for ASCII
-- might need to be expanded to a check for any Latin characters and whitespace or punctuation.
local display_title
-- Where there are multiple headwords, use the script for the first. This assumes the first headword is similar to
-- the pagename, and that headwords that are in different scripts from the pagename aren't first. This seems to be
-- about the best we can do (alternatively we could potentially do script detection on the pagename).
local dt_script = data.heads[1].sc
local dt_script_code = dt_script:getCode()
local page_non_ascii = namespace == "" and not page.pagename:find("^[%z\1-\127]+$")
local unsupported_pagename, unsupported = page.full_raw_pagename:gsub("^Unsupported titles/", "")
if unsupported == 1 and page.unsupported_titles[unsupported_pagename] then
display_title = 'Unsupported titles/<span class="' .. dt_script_code .. '">' .. page.unsupported_titles[unsupported_pagename] .. '</span>'
elseif page_non_ascii and m_headword_data.toBeTagged[dt_script_code]
or (dt_script_code == "Jpan" and (text_in_script(page.pagename, "Hira") or text_in_script(page.pagename, "Kana")))
or (dt_script_code == "Kore" and text_in_script(page.pagename, "Hang")) then
display_title = '<span class="' .. dt_script_code .. '">' .. page.full_raw_pagename .. '</span>'
-- Keep Han entries region-neutral in the display title.
elseif page_non_ascii and (dt_script_code == "Hant" or dt_script_code == "Hans") then
display_title = '<span class="Hani">' .. page.full_raw_pagename .. '</span>'
elseif namespace == "Reconstruction" then
local matched
display_title, matched = ugsub(
page.full_raw_pagename,
"^(Reconstruction:[^/]+/)(.+)$",
function(before, term)
return before .. tag_text(term, data.lang, dt_script)
end
)
if matched == 0 then
display_title = nil
end
end
-- FIXME: Generalize this.
-- If the current language uses ur-Arab (for Urdu, etc.), ku-Arab (Central Kurdish) or pa-Arab
-- (Shahmukhi, for Punjabi) and there's more than one language on the page, don't set the display title
-- because these three scripts display in Nastaliq and we don't want this for terms that also exist in other
-- languages that don't display in Nastaliq (e.g. Arabic or Persian) to display in Nastaliq. Because the word
-- "Urdu" occurs near the end of the alphabet, Urdu fonts tend to override the fonts of other languages.
-- FIXME: This is checking for more than one language on the page but instead needs to check if there are any
-- languages using scripts other than the ones just mentioned.
if (dt_script_code == "ur-Arab" or dt_script_code == "ku-Arab" or dt_script_code == "pa-Arab") and page.L2_list.n > 1 then
display_title = nil
end
if display_title then
mw.getCurrentFrame():callParserFunction(
"DISPLAYTITLE",
display_title
)
end
------------ 9. Insert additional categories. ------------
if data.force_cat_output then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/force cat output]]
track("force cat output")
end
if has_redundant_head_param then
if not data.no_redundant_head_cat then
-- This is not the right way to go about this; too many exceptions and problems due to language-specific headword
-- handling customization. If we want this, it should be opt-in by a given language passing in the default headword.
-- insert(data.categories, full_langname .. " terms with redundant head parameter")
end
end
-- If the first head is multiword (after removing links), maybe insert into "LANG multiword terms".
if not data.nomultiwordcat and any_script_has_spaces and postype == "lemma" then
local no_multiword_cat = m_headword_data.no_multiword_cat
if not (no_multiword_cat[langcode] or no_multiword_cat[full_langcode]) then
-- Check for spaces or hyphens, but exclude prefixes and suffixes.
-- Use the pagename, not the head= value, because the latter may have extra
-- junk in it, e.g. superscripted text that throws off the algorithm.
local no_hyphen = m_headword_data.hyphen_not_multiword_sep
-- Exclude hyphens if the data module states that they should for this language.
local checkpattern = (no_hyphen[langcode] or no_hyphen[full_langcode]) and ".[%s፡]." or ".[%s%-፡]."
local is_multiword = umatch(page.pagename, checkpattern)
if is_multiword and not non_categorizable(page.full_raw_pagename) then
insert(data.categories, full_langname .. " multiword terms")
elseif not is_multiword then
local long_word_threshold = m_headword_data.long_word_thresholds[langcode] or
m_headword_data.long_word_thresholds[full_langcode]
if long_word_threshold and ulen(page.pagename) >= long_word_threshold then
insert(data.categories, "Long " .. full_langname .. " words")
end
end
end
end
local default_sccat = m_headword_data.default_sccat
if data.sccat or data.sccat == nil and (default_sccat[langcode] or default_sccat[full_langcode]) then
for _, head in ipairs(data.heads) do
insert(data.categories, full_langname .. " " .. data.pos_category .. " in " ..
head.sc:getDisplayForm())
end
end
-- Reconstructed terms often use weird combinations of scripts and realistically aren't spelled so much as notated.
if namespace ~= "Reconstruction" then
-- Map from languages to a string containing the characters to ignore when considering whether a term has
-- multiple written scripts in it. Typically these are Greek or Cyrillic letters used for their phonetic
-- values.
local characters_to_ignore = {
["aaq"] = "αάὰ", -- Penobscot (Algonquian)
["acy"] = "δθ", -- Cypriot Arabic
["aez"] = "β", -- Aeka (Trans-New Guinea)
["anc"] = "γ", -- Ngas (Chadic/Afroasiatic)
["aou"] = "χ", -- A'ou (Kra-Dai)
["art-blk"] = "ч", -- Bolak (conlang)
["awg"] = "β", -- Anguthimri (Pama-Nyungan)
["az"] = "ь", -- Azerbaijani (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["ba"] = "ь", -- Bashkir (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["bhp"] = "β", -- Bima (Austronesian)
["bjz"] = "β", -- Baruga (Trans-New Guinea)
["byk"] = "θ", -- Biao (Kra-Dai)
["cdy"] = "θ", -- Chadong (Kra-Dai)
["chp"] = "θ", -- Chipewyan (Athabaskan)
["cjh"] = "χ", -- Upper Chehalis (Salishan)
["clm"] = "χ", -- Klallam (Salishan)
["col"] = "χ", -- Colombia-Wenatchi (Salishan)
["coo"] = "χθ", -- Comox (Salishan)
["crx"] = "θ", -- Carrier (Athabaskan)
["ets"] = "θ", -- Yekhee (Edoid/Niger-Congo)
["ett"] = "χ", -- Etruscan (isolate; in romanizations)
["fla"] = "χ", -- Montana Salish (Salishan)
["grt"] = "་", -- Garo (South Asian Sino-Tibetan)
["gmw-gts"] = "χ", -- Gottscheerish (Bavarian variant spoken in Slovenia)
["hur"] = "χθ", -- Halkomelem (Salishan)
["itc-psa"] = "f", -- Pre-Samnite (Italic; normally written in Greek)
["izh"] = "ь", -- Ingrian (Finnic)
["kic"] = "θ", -- Kickapoo (Algonquian)
["kk"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["ky"] = "ь", -- Kyrgyz (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["lil"] = "χ", -- Lillooet (Salishan)
["lsi"] = "ꓹ", -- Lashi (Lolo-Burmese/Sino-Tibetan; represents a glottal stop)
["mhz"] = "β", -- Mor (Austronesian)
["mqn"] = "β", -- Moronene (Austronesian)
["neg"]= "ӡā", -- Negidal (Tungusic; normally in Cyrillic)
["oka"] = "χ", -- Okanagan (Salishan)
["ole"] = "θ", -- Olekha (Sino-Tibetan)
["oui"] = "γβ", -- Old Uyghur (Turkic; FIXME: others? E.g. Greek delta (δ)?)
["pox"] = "χ", -- Polabian (West Slavic)
["rif"] = "ε", -- Tarifit (Berber)
["rom"] = "Θθ", -- Romani (Indic: International Standard; two different thetas???)
["rpn"] = "β", -- Repanbitip (Austronesian)
["sah"] = "ь", -- Yakut (Turkic; 1929 - 1939 Latin spelling)
["sit-jap"] = "χ", -- Japhug (Sino-Tibetan)
["sjw"] = "θ", -- Shawnee (Algonquian)
["squ"] = "χ", -- Squamish (Salishan)
["str"] = "χθ", -- Saanich (Salishan)
["teh"] = "χ", -- Tehuelche (Chonan; spoken in Argentina)
["tep"] = "η", -- Tepecano (Uto-Aztecan)
["thp"] = "χ", -- Thompson (Salishan)
["tk"] = "ь", -- Turkmen (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["tt"] = "ь", -- Kazakh (Turkic; Yañalif Latin spelling, c. 1928 - 1938)
["twa"] = "χ", -- Twana (Salishan)
["wbl"] = "ы", -- Wakhi (Iranian)
["xbc"] = "ϸ", -- Bactrian (Iranian; represents š; normally written in Greek)
["yha"] = "θ", -- Baha (Kra-Dai)
["za"] = "зч", -- Zhuang (Tai/Kra-Dai); 1957-1982 alphabet used two Cyrillic letters (as well as some others like
-- ƃ, ƅ, ƨ, ɯ and ɵ that look like Cyrillic or Greek but are actually Latin)
["zlw-slv"] = "χђћ", -- Slovincian (West Slavic; FIXME: χ is Greek, the other two are Cyrillic, but I'm not sure
-- the currect characters are being chosen in the entry names)
["zng"] = "θ", -- Mang (Mon-Khmer)
["ztp"] = "θ", -- Loxicha Zapotec (Zapotecan)
}
-- Determine how many real scripts are found in the pagename, where we exclude symbols and such. We exclude
-- scripts whose `character_category` is false as well as Zmth (mathematical notation symbols), which has a
-- category of "Mathematical notation symbols". When counting scripts, we need to elide language-specific
-- variants because e.g. Beng and as-Beng have slightly different characters but we don't want to consider them
-- two different scripts (e.g. [[এৰ]] has two characters which are detected respectively as Beng and as-Beng).
local seen_scripts = {}
local num_seen_scripts = 0
local num_loops = 0
local canon_pagename = page.pagename
local ch_to_ignore = characters_to_ignore[full_langcode]
if ch_to_ignore then
canon_pagename = ugsub(canon_pagename, "[" .. ch_to_ignore .. "]", "")
end
while true do
if canon_pagename == "" or num_seen_scripts >= 2 or num_loops >= 10 then
break
end
-- Make sure we don't get into a loop checking the same script over and over again; happens with e.g. [[ᠪᡳ]]
num_loops = num_loops + 1
local pagename_script = find_best_script_without_lang(canon_pagename, "None only as last resort")
local script_chars = pagename_script.characters
if not script_chars then
-- we are stuck; this happens with None
break
end
local script_code = pagename_script:getCode()
local replaced
canon_pagename, replaced = ugsub(canon_pagename, "[" .. script_chars .. "]", "")
if (
replaced and
script_code ~= "Zmth" and
(script_data or get_script_data())[script_code] and
script_data[script_code].character_category ~= false
) then
script_code = script_code:gsub("^.-%-", "")
if not seen_scripts[script_code] then
seen_scripts[script_code] = true
num_seen_scripts = num_seen_scripts + 1
end
end
end
if num_seen_scripts > 1 then
insert(data.categories, full_langname .. " terms written in multiple scripts")
end
end
-- Categorise for unusual characters. Takes into account combining characters, so that we can categorise for characters with diacritics that aren't encoded as atomic characters (e.g. U̠). These can be in two formats: single combining characters (i.e. character + diacritic(s)) or double combining characters (i.e. character + diacritic(s) + character). Each can have any number of diacritics.
local standard = data.lang:getStandardCharacters()
if standard and not non_categorizable(page.full_raw_pagename) then
local function char_category(char)
local specials = {
["#"] = "number sign",
["("] = "parentheses",
[")"] = "parentheses",
["<"] = "angle brackets",
[">"] = "angle brackets",
["["] = "square brackets",
["]"] = "square brackets",
["_"] = "underscore",
["{"] = "braces",
["|"] = "vertical line",
["}"] = "braces",
["ß"] = "ẞ",
["\205\133"] = "", -- this is UTF-8 for U+0345 ( ͅ)
["\239\191\189"] = "replacement character",
}
char = toNFD(char)
:gsub(".[\128-\191]*", function(m)
local new_m = specials[m]
new_m = new_m or m:uupper()
return new_m
end)
return toNFC(char)
end
if full_langcode ~= "hi" and full_langcode ~= "lo" then
local standard_chars_scripts = {}
for _, head in ipairs(data.heads) do
standard_chars_scripts[head.sc:getCode()] = true
end
-- Iterate over the scripts, in case there is more than one (as they can have different sets of standard characters).
for code in pairs(standard_chars_scripts) do
local sc_standard = data.lang:getStandardCharacters(code)
if sc_standard then
if page.pagename_len > 1 then
local explode_standard = {}
local function explode(char)
explode_standard[char] = true
return ""
end
local sc_standard = ugsub(sc_standard, page.comb_chars.combined_double, explode)
sc_standard = ugsub(sc_standard,page.comb_chars.combined_single, explode)
:gsub(".[\128-\191]*", explode)
local num_cat_inserted
for char in pairs(page.explode_pagename) do
if not explode_standard[char] then
if char:find("[0-9]") then
if not num_cat_inserted then
insert(data.categories, full_langname .. " terms spelled with numbers")
num_cat_inserted = true
end
elseif ufind(char, page.emoji_pattern) then
insert(data.categories, full_langname .. " terms spelled with emoji")
else
local upper = char_category(char)
if not explode_standard[upper] then
char = upper
end
insert(data.categories, full_langname .. " terms spelled with " .. char)
end
end
end
end
-- If a diacritic doesn't appear in any of the standard characters, also categorise for it generally.
sc_standard = toNFD(sc_standard)
for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_single) do
if not umatch(sc_standard, diacritic) then
insert(data.categories, full_langname .. " terms spelled with ◌" .. diacritic)
end
end
for diacritic in ugmatch(page.decompose_pagename, page.comb_chars.diacritics_double) do
if not umatch(sc_standard, diacritic) then
insert(data.categories, full_langname .. " terms spelled with ◌" .. diacritic .. "◌")
end
end
end
end
-- Ancient Greek, Hindi and Lao handled the old way for now, as their standard chars still need to be converted to the new format (because there are a lot of them).
elseif ulen(page.pagename) ~= 1 then
for character in ugmatch(page.pagename, "([^" .. standard .. "])") do
local upper = char_category(character)
if not umatch(upper, "[" .. standard .. "]") then
character = upper
end
insert(data.categories, full_langname .. " terms spelled with " .. character)
end
end
end
if data.heads[1].sc:isSystem("alphabet") then
local pagename, i = page.pagename:ulower(), 2
while umatch(pagename, "(%a)" .. ("%1"):rep(i)) do
i = i + 1
insert(data.categories, full_langname .. " terms with " .. i .. " consecutive instances of the same letter")
end
end
-- Categorise for palindromes
if not data.nopalindromecat and namespace ~= "Reconstruction" and ulen(page.pagename) > 2
-- FIXME: Use of first script here seems hacky. What is the clean way of doing this in the presence of
-- multiple scripts?
and is_palindrome(page.pagename, data.lang, data.heads[1].sc) then
insert(data.categories, full_langname .. " palindromes")
end
if namespace == "" and not lang_reconstructed then
for _, head in ipairs(data.heads) do
if page.full_raw_pagename ~= get_link_page(remove_links(head.term), data.lang, head.sc) then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch]]
-- [[Special:WhatLinksHere/Wiktionary:Tracking/headword/pagename spelling mismatch/LANGCODE]]
track("pagename spelling mismatch", data.lang)
break
end
end
end
-- Add red link category if called for and we're not a "large" page, where such checks are disabled.
if data.checkredlinks and not m_headword_data.large_pages[m_headword_data.pagename] then
local plposcat = type(data.checkredlinks) == "string" and data.checkredlinks or data.pos_category
check_red_link_inflections_top_level(data, plposcat)
end
-- Add to various maintenance categories.
export.maintenance_cats(page, data.lang, data.categories, data.whole_page_categories)
------------ 10. Format and return headwords, genders, inflections and categories. ------------
-- Format and return all the gathered information. This may add more categories (e.g. gender/number categories),
-- so make sure we do it before evaluating `data.categories`.
local text = '<span class="headword-line">' ..
format_headword(data) ..
format_headword_genders(data) ..
format_top_level_inflections(data) .. '</span>'
-- Language-specific categories.
local cats = format_categories(
data.categories, data.lang, data.sort_key, page.encoded_pagename,
data.force_cat_output or test_force_categories, data.heads[1].sc
)
-- Language-agnostic categories.
local whole_page_cats = format_categories(
data.whole_page_categories, nil, "-"
)
return text .. cats .. whole_page_cats
end
return export
b4we9gs90jdw619tqh0m0v5qu6gi4ab
Mòideal:headword/data
828
16652
86384
86137
2026-07-23T04:07:26Z
Altronic
4137
test
86384
Scribunto
text/plain
local headword_page_module = "Module:headword/page"
local list_to_set = require("Module:table").listToSet
local data = {}
------ 1. Lists which are converted into sets. ------
--[==[ var:
Large pages where we disable label tracking, red link checking and similar.
]==]
data.large_pages = list_to_set {
-- pages that consistently hit timeouts
"a",
-- pages that sometimes hit timeouts
"A",
"baba",
"de",
"e",
"i",
"lima",
"o",
"u",
"и",
"山",
"子",
"月",
"一",
"人",
}
--[==[ var:
Map from singular to plural, and from plural to itself, for recognized parts of speech with irregular plurals. Most of
these are invariable plurals, e.g. `kanji` is its own plural; but we also have `mora` plural `morae`.
]==]
data.irregular_plurals = list_to_set({
"cmavo",
"cmene",
"fu'ivla",
"gismu",
"Han tu",
"hanja",
"hanzi",
"jyutping",
"kana",
"kanji",
"lujvo",
"phrasebook",
"pinyin",
"rafsi",
}, function(_, item)
return item
end)
local irregular_plurals = data.irregular_plurals
-- Irregular non-zero plurals AND any regular plurals where the singular ends in "s",
-- because the module assumes that inputs ending in "s" are plurals. The singular and
-- plural both need to be added, as the module will generate a default plural if
-- the input doesn't match a key in this table.
for sg, pl in next, {
mora = "morae",
riochdair = "riochdairean"
} do
irregular_plurals[sg], irregular_plurals[pl] = pl, pl
end
--[==[ var:
Recognized lemmas. If the part of speech in {{tl|head}} is set to one of these or its singular equivalent, the category
'LANG lemmas' will automatically be added. If the part of speech is not a singular or plural lemma or non-lemma form and
is not an abbreviation that expands to a recognized lemma or non-lemma form, the page will be added to various tracking
categories:
* [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]]
* [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANG]]
* [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/pos/POS]]
* [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/pos/POS/LANG]]
]==]
data.lemmas = list_to_set{
"abbreviations",
"acronyms",
"adjectives",
"adnominals",
"adpositions",
"adverbs",
"affixes",
"ambipositions",
"articles",
"circumfixes",
"circumpositions",
"classifiers",
"cmavo",
"cmavo clusters",
"cmene",
"combining forms",
"conjunctions",
"counters",
"determiners",
"diacritical marks",
"digraphs",
"equative adjectives",
"fu'ivla",
"gismu",
"Han characters",
"Han tu",
"hanja",
"hanzi",
"ideophones",
"idioms",
"infixes",
"initialisms",
"iteration marks",
"interfixes",
"interjections",
"kana",
"kanji",
"letters",
"ligatures",
"logograms",
"lujvo",
"morae",
"morphemes",
"non-constituents",
"nouns",
"numbers",
"numeral symbols",
"numerals",
"particles",
"phrases",
"postpositions",
"postpositional phrases",
"predicatives",
"prefixes",
"prepositional phrases",
"prepositions",
"preverbs",
"pronominal adverbs",
"pronouns",
"proper nouns",
"proverbs",
"punctuation marks",
"relatives",
"roots",
"stems",
"suffixes",
"syllables",
"symbols",
"verbs",
}
--[==[ var:
Recognized non-lemma forms. If the part of speech in {{tl|head}} is set to one of these or its singular equivalent, the
category 'LANG non-lemma forms' will automatically be added. If the part of speech is not a singular or plural lemma or
non-lemma form and is not an abbreviation that expands to a recognized lemma or non-lemma form, the page will be added
to various tracking categories; see the documentation of `data.lemmas`.
]==]
data.nonlemmas = list_to_set{
"active participle forms",
"active participles",
"adjectival participles",
"adjective case forms",
"adjective forms",
"adjective feminine forms",
"adjective plural forms",
"adverb forms",
"adverbial participles",
"agent participles",
"article forms",
"circumfix forms",
"combined forms",
"comparative adjective forms",
"comparative adjectives",
"comparative adverb forms",
"comparative adverbs",
"conjunction forms",
"contractions",
"converbs",
"determiner comparative forms",
"determiner forms",
"determiner superlative forms",
"diminutive nouns",
"elative adjectives",
"equative adjective forms",
"equative adjectives",
"future participles",
"gerunds",
"infinitive forms",
"infinitives",
"interjection forms",
"jyutping",
"misspellings",
"negative participles",
"nominal participles",
"noun case forms",
"noun construct forms",
"noun dual forms",
"noun forms",
"noun paucal forms",
"noun plural forms",
"noun possessive forms",
"noun singulative forms",
"numeral forms",
"participles",
"participle forms",
"particle forms",
"passive participles",
"past active participles",
"past adverbial participles",
"past participles",
"past participle forms",
"past passive participles",
"perfect active participles",
"perfect participles",
"perfect passive participles",
"pinyin",
"plurals",
"postposition forms",
"prefix forms",
"preposition contractions",
"preposition forms",
"prepositional pronouns",
"present active participles",
"present adverbial participles",
"present participles",
"present passive participles",
"preverb forms",
"pronoun forms",
"pronoun possessive forms",
"proper noun forms",
"proper noun plural forms",
"rafsi",
"romanizations",
"root forms",
"singulatives",
"suffix forms",
"superlative adjective forms",
"superlative adjectives",
"superlative adverb forms",
"superlative adverbs",
"verb forms",
"verbal nouns",
}
--[==[ var:
List of languages that will not have links to separate parts of the headword.
]==]
data.no_multiword_links = list_to_set{
"zh",
}
--[==[ var:
List of languages that will not have `LANG multiword terms` categories added. There are various reasons why languages
are in this list: (a) words are written without spaces between them; (b) syllables are written with spaces between them;
(c) variant reconstructions are notated with a tilde surrounded by spaces; (d) the language is a sign language, where
pagenames are multiword descriptions of the gesture(s) required to make an individual sign; (e) some other weirdnesses.
]==]
data.no_multiword_cat = list_to_set{
-------- Languages without spaces between words (sometimes spaces between phrases) --------
"blt", -- Tai Dam
"ja", -- Japanese
"khb", -- Lü
"km", -- Khmer
"lo", -- Lao
"mnw", -- Mon
"my", -- Burmese
"nan", -- Min Nan (some words in Latin script; hyphens between syllables)
"nan-hbl", -- Hokkien (some words in Latin script; hyphens between syllables)
"nod", -- Northern Thai
"ojp", -- Old Japanese
"shn", -- Shan
"sou", -- Southern Thai
"tdd", -- Tai Nüa
"th", -- Thai
"tts", -- Isan
"twh", -- Tai Dón
"txg", -- Tangut
"zh", -- Chinese (all varieties with Chinese characters)
"zkt", -- Khitan
-------- Languages with spaces between syllables --------
"ahk", -- Akha
"aou", -- A'ou
"atb", -- Zaiwa
"byk", -- Biao
"cdy", -- Chadong
--"duu", -- Drung; not sure
--"hmx-pro", -- Proto-Hmong-Mien
--"hnj", -- Green Hmong; not sure
"huq", -- Tsat
"ium", -- Iu Mien
--"lis", -- Lisu; not sure
"mtq", -- Muong
--"mww", -- White Hmong; not sure
"onb", -- Lingao
--"sit-gkh", -- Gokhy; not sure
--"swi", -- Sui; not sure
"tbq-lol-pro", -- Proto-Loloish
"tdh", -- Thulung
"ukk", -- Muak Sa-aak
"vi", -- Vietnamese
"yig", -- Wusa Nasu
"zng", -- Mang
-------- Languages with ~ with surrounding spaces used to separate variants --------
"mkh-ban-pro", -- Proto-Bahnaric
"sit-pro", -- Proto-Sino-Tibetan; listed above
-------- Other weirdnesses --------
"mul", -- Translingual; gestures, Morse code, etc.
"aot", -- Atong (India); bullet is a letter
-------- All sign languages --------
"ads",
"aed",
"aen",
"afg",
"ase",
"asf",
"asp",
"asq",
"asw",
"bfi",
"bfk",
"bog",
"bqn",
"bqy",
"bvl",
"bzs",
"cds",
"csc",
"csd",
"cse",
"csf",
"csg",
"csl",
"csn",
"csq",
"csr",
"doq",
"dse",
"dsl",
"ecs",
"esl",
"esn",
"eso",
"eth",
"fcs",
"fse",
"fsl",
"fss",
"gds",
"gse",
"gsg",
"gsm",
"gss",
"gus",
"hab",
"haf",
"hds",
"hks",
"hos",
"hps",
"hsh",
"hsl",
"icl",
"iks",
"ils",
"inl",
"ins",
"ise",
"isg",
"isr",
"jcs",
"jhs",
"jls",
"jos",
"jsl",
"jus",
"kgi",
"kvk",
"lbs",
"lls",
"lsl",
"lso",
"lsp",
"lst",
"lsy",
"lws",
"mdl",
"mfs",
"mre",
"msd",
"msr",
"mzc",
"mzg",
"mzy",
"nbs",
"ncs",
"nsi",
"nsl",
"nsp",
"nsr",
"nzs",
"okl",
"pgz",
"pks",
"prl",
"prz",
"psc",
"psd",
"psg",
"psl",
"pso",
"psp",
"psr",
"pys",
"rms",
"rsl",
"rsm",
"sdl",
"sfb",
"sfs",
"sgg",
"sgx",
"slf",
"sls",
"sqk",
"sqs",
"ssp",
"ssr",
"svk",
"swl",
"syy",
"tse",
"tsm",
"tsq",
"tss",
"tsy",
"tza",
"ugn",
"ugy",
"ukl",
"uks",
"vgt",
"vsi",
"vsl",
"vsv",
"xki",
"xml",
"xms",
"ygs",
"ysl",
"zib",
"zsl",
}
--[==[ var:
List of languages where a hyphen is not considered a word separator for the `LANG multiword terms` category. There are
numerous reasons why languages are in this list; by each language should be listed the reason for inclusion.
]==]
data.hyphen_not_multiword_sep = list_to_set{
"akk", -- Akkadian; hyphens between syllables
"akl", -- Aklanon; hyphens for mid-word glottal stops
"ber-pro", -- Proto-Berber; morphemes separated by hyphens
"ceb", -- Cebuano; hyphens for mid-word glottal stops
"cnk", -- Khumi Chin; hyphens used in single words
"cpi", -- Chinese Pidgin English; Chinese-derived words with hyphens between syllables
"de", -- German; too many false positives
"esx-esk-pro", -- hyphen used to separate morphemes
"fi", -- Finnish; hyphen used to separate components in compound words if the final and initial vowels match, respectively
"gd", -- Scottish Gaelic; too many false positives like [[a-chianaibh]], [[a-nìos]], [[an-dè]] and other adverbs in a- and an-
"hil", -- Hiligaynon; hyphens for mid-word glottal stops
"hnn", -- Hanunoo; too many false positives
"ilo", -- Ilocano; hyphens for mid-word glottal stops
"kne", -- Kankanaey; hyphens for mid-word glottal stops
"lcp", -- Western Lawa; dash as syllable joiner
"lwl", -- Eastern Lawa; dash as syllable joiner
"mfa", -- Pattani Malay in Thai script; dash as syllable joiner
"mkh-vie-pro", -- Proto-Vietic; morphemes separated by hyphens
"msb", -- Masbatenyo; too many false positives
"tl", -- Tagalog; too many false positives
"war", -- Waray-Waray; too many false positives
"yo", -- Yoruba; hyphens used to show lengthened nasal vowels
}
--[==[ var:
List of languages that will not have `LANG masculine nouns` and similar categories added. Generally, these languages are
lacking gender but use the gender field for other purposes. (This is a massive hack and should be changed.)
]==]
data.no_gender_cat = list_to_set{
-- Languages without gender but which use the gender field for other purposes
"ja",
"th",
}
--[==[ var:
List of languages where [[Module:headword]] should not attempt to generate a transliteration even if the term is written
in a non-Latin script. FIXME: Notate reasons why each language is in this list.
]==]
data.notranslit = list_to_set{
"ams",
"az",
"bbc",
"bug",
"cdo",
"cia",
"cjm",
"cjy",
"cmn",
"cnp",
"cpi",
"cpx",
"csp",
"czh",
"czo",
"gan",
"hak",
"hnm",
"hsn",
"ja",
"kzg",
"lad",
"ltc",
"luh",
"lzh",
"mnp",
"ms",
"mul",
"mvi",
"nan",
"nan-dat",
"nan-hbl",
"nan-hlh",
"nan-lnx",
"nan-tws",
"nan-zhe",
"nan-zsh",
"och",
"oj",
"okn",
"ryn",
"rys",
"ryu",
"sh",
"sjc",
"tgt",
"th",
"tkn",
"tly",
"txg",
"und",
"vi",
"wuu",
"xug",
"yoi",
"yox",
"yue",
"za",
"zh",
"zhx-sic",
"zhx-tai",
}
--[==[ var:
List of languages that will default to `sccat` being true, i.e. categories like `LANG POS in SCRIPT script` will
automatically be generated. This can be overridden using {{para|sccat|0}} in {{tl|head}} or setting `sccat` to
`false` in Lua.
]==]
data.default_sccat = list_to_set{
"inc-apa",
"inc-ash",
"kfr",
"ks",
"mr",
"mwr",
"inc-oaw",
"inc-ohi",
"omr",
"inc-opa",
"phr",
"pi",
"pra",
"sa",
"skr",
"sd",
}
--[==[ var:
List of script codes for which a script-tagged display title will be added.
]==]
data.toBeTagged = list_to_set{
"Ahom",
"Arab",
"fa-Arab",
"glk-Arab",
"kk-Arab",
"ks-Arab",
"ku-Arab",
"mzn-Arab",
"ms-Arab",
"ota-Arab",
"pa-Arab",
"ps-Arab",
"sd-Arab",
"tt-Arab",
"ug-Arab",
"ur-Arab",
"Armi",
"Armn",
"Avst",
"Bali",
"Bamu",
"Batk",
"Beng",
"as-Beng",
"Bopo",
"Brah",
"Brai",
"Bugi",
"Buhd",
"Cakm",
"Cans",
"Cari",
"Cham",
"Cher",
"Copt",
"Cprt",
"Cyrl",
"Cyrs",
"Deva",
"Dsrt",
"Egyd",
"Egyp",
"Ethi",
"Geok",
"Geor",
"Glag",
"Goth",
"Grek",
"Polyt",
"polytonic",
"Gujr",
"Guru",
"Hang",
"Hani",
"Hano",
"Hebr",
"Hira",
"Hluw",
"Ital",
"Java",
"Kali",
"Kana",
"Khar",
"Khmr",
"Knda",
"Kthi",
"Lana",
"Laoo",
"Latn",
"Latf",
"Latg",
"Latnx",
"Latinx",
"pjt-Latn",
"Lepc",
"Limb",
"Linb",
"Lisu",
"Lyci",
"Lydi",
"Mand",
"Mani",
"Marc",
"Merc",
"Mero",
"Mlym",
"Mong",
"mnc-Mong",
"sjo-Mong",
"xwo-Mong",
"Mtei",
"Mymr",
"Narb",
"Nkoo",
"Nshu",
"Ogam",
"Olck",
"Orkh",
"Orya",
"Osma",
"Ougr",
"Palm",
"Phag",
"Phli",
"Phlv",
"Phnx",
"Plrd",
"Prti",
"Rjng",
"Runr",
"Samr",
"Sarb",
"Saur",
"Sgnw",
"Shaw",
"Shrd",
"Sinh",
"Sora",
"Sund",
"Sylo",
"Syrc",
"Tagb",
"Tale",
"Talu",
"Taml",
"Tang",
"Tavt",
"Telu",
"Tfng",
"Tglg",
"Thaa",
"Thai",
"Tibt",
"Ugar",
"Vaii",
"Xpeo",
"Xsux",
"Yiii",
"Zmth",
"Zsym",
"Ipach",
"Music",
"Rumin",
}
--[==[ var:
Parts of speech which will not be categorised in categories like `English terms spelled with É` if the term is the
character in question (e.g. the letter entry for English [[é]]). This contrasts with entries like the French adjective
[[m̂]], which is a one-letter word spelled with the letter.
]==]
data.pos_not_spelled_with_self = list_to_set{
"diacritical marks",
"Han characters",
"Han tu",
"hanja",
"hanzi",
"iteration marks",
"kana",
"kanji",
"letters",
"ligatures",
"logograms",
"morae",
"numeral symbols",
"numerals",
"punctuation marks",
"syllables",
"symbols",
}
------ 2. Lists not converted into sets. ------
--[==[ var:
Recognized aliases for parts of speech (param 2=). Key is the short form and value is the canonical singular (not
pluralized) form. It is singular so the same table can be used in [[Module:form of]] for the {{para|p}}/{{para|POS}}
param and [[Module:links]] for the pos= param. Note that any part of speech, abbreviated or not, can be suffixed with
`f` to generate the corresponding non-lemma form part of speech, such as `adjf`, `af` or `adjectivef` for
`adjective form`, and `nounf` or `nf` for `noun form`. This expansion happens even when it does not make sense for the
given part of speech (e.g. `pclf` expands to `particle form` and `symf` expands to `symbol form`), and currently also,
at least in [[Module:headword]] (but not [[Module:links]]), even if the part before the `f` is not a recognized part of
speech or abbreviation (hence `nerf` expands to `ner form`).
]==]
data.pos_aliases = {
a = "adjective",
adj = "adjective",
adv = "adverb",
art = "article",
aug = "augmentative",
cls = "classifier",
compadj = "comparative adjective",
compadv = "comparative adverb",
compdet = "comparative determiner",
comppron = "comparative pronoun",
conj = "conjunction",
contr = "contraction",
conv = "converb",
det = "determiner",
dim = "diminutive",
int = "interjection",
interj = "interjection",
intj = "interjection",
n = "noun",
-- the next two support Algonquian languages; see also vii/vai/vti/vta below
na = "animate noun",
ni = "inanimate noun",
num = "numeral",
part = "participle",
pastpart = "past participle",
pastptcp = "past participle",
pcl = "particle",
phr = "phrase",
pn = "proper noun",
postp = "postposition",
pref = "prefix",
prep = "preposition",
prepphr = "prepositional phrase",
prespart = "present participle",
presptcp = "present participle",
pron = "pronoun",
prop = "proper noun",
proper = "proper noun",
propn = "proper noun",
ptcp = "participle",
rom = "romanization",
roman = "romanization",
romanisation = "romanization",
romanisations = "romanization",
suf = "suffix",
supadj = "superlative adjective",
supadv = "superlative adverb",
supdet = "superlative determiner",
suppron = "superlative pronoun",
sym = "symbol",
v = "verb",
vb = "verb",
vi = "intransitive verb",
vm = "modal verb",
vt = "transitive verb",
-- the next four support Algonquian languages
vii = "inanimate intransitive verb",
vai = "animate intransitive verb",
vti = "transitive inanimate verb",
vta = "transitive animate verb",
}
--[==[ var:
Map of parts of speech for which categories like `German masculine nouns` or `Russian imperfective verbs` will be
generated if the headword is of the appropriate gender/number. The map is used to canonicalize parts of speech for
categorization purposes; specifically, proper nouns categorizes like nouns.
]==]
data.pos_for_gender_number_cat = {
["nouns"] = "nouns",
["proper nouns"] = "nouns",
["suffixes"] = "suffixes",
-- We include verbs because impf and pf are valid "genders".
["verbs"] = "verbs",
}
--[==[ var:
Lower limit for a "long" word in a particular language. Used to categorize terms into e.g.
[[:Category:Long English words]] automatically. Languages with no mapping here do not get categorized.
]==]
data.long_word_thresholds = {
["af"] = 20,
["bg"] = 20,
["cy"] = 25,
["de"] = 20,
["en"] = 25,
["es"] = 20,
["fr"] = 20,
["ka"] = 20,
["sv"] = 20,
["tl"] = 25,
}
------ 3. Page-wide processing (so that it only needs to be done once per page). ------
data.page = require(headword_page_module).process_page()
-- Set some page properties directly on `data` for ease of use.
data.pagename = data.page.pagename
data.encoded_pagename = data.page.encoded_pagename
return data
8uggw3dcoxmfpukuecovupcgqqzxkke
Cleachdaiche:Altronic
2
16654
86247
86139
2026-07-21T22:24:02Z
Altronic
4137
86247
wikitext
text/x-wiki
{{Babel|en|ga-2|gd-2|ja-2|gv-1|br-0|cy-0|kw-0}}
Tha mi a' sgrìobhadh mòideal lua agus innteartan às na cànanan Ceilteach an-dràsta.
'S e [https://gd.wiktionary.org/w/index.php?title=S%C3%B2nraichte:ListUsers&group=sysop rianadair] air an uicidh seo a th' annam.
ea0yp71z2yuonv32hw7kjmlsty444xh
Teamplaid:inflection-table-bottom
10
16697
86403
86185
2026-07-23T10:59:08Z
Altronic
4137
86403
wikitext
text/x-wiki
|}
{{#if:{{{notes|}}}|<div class="inflection-table-notes">
{{{notes|}}}
</div>}}
<noinclude>{{documentation}}</noinclude>
auencaomg4yp5qq0digavtud1hc41kn
86404
86403
2026-07-23T10:59:30Z
Altronic
4137
dumb
86404
wikitext
text/x-wiki
|}
{{#if:{{{notes|}}}|<div class="inflection-table-notes">
{{{notes|}}}
</div>}}
</div><noinclude>{{documentation}}</noinclude>
e198nzkfu9wlfy3e5rljk9mjegp60zq
Mòideal:languages/data
828
16714
86204
2026-07-21T20:13:33Z
Altronic
4137
Copy from English Wiktionary
86204
Scribunto
text/plain
local export = {}
-- We can't use mw.loadData() on [[Module:languages/chars]] because [[Module:languages/data]] itself is sometimes loaded
-- using mw.loadData(), and calling mw.loadData() on [[Module:languages/chars]] will insert metatables into the
-- character tables, which the second mw.loadData() will choke on.
local m_chars = require("Module:languages/chars")
local u = require("Module:string/char")
local c = m_chars.chars
export.chars = c
local p = m_chars.puaChars
export.puaChars = p
local cs = m_chars.chars_substitutions
export.chars_substitutions = cs
-- FIXME! Many of the script-specific values below can be moved to [[Module:scripts/data]] to serve as script-wide
-- fallback values instead of specifying them for each language using the script.
local s = {}
-- These values are placed here to make it possible to synchronise a group of languages without the need for a dedicated function module.
-- cau
do
local cau_remove_diacritics = c.grave .. c.acute .. c.macron
local cau_from = {"[IlΙІӀᴴ]"}
local cau_to = {{
["l"] = "ӏ",
["Ι"] = "ӏ",
["І"] = "ӏ",
["Ӏ"] = "ӏ",
["ᴴ"] = "ᵸ",
}}
s["cau-Cyrl-displaytext"] = {
from = cau_from,
to = cau_to,
}
s["cau-Cyrl-stripdiacritics"] = {
remove_diacritics = cau_remove_diacritics,
from = cau_from,
to = cau_to,
}
s["cau-Latn-stripdiacritics"] = {remove_diacritics = cau_remove_diacritics}
end
s["itc-Latn-displaytext"] = {
from = {c.caron},
to = {c.breve},
}
s["itc-Latn-stripdiacritics"] = {remove_diacritics = c.macron .. c.breve .. c.diaer .. c.caron .. c.dinvbreve}
s["itc-Latn-sortkey"] = {
remove_diacritics = c.circ .. c.tilde .. c.macron .. c.breve .. c.diaer .. c.caron .. c.zigzag .. c.dmacron .. c.dtilde .. c.dinvbreve .. c.small_a .. c.small_e .. c.small_i .. c.small_o .. c.small_u, -- Chiefly medieval abbreviations.
from = {"ᵃ", "æ", "[đꝱꟈ]", "ᵉ", "ⁱ", "ꝁ", "[ƚꝉꝲ]", "ꝳ", "ꝴ", "[ꝋᵒ]", "œ", "[ꝑꝓꝕ]", "[ꝗꝙ]", "[ꝛꝵꝶꝝ]", "[ꟊˢ]", "[ꝷᵗ]", "ᵘ", "ꝟ", "⁊"},
to = {"a", "ae", "d", "e", "i", "k", "l", "m", "n", "o", "oe", "p", "q", "r", "s", "t", "u", "v", "&"}
}
s["Jpan-standardchars"] = -- exclude ぢづヂヅ
"ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちっつてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろん" ..
"ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチッツテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロン"
local jpx_displaytext = {
from = {"~", "="},
to = {"〜", "゠"}
}
s["jpx-displaytext"] = {
Jpan = jpx_displaytext,
Hani = jpx_displaytext,
Hrkt = jpx_displaytext,
Hira = jpx_displaytext,
Kana = jpx_displaytext
-- not Latn or Brai
}
s["jpx-stripdiacritics"] = s["jpx-displaytext"]
s["jpx-sortkey"] = {
Jpan = "Jpan-sortkey",
Hani = "Hani-sortkey",
Hrkt = "Hira-sortkey", -- sort general kana by normalizing to Hira
Hira = "Hira-sortkey",
Kana = "Kana-sortkey",
Latn = {remove_diacritics = c.tilde .. c.macron .. c.diaer}
}
s["jpx-translit"] = {
Hrkt = "Hrkt-translit",
Hira = "Hrkt-translit",
Kana = "Hrkt-translit"
}
s["roa-oil-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'",
from = {"æ", "œ", "·"},
to = {"ae", "oe", " "}
}
s["wen-sortkey"] = {
from = {"ch", "[lłßꞩẜ]", "dz[" .. c.caron .. c.acute .. "]", "[bcefmnoprswz][" .. c.caron .. c.acute .. c.dotabove .. "]"},
to = {
"h" .. p[1],
{
["l"] = "l" .. p[1], ["ł"] = "l", ["ß"] = "s", ["ꞩ"] = "š", ["ẜ"] = "š",
},
{
["dz" .. c.caron] = "d" .. p[1], ["dz" .. c.acute] = "d" .. p[2]
},
{
["b" .. c.acute] = "b" .. p[1],
["c" .. c.caron] = "c" .. p[1], ["c" .. c.acute] = "c" .. p[2],
["e" .. c.caron] = "e" .. p[1], ["e" .. c.dotabove] = "e" .. p[1],
["f" .. c.acute] = "f" .. p[1],
["m" .. c.acute] = "m" .. p[1],
["n" .. c.acute] = "n" .. p[1],
["o" .. c.acute] = "o" .. p[1],
["p" .. c.acute] = "p" .. p[1],
["r" .. c.caron] = "r" .. p[1], ["r" .. c.acute] = "r" .. p[2],
["s" .. c.caron] = "s" .. p[1], ["s" .. c.acute] = "s" .. p[2],
["w" .. c.acute] = "w" .. p[1],
["z" .. c.caron] = "z" .. p[1], ["z" .. c.acute] = "z" .. p[2],
}
}
}
-- Myanmar dotted form : https://www.unicode.org/Public/UNIDATA/StandardizedVariants.txt
s["aio-displaytext"] = {
from = {"([ကဂငတထပမယလဝဢေၵၸၺႀꩠꩡꩢꩣꩤꩥꩦꩫꩬꩯꩺ])"},
to = {"%1" .. c.VS01}
}
s["aio-stripdiacritics"] = {
remove_diacritics = c.VS01,
}
s["phk-displaytext"] = s["aio-displaytext"]
s["phk-stripdiacritics"] = s["aio-stripdiacritics"]
s["kht-displaytext"] = s["aio-displaytext"]
s["kht-stripdiacritics"] = s["aio-stripdiacritics"]
export.shared = s
--[==[ var:
Short-term solution to override the standard substitution process, by forcing the module to substitute the entire
text in one pass, if "cont" is given. This results in any PUA characters that are used as stand-ins for formatting being
handled by the language-specific substitution process, which is usually undesirable. If the value is "none" then the
formatting tags do not get turned into PUA characters in the first place. This override is provided for languages which
use formatting between strings of text which might need to interact with each other (e.g. Korean 값이 transliterates as "gaps-i", but [[값]] has the formatting '''값'''[[-이]]. The normal process would split the text at the second '''.)
]==]
export.substitution = {
["gmy"] = "none",
["ja"] = "cont",
["jje"] = "cont",
["ko"] = "cont",
["ko-ear"] = "cont",
["ru"] = "cont",
["th-new"] = "cont",
["sa"] = "cont",
["zkt"] = "cont",
}
--[==[ var:
Code aliases. The left side is the alias and the right side is the canonical code. NOTE: These are gradually
being deprecated, so should not be added to on a permanent basis. Temporary additions are permitted under reasonable
circumstances (e.g. to facilitate changing a language's code). When an alias is no longer used, it should be removed.
Aliases in this table are tracked at [[Wiktionary:Tracking/languages/LANG]]; see e.g.
[[Special:WhatLinksHere/Wiktionary:Tracking/languages/VL.]] for the `VL.` alias.
]==]
export.aliases = {
["EL."] = "la-ecc",
["LL."] = "la-lat",
["ML."] = "la-med",
["NL."] = "la-new",
["VL."] = "la-vul",
["grc-epc"] = "grc-epi",
["nds-DE"] = "nds-de",
["nds-NL"] = "nds-nl",
["roa-oan"] = "roa-ona",
["sa-cls"] = "cls",
["sa-ved"] = "vsn",
}
--[==[ var:
Codes which are tracked. Note that all aliases listed above are also tracked, so should not be duplicated here.
Tracking uses the same mechanism described above in the comment above `export.aliases`.
]==]
export.track = {
-- Codes duplicated between full and etymology-only languages.
["lzh-lit"] = true,
["lzh"] = true,
-- Languages actively being converted to families.
["bh"] = true, -- inc-bih
["nan"] = true, -- zhx-nan
}
return export
g9xhkek17kopa09j9a40m2u5grkahhk
Mòideal:languages/chars
828
16715
86205
2026-07-21T21:17:08Z
Altronic
4137
Copy from English Wiktionary
86205
Scribunto
text/plain
local export = {}
local table = table
local insert = table.insert
local u = require("Module:string/char")
-- UTF-8 encoded strings for some commonly-used diacritics.
local c = {
prime = u(0x02B9),
grave = u(0x0300),
acute = u(0x0301),
circ = u(0x0302), -- circumflex
tilde = u(0x0303),
macron = u(0x0304),
overline = u(0x0305),
breve = u(0x0306),
dotabove = u(0x0307),
diaer = u(0x0308), -- diaeresis
ringabove = u(0x030A),
dacute = u(0x030B), -- double acute
caron = u(0x030C),
lineabove = u(0x030D),
dgrave = u(0x030F), -- double grave
invbreve = u(0x0311), -- inverted breve
turnedcommaabove = u(0x0312),
commaabove = u(0x0313),
revcommaabove = u(0x0314), -- reversed comma above
dotbelow = u(0x0323),
diaerbelow = u(0x0324), -- diaeresis below
ringbelow = u(0x0325),
cedilla = u(0x0327),
ogonek = u(0x0328),
caronbelow = u(0x032C),
brevebelow = u(0x032E),
macronbelow = u(0x0331),
perispomeni = u(0x0342),
ypogegrammeni = u(0x0345),
CGJ = u(0x034F), -- combining grapheme joiner
zigzag = u(0x035B),
dbrevebelow = u(0x035C), -- double breve below
dmacron = u(0x035E), -- double macron
dtilde = u(0x0360), -- double tilde
dinvbreve = u(0x0361), -- double inverted breve
small_a = u(0x0363),
small_e = u(0x0364),
small_i = u(0x0365),
small_o = u(0x0366),
small_u = u(0x0367),
keraia = u(0x0374),
lowerkeraia = u(0x0375),
tonos = u(0x0384),
palatalization = u(0x0484),
dasiapneumata = u(0x0485),
psilipneumata = u(0x0486),
kashida = u(0x0640),
fathatan = u(0x064B),
dammatan = u(0x064C),
kasratan = u(0x064D),
fatha = u(0x064E),
damma = u(0x064F),
kasra = u(0x0650),
shadda = u(0x0651),
sukun = u(0x0652),
hamzaabove = u(0x0654),
nunghunna = u(0x0658),
zwarakay = u(0x0659),
smallv = u(0x065A),
superalef = u(0x0670),
udatta = u(0x0951),
anudatta = u(0x0952),
tacute = u(0x1ACB), -- triple acute
dsvarita = u(0x1CDA), -- double svarita
tsvarita = u(0x1CDB), -- triple svarita
dottedgrave = u(0x1DC0),
dottedacute = u(0x1DC1),
coronis = u(0x1FBD),
psili = u(0x1FBF),
dasia = u(0x1FEF),
ZWNJ = u(0x200C), -- zero width non-joiner
ZWJ = u(0x200D), -- zero width joiner
RSQuo = u(0x2019), -- right single quote
kavyka = u(0xA67C),
VS01 = u(0xFE00), -- variation selector 1
-- Punctuation for the standard_chars field.
-- Note: characters are literal (i.e. no magic characters).
punc = " ',-‐‑‒–—…∅◌",
-- Range covering all diacritics.
diacritics = u(0x300) .. "-" .. u(0x34E) ..
u(0x350) .. "-" .. u(0x36F) ..
u(0x1AB0) .. "-" .. u(0x1ACE) ..
u(0x1DC0) .. "-" .. u(0x1DFF) ..
u(0x20D0) .. "-" .. u(0x20F0) ..
u(0xFE20) .. "-" .. u(0xFE2F),
}
-- Braille characters for the standard_chars field.
local braille = {}
for i = 0x2800, 0x28FF do
insert(braille, u(i))
end
c.braille = table.concat(braille)
export.chars = c
-- Pre-generate PUA characters, generally used in sortkeys.
-- Note: if changing the amount, use powers of 2 to maximise memory efficiency (due to the way memory is allocated for tables).
local p = {}
for i = 1, 32 do
p[i] = u(0xF000+i-1)
end
export.puaChars = p
local cs = {}
-- Used in the default strip_diacritics and sort_key for Cyrs, but also used directly by Old Ruthenian (zle-ort).
cs["Cyrs_remove_diacritics"] = c.grave .. c.acute .. c.dotabove .. c.diaer .. c.invbreve .. c.palatalization .. c.dasiapneumata .. c.psilipneumata .. c.dottedgrave .. c.dottedacute .. c.kavyka
export.chars_substitutions = cs
return export
fsf6ixs8oigvoxxmoilnwf9c50lo7o0
Mòideal:languages/data/2
828
16716
86206
2026-07-21T21:50:33Z
Altronic
4137
Copy from English Wiktionary
86206
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
-- Ideally, we want to move these into [[Module:languages/data]], but because (a) it's necessary to use require on that module, and (b) they're only used in this data module, it's less memory-efficient to do that at the moment. If it becomes possible to use mw.loadData, then these should be moved there.
s["de-Latn-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove,
from = {"æ", "œ", "ß"},
to = {"ae", "oe", "ss"}
}
s["de-Latn-standardchars"] = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz"
s["ka-stripdiacritics"] = {remove_diacritics = c.circ}
s["no-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
s["no-standardchars"] = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc
s["sa-Deva-stripdiacritics"] = { -- Don't use remove_diacritics for accent marks, as १ and ३ should also be removed if (and only if) they carry any.
from = {"ॐ", "[१३]?[" .. c.anudatta .. c.udatta .. c.dsvarita .. c.tsvarita .. "]+"},
to = {"ओँ"},
}
s["tg-stripdiacritics"] = {remove_diacritics = c.grave .. c.acute}
s["tk-stripdiacritics"] = {remove_diacritics = c.macron}
local m = {}
m["aa"] = {
"Afar",
27811,
"cus-eas",
"Latn, Ethi",
strip_diacritics = {
Latn = {remove_diacritics = c.acute},
},
}
m["ab"] = {
"Abkhaz",
5111,
"cau-abz",
"Cyrl, Geor, Latn",
translit = {
Cyrl = "ab-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
from = {"^а%-"},
to = {"а"},
},
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"х'ә", -- 3 chars
"гь", "гә", "ӷь", "ҕь", "ӷә", "ҕә", "дә", "ё", "жь", "жә", "ҙә", "ӡә", "ӡ'", "кь", "кә", "қь", "қә", "ҟь", "ҟә", "ҫә", "тә", "ҭә", "ф'", "хь", "хә", "х'", "ҳә", "ць", "цә", "ц'", "ҵә", "ҵ'", "шь", "шә", "џь", -- 2 chars
"ӷ", "ҕ", "ҙ", "ӡ", "қ", "ҟ", "ԥ", "ҧ", "ҫ", "ҭ", "ҳ", "ҵ", "ҷ", "ҽ", "ҿ", "ҩ", "џ", "ә", -- 1 char
"^а",
},
to = {
"х" .. p[4],
"г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "г" .. p[7], "г" .. p[8], "д" .. p[1], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "з" .. p[2], "з" .. p[4], "з" .. p[5], "к" .. p[1], "к" .. p[2], "к" .. p[4], "к" .. p[5], "к" .. p[7], "к" .. p[8], "с" .. p[2], "т" .. p[1], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[6], "ц" .. p[1], "ц" .. p[2], "ц" .. p[3], "ц" .. p[5], "ц" .. p[6], "ш" .. p[1], "ш" .. p[2], "ы" .. p[3],
"г" .. p[3], "г" .. p[4], "з" .. p[1], "з" .. p[3], "к" .. p[3], "к" .. p[6], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[2], "х" .. p[5], "ц" .. p[4], "ч" .. p[1], "ч" .. p[2], "ч" .. p[3], "ы" .. p[1], "ы" .. p[2], "ь" .. p[1],
"",
}
},
},
}
m["ae"] = {
"Avestan",
29572,
"ira-cen",
"Avst, Gujr, Deva",
translit = {
Avst = "Avst-translit"
},
}
m["af"] = {
"Afrikaans",
14196,
"gmw-frk",
"Latn, Arab",
ancestors = "nl",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'",
from = {"['ʼ]n"},
to = {"n" .. p[1]}
}
},
}
m["ak"] = {
"Akan",
28026,
"alv-ctn",
"Latn",
}
m["am"] = {
"Amharic",
28244,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["an"] = {
"Aragonese",
8765,
"roa-nar",
"Latn",
}
m["ar"] = {
"Arabic",
13955,
"sem-arb",
"Arab, Hebr, Syrc, Brai, Nbat",
translit = {
Arab = "ar-translit"
},
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["as"] = {
"Assamese",
29401,
"inc-bas",
"as-Beng",
ancestors = "inc-mas",
translit = "as-translit",
}
m["av"] = {
"Avar",
29561,
"cau-ava",
"Cyrl, Latn, Arab",
ancestors = "oav",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"],
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"гъ", "гь", "гӏ", "ё", "кк", "къ", "кь", "кӏ", "лъ", "лӏ", "тӏ", "хх", "хъ", "хь", "хӏ", "цӏ", "чӏ"},
to = {"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "к" .. p[4], "л" .. p[1], "л" .. p[2], "т" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[4], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["ay"] = {
"Aymara",
4627,
"sai-aym",
"Latn",
}
m["az"] = {
"Azerbaijani",
9292,
"trk-ogz",
"Latn, Cyrl, fa-Arab",
ancestors = "trk-oat",
dotted_dotless_i = true,
strip_diacritics = {
Latn = {
from = {"ʼ"},
to = {"'"},
},
["fa-Arab"] = {
module = "ar-stripdiacritics",
["from"] = {
"ۆ",
"ۇ",
"وْ",
"ڲ",
"ؽ",
},
["to"] = {
"و",
"و",
"و",
"گ",
"ی",
},
},
},
display_text = {
Latn = {
from = {"'"},
to = {"ʼ"}
}
},
sort_key = {
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ç", "ə", "ğ", "x", "ı", "q", "ö", "ş", "ü", "w"
},
to = {
"i" .. p[1],
"c" .. p[1], "e" .. p[1], "g" .. p[1], "h" .. p[1], "i", "k" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]
}
},
Cyrl = {
from = {"ғ", "ә", "ы", "ј", "ҝ", "ө", "ү", "һ", "ҹ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["ba"] = {
"Bashkir",
13389,
"trk-kbu",
"Cyrl",
translit = "ba-translit",
override_translit = true,
sort_key = {
from = {"ғ", "ҙ", "ё", "ҡ", "ң", "ө", "ҫ", "ү", "һ", "ә"},
to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "с" .. p[1], "у" .. p[1], "х" .. p[1], "э" .. p[1]}
},
}
m["be"] = {
"Belarusian",
9091,
"zle",
"Cyrl, Latn",
ancestors = "zle-mbe",
translit = {
Cyrl = "be-translit",
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"ґ", "ё", "і", "ў"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "у" .. p[1]}
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
from = {"ć", "č", "dz", "dź", "dž", "ch", "ł", "ń", "ś", "š", "ŭ", "ź", "ž"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "d" .. p[3], "h" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя",
Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž",
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["bg"] = {
"Bulgarian",
7918,
"zls",
"Cyrl",
ancestors = "cu-bgm",
translit = "bg-translit",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
standard_chars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc,
}
m["bh"] = {
"Bihari",
135305,
"inc-eas",
"Deva",
}
m["bi"] = {
"Bislama",
35452,
"crp",
"Latn",
ancestors = "en",
}
m["bm"] = {
"Bambara",
33243,
"dmn-emn",
"Latn, Nkoo",
sort_key = {
Latn = {
from = {"ɛ", "ɲ", "ŋ", "ɔ"},
to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]}
},
},
}
m["bn"] = {
"Bengali",
9610,
"inc-bas",
"Beng, Newa",
ancestors = "inc-mbn",
translit = {
Beng = "bn-translit"
},
}
m["bo"] = {
"Tibetan",
34271,
"sit-tib",
"Tibt", -- sometimes Deva?
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["br"] = {
"Breton",
12107,
"cel-brs",
"Latn",
ancestors = "xbm",
sort_key = {
from = {"ch", "c['ʼ’]h"},
to = {"c" .. p[1], "c" .. p[2]}
},
}
m["ca"] = {
"Catalan",
7026,
"roa-ocr",
"Latn",
ancestors = "roa-oca",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla .. "·"},
standard_chars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc,
}
m["ce"] = {
"Chechen",
33350,
"cau-vay",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "оь", "пӏ", "тӏ", "уь", "хь", "хӏ", "цӏ", "чӏ", "юь", "яь"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "ю" .. p[1], "я" .. p[1]}
},
},
}
m["ch"] = {
"Chamorro",
33262,
"poz",
"Latn",
sort_key = {
remove_diacritics = "'",
from = {"å", "ch", "ñ", "ng"},
to = {"a" .. p[1], "c" .. p[1], "n" .. p[1], "n" .. p[2]}
},
}
m["co"] = {
"Corsican",
33111,
"roa-itr",
"Latn",
sort_key = {
from = {"chj", "ghj", "sc", "sg"},
to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]}
},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc,
}
m["cr"] = {
"Cree",
33390,
"alg",
"Latn, Cans",
translit = {
Cans = "cr-translit"
},
}
m["cs"] = {
"Czech",
9056,
"zlw",
"Latn",
ancestors = "cs-ear",
sort_key = {
from = {"á", "č", "ď", "é", "ě", "ch", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "h" .. p[1], "i" .. p[1], "n" .. p[1], "o" .. p[1], "r" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "y" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc,
}
m["cu"] = {
"Old Church Slavonic",
35499,
"zls",
"Cyrs, Glag, Zname",
translit = {
Cyrs = "Cyrs-translit",
Glag = "Glag-translit"
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cv"] = {
"Chuvash",
33348,
"trk-ogr",
"Cyrl",
ancestors = "cv-mid",
translit = "cv-translit",
override_translit = true,
sort_key = {
from = {"ӑ", "ё", "ӗ", "ҫ", "ӳ"},
to = {"а" .. p[1], "е" .. p[1], "е" .. p[2], "с" .. p[1], "у" .. p[1]}
},
}
m["cy"] = {
"Welsh",
9309,
"cel-brw",
"Latn",
ancestors = "wlm",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. "'",
from = {"ch", "dd", "ff", "ng", "ll", "ph", "rh", "th"},
to = {"c" .. p[1], "d" .. p[1], "f" .. p[1], "g" .. p[1], "l" .. p[1], "p" .. p[1], "r" .. p[1], "t" .. p[1]}
},
standard_chars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc,
}
m["da"] = {
"Danish",
9035,
"gmq-eas",
"Latn",
ancestors = "gmq-oda",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc,
}
m["de"] = {
"German",
188,
"gmw-hgm",
"Latn, Latf, Brai",
ancestors = "de-ear",
sort_key = {
Latn = s["de-Latn-sortkey"],
Latf = s["de-Latn-sortkey"],
},
standard_chars = {
Latn = s["de-Latn-standardchars"],
Latf = s["de-Latn-standardchars"],
Brai = c.braille,
c.punc
}
}
m["dv"] = {
"Dhivehi",
32656,
"inc-ins",
"Thaa, Diak",
translit = {
Thaa = "dv-translit",
Diak = "Diak-translit",
},
ancestors = "dv-old",
override_translit = true,
}
m["dz"] = {
"Dzongkha",
33081,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ee"] = {
"Ewe",
30005,
"alv-gbe",
"Latn",
sort_key = {
remove_diacritics = c.tilde,
from = {"ɖ", "dz", "ɛ", "ƒ", "gb", "ɣ", "kp", "ny", "ŋ", "ɔ", "ts", "ʋ"},
to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "f" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1], "v" .. p[1]}
},
}
m["el"] = {
"Greek",
9129,
"grk",
"Grek, Polyt, Brai",
ancestors = "el-kth",
translit = "el-translit",
override_translit = true,
-- Grek and Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ",
Brai = c.braille,
c.punc
},
}
m["en"] = {
"English",
1860,
"gmw-ang",
"Latn, Brai, Shaw, Dsrt", -- entries in Shaw or Dsrt might require prior discussion
wikimedia_codes = "en, simple",
ancestors = "en-ear",
sort_key = {
Latn = {
-- Many of these are needed for sorting language names.
remove_diacritics = "'\"%-%.,%s·ʻʼ" .. c.diacritics,
-- These are found in pagenames.
from = {"[ɒæ🅱¢©ᴄðđəǝɜɡħʜıɨłŋɲøɔœꝑꝓꝕßʋ]"},
to = {{
["ɒ"] = "a", ["æ"] = "ae", ["🅱"] = "b", ["¢"] = "c", ["©"] = "c",
["ᴄ"] = "c", ["ð"] = "d", ["đ"] = "d", ["ə"] = "e", ["ǝ"] = "e",
["ɜ"] = "e", ["ɡ"] = "g", ["ħ"] = "h", ["ʜ"] = "h", ["ı"] = "i",
["ɨ"] = "i", ["ł"] = "l", ["ŋ"] = "n", ["ɲ"] = "n", ["ø"] = "o",
["ɔ"] = "o", ["œ"] = "oe", ["ꝑ"] = "p", ["ꝓ"] = "p", ["ꝕ"] = "p",
["ß"] = "ss", ["ʋ"] = "v",
}},
},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
Brai = c.braille,
c.punc
},
}
m["eo"] = {
"Esperanto",
143,
"art",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {"ĉ", "ĝ", "ĥ", "ĵ", "ŝ", "ŭ"},
to = {"c" .. p[1], "g" .. p[1], "h" .. p[1], "j" .. p[1], "s" .. p[1], "u" .. p[1]}
},
standard_chars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc,
}
m["es"] = {
"Spanish",
1321,
"roa-cas",
"Latn, Brai",
ancestors = "es-ear",
sort_key = {
Latn = {
remove_exceptions = {"ñ"},
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "ñ", "º", "œ"},
to = {"a", "ae", "n" .. p[1], "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["et"] = {
"Estonian",
9072,
"urj-fin",
"Latn",
sort_key = {
from = {
"š", "ž", "õ", "ä", "ö", "ü", -- 2 chars
"z" -- 1 char
},
to = {
"s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4],
"s" .. p[2]
}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc,
}
m["eu"] = {
"Basque",
8752,
"euq",
"Latn",
sort_key = {
from = {"ç", "ñ"},
to = {"c" .. p[1], "n" .. p[1]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc,
}
m["fa"] = {
"Persian",
9168,
"ira-swi",
"fa-Arab, Hebr",
ancestors = "fa-cls",
strip_diacritics = {
["fa-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ٱ"}, -- character "ۂ" code U+06C2 to "ه"; hamzatu l-waṣli to a regular alif
to = {"ه", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ff"] = {
"Fula",
33454,
"alv-fwo",
"Latn, Adlm",
}
m["fi"] = {
"Finnish",
1412,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = { -- used to indicate gemination of the next consonant
remove_diacritics = "ˣ",
from = {"’"},
to = {"'"},
},
sort_key = { -- [[Appendix:Finnish alphabet#Collation]] + "aͤ" and "oͤ" as historical variants of "ä" and "ö".
remove_diacritics = "'’:" .. c.diacritics,
remove_exceptions = {
"a[" .. c.ringabove .. c.diaer .. c.small_e .. "]", -- åäaͤ
"o[" .. c.diaer .. c.tilde .. c.dacute .. c.small_e .. "]", -- öõőoͤ
"u[" .. c.diaer .. c.dacute .. "]" -- üű
},
from = {"æ", "[ðđ]", "ł", "ŋ", "œ", "ß", "þ", "u[" .. c.diaer .. c.dacute .. "]", "å", "aͤ", "o[" .. c.tilde .. c.dacute .. c.small_e .. "]", "ø", "(.)['%-]"},
to = {"ae", "d", "l", "n", "oe", "ss", "th", "y", "z" .. p[1], "ä", "ö", "ö", "%1"}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc,
}
m["fj"] = {
"Fijian",
33295,
"poz-pcc",
"Latn",
}
m["fo"] = {
"Faroese",
25258,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "í", "ó", "ú", "ý", "æ", "ø"},
to = {"a" .. p[1], "d" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc,
}
m["fr"] = {
"French",
150,
"roa-oil",
"Latn, Brai",
ancestors = "frm",
sort_key = {
Latn = s["roa-oil-sortkey"]
},
standard_chars = {
Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["fy"] = {
"West Frisian",
27175,
"gmw-fri",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer,
from = {"y"},
to = {"i"}
},
standard_chars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc,
}
m["ga"] = {
"Irish",
9142,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {
remove_diacritics = c.acute,
from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"},
to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc,
}
m["gd"] = {
"Scottish Gaelic",
9314,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {remove_diacritics = c.grave .. c.acute},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc,
}
m["gl"] = {
"Galician",
9307,
"roa-gap",
"Latn",
sort_key = {
remove_diacritics = c.acute,
from = {"ñ"},
to = {"n" .. p[1]}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc,
}
m["gu"] = {
"Gujarati",
5137,
"inc-wes",
"Arab, Gujr",
ancestors = "inc-mgu",
translit = {
Gujr = "gu-translit",
},
strip_diacritics = {
Arab = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun},
Gujr = {remove_diacritics = "઼"},
},
}
m["gv"] = {
"Manx",
12175,
"cel-gae",
"Latn",
ancestors = "mga",
sort_key = {remove_diacritics = c.cedilla .. "-"},
standard_chars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc,
}
m["ha"] = {
"Hausa",
56475,
"cdc-wst",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron}
},
sort_key = {
Latn = {
from = {"ɓ", "b'", "ɗ", "d'", "ƙ", "k'", "sh", "ƴ", "'y"},
to = {"b" .. p[1], "b" .. p[2], "d" .. p[1], "d" .. p[2], "k" .. p[1], "k" .. p[2], "s" .. p[1], "y" .. p[1], "y" .. p[2]}
},
},
}
m["he"] = {
"Hebrew",
9288,
"sem-can",
"Hebr, Phnx, Brai, Samr",
ancestors = "he-med",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
-- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["hi"] = {
"Hindi",
1568,
"inc-hnd",
"Deva, Kthi, Newa",
translit = {
Deva = "hi-translit"
},
standard_chars = {
Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰",
c.punc
},
}
m["ho"] = {
"Hiri Motu",
33617,
"crp",
"Latn",
ancestors = "meu",
}
m["ht"] = {
"Haitian Creole",
33491,
"crp",
"Latn",
ancestors = "ht-sdm",
sort_key = {
from = {
"oun", -- 3 chars
"an", "ch", "è", "en", "ng", "ò", "on", "ou", "ui" -- 2 chars
},
to = {
"o" .. p[4],
"a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "u" .. p[1]
}
},
}
m["hu"] = {
"Hungarian",
9067,
"urj-ugr",
"Latn, Hung",
ancestors = "ohu",
sort_key = {
Latn = {
from = {
"dzs", -- 3 chars
"á", "cs", "dz", "é", "gy", "í", "ly", "ny", "ó", "ö", "ő", "sz", "ty", "ú", "ü", "ű", "zs", -- 2 chars
},
to = {
"d" .. p[2],
"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "u" .. p[3], "z" .. p[1],
}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz",
c.punc
},
}
m["hy"] = {
"Armenian",
8785,
"hyx",
"Armn, Brai",
ancestors = "axm",
-- Armn translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Armn = {
remove_diacritics = "՛՜՞՟",
from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵", "ՙ", "՚"},
to = {"և", "յ", "ի", "է", "ֈ", "ʻ", "’"}
},
},
sort_key = {
Armn = {
from = {
"ու", "եւ", -- 2 chars
"և" -- 1 char
},
to = {
"ւ", "եվ",
"եվ"
}
},
},
}
m["hz"] = {
"Herero",
33315,
"bnt-swb",
"Latn",
}
m["ia"] = {
"Interlingua",
35934,
"art",
"Latn",
}
m["id"] = {
"Indonesian",
9240,
"poz-mly",
"Latn",
ancestors = "ms",
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["ie"] = {
"Interlingue",
35850,
"art",
"Latn",
type = "appendix-constructed",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
m["ig"] = {
"Igbo",
33578,
"alv-igb",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron},
sort_key = {
from = {"gb", "gh", "gw", "ị", "kp", "kw", "ṅ", "nw", "ny", "ọ", "sh", "ụ"},
to = {"g" .. p[1], "g" .. p[2], "g" .. p[3], "i" .. p[1], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "o" .. p[1], "s" .. p[1], "u" .. p[1]}
},
}
m["ii"] = {
"Nuosu",
34235,
"tbq-nlo",
"Yiii",
translit = "ii-translit",
}
m["ik"] = {
"Inupiaq",
27183,
"esx-inu",
"Latn",
sort_key = {
from = {
"ch", "ġ", "dj", "ḷ", "ł̣", "ñ", "ng", "r̂", "sr", "zr", -- 2 chars
"ł", "ŋ", "ʼ" -- 1 char
},
to = {
"c" .. p[1], "g" .. p[1], "h" .. p[1], "l" .. p[1], "l" .. p[3], "n" .. p[1], "n" .. p[2], "r" .. p[1], "s" .. p[1], "z" .. p[1],
"l" .. p[2], "n" .. p[2], "z" .. p[2]
}
},
}
m["io"] = {
"Ido",
35224,
"art",
"Latn",
}
m["is"] = {
"Icelandic",
294,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "é", "í", "ó", "ú", "ý", "þ", "æ", "ö"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc,
}
m["it"] = {
"Italian",
652,
"roa-itr",
"Latn",
ancestors = "roa-oit",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove},
standard_chars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc,
}
m["iu"] = {
"Inuktitut",
29921,
"esx-inu",
"Cans, Latn",
translit = {
Cans = "cr-translit"
},
override_translit = true,
}
m["ja"] = {
"Japanese",
5287,
"jpx",
"Jpan, Latn, Brai",
ancestors = "ja-ear",
translit = s["jpx-translit"],
link_tr = true,
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["jv"] = {
"Javanese",
33549,
"poz",
"Latn, Java, Arab",
ancestors = "kaw",
translit = {
Java = "jv-translit"
},
link_tr = true,
strip_diacritics = {
Latn = {remove_diacritics = c.circ} -- Modern jv don't use ê
},
sort_key = {
Latn = {
from = {"å", "dh", "é", "è", "ng", "ny", "th"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "n" .. p[2], "t" .. p[1]}
},
},
}
m["ka"] = {
"Georgian",
8108,
"ccs-gzn",
"Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian
ancestors = "ka-mid",
-- Geor, Geok translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Geor = s["ka-stripdiacritics"],
Geok = s["ka-stripdiacritics"],
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["kg"] = {
"Kongo",
33702,
"bnt-kng",
"Latn",
}
m["ki"] = {
"Kikuyu",
33587,
"bnt-kka",
"Latn",
}
m["kj"] = {
"Kwanyama",
1405077,
"bnt-ova",
"Latn",
}
m["kk"] = {
"Kazakh",
9252,
"trk-kno",
"Cyrl, Latn, kk-Arab",
translit = {
Cyrl = {
from = {
"Ё", "ё", "Й", "й", "Нг", "нг", "Ӯ", "ӯ", -- 2 chars; are "Ӯ" and "ӯ" actually used?
"А", "а", "Ә", "ә", "Б", "б", "В", "в", "Г", "г", "Ғ", "ғ", "Д", "д", "Е", "е", "Ж", "ж", "З", "з", "И", "и", "К", "к", "Қ", "қ", "Л", "л", "М", "м", "Н", "н", "Ң", "ң", "О", "о", "Ө", "ө", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ұ", "ұ", "Ү", "ү", "Ф", "ф", "Х", "х", "Һ", "һ", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "І", "і", "Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я", -- 1 char
},
to = {
"E", "e", "İ", "i", "Ñ", "ñ", "U", "u",
"A", "a", "Ä", "ä", "B", "b", "V", "v", "G", "g", "Ğ", "ğ", "D", "d", "E", "e", "J", "j", "Z", "z", "İ", "i", "K", "k", "Q", "q", "L", "l", "M", "m", "N", "n", "Ñ", "ñ", "O", "o", "Ö", "ö", "P", "p", "R", "r", "S", "s", "T", "t", "U", "u", "Ū", "ū", "Ü", "ü", "F", "f", "X", "x", "H", "h", "S", "s", "Ç", "ç", "Ş", "ş", "Ş", "ş", "", "", "Y", "y", "I", "ı", "", "", "É", "é", "Ü", "ü", "Ä", "ä",
}
}
},
-- override_translit = true,
sort_key = {
Cyrl = {
from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ұ", "ү", "һ", "і"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1], "ы" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя",
c.punc
},
}
m["kl"] = {
"Greenlandic",
25355,
"esx-inu",
"Latn",
sort_key = {
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
}
m["km"] = {
"Khmer",
9205,
"mkh-kmr",
"Khmr",
ancestors = "xhm",
translit = "km-translit", --This might yield unwanted result unless its entry has {{km-IPA}}.
}
m["kn"] = {
"Kannada",
33673,
"dra-kan",
"Knda, Tutg",
ancestors = "dra-mkn",
-- Knda translit in [[Module:scripts/data]]
}
m["ko"] = {
"Korean",
9176,
"qfa-kor",
"Kore, Brai",
ancestors = "ko-ear",
translit = {
Kore = "ko-translit",
},
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["kr"] = {
"Kanuri",
36094,
"ssa-sah",
"Latn, Arab",
-- the sortkey and strip_diacritics are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve}
},
sort_key = {
Latn = {
from = {"ǝ", "ny", "ɍ", "sh"},
to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]}
},
},
}
m["ks"] = {
"Kashmiri",
33552,
"inc-kas",
"ks-Arab, Deva, Shrd, Latn",
translit = {
["ks-Arab"] = "ks-Arab-translit",
Deva = "ks-Deva-translit",
-- Shrd translit in [[Module:scripts/data]]
},
}
-- "kv" is treated as "koi", "kpv", see [[WT:LT]]
m["kw"] = {
"Cornish",
25289,
"cel-brs",
"Latn",
ancestors = "cnx",
sort_key = {
from = {"ch"},
to = {"c" .. p[1]}
},
}
m["ky"] = {
"Kyrgyz",
9255,
"trk-kkp",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "ky-translit"
},
override_translit = true,
sort_key = {
Cyrl = {
from = {"ё", "ң", "ө", "ү"},
to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
}
m["la"] = {
"Latin",
397,
"itc-laf",
"Latn, Ital",
ancestors = "itc-ola",
-- Ital translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission)
display_text = {
Latn = s["itc-Latn-displaytext"]
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"]
},
sort_key = {
Latn = s["itc-Latn-sortkey"]
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXx",
c.punc
},
}
m["lb"] = {
"Luxembourgish",
9051,
"gmw-hgm",
"Latn, Brai",
ancestors = "gmw-cfr",
sort_key = {
Latn = {
from = {"ä", "ë", "é"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
},
}
m["lg"] = {
"Luganda",
33368,
"bnt-nyg",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ŋ"},
to = {"n" .. p[1]}
},
}
m["li"] = {
"Limburgish",
102172,
"gmw-frk",
"Latn",
ancestors = "dum",
}
m["ln"] = {
"Lingala",
36217,
"bnt-bmo",
"Latn",
sort_key = {
remove_diacritics = c.acute .. c.circ .. c.caron,
from = {"ɛ", "gb", "mb", "mp", "nd", "ng", "nk", "ns", "nt", "ny", "nz", "ɔ"},
to = {"e" .. p[1], "g" .. p[1], "m" .. p[1], "m" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "n" .. p[4], "n" .. p[5], "n" .. p[6], "n" .. p[7], "o" .. p[1]}
},
}
m["lo"] = {
"Lao",
9211,
"tai-swe",
"Laoo", -- also Tai Noi/Lao Buhan script
translit = "lo-translit",
sort_key = "Laoo-sortkey",
standard_chars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc,
}
m["lt"] = {
"Lithuanian",
9083,
"bat-eas",
"Latn",
ancestors = "olt",
display_text = "lt-common",
strip_diacritics = "lt-common",
sort_key = "lt-common",
standard_chars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc,
}
m["lu"] = {
"Luba-Katanga",
36157,
"bnt-lub",
"Latn",
}
m["lv"] = {
"Latvian",
9078,
"bat-eas",
"Latn",
strip_diacritics = {
-- This attempts to convert vowels with tone marks to vowels either with or without macrons. Specifically, there should be no macrons if the vowel is part of a diphthong (including resonant diphthongs such pìrksts -> pirksts not #pīrksts). What we do is first convert the vowel + tone mark to a vowel + tilde in a decomposed fashion, then remove the tilde in diphthongs, then convert the remaining vowel + tilde sequences to macroned vowels, then delete any other tilde. We leave already-macroned vowels alone: Both e.g. ar and ār occur before consonants. FIXME: This still might not be sufficient.
from = {"([Ee])" .. c.cedilla, "[" .. c.grave .. c.circ .. c.tilde .."]", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .. "?([^aAeEiIoOuU])", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .."?$", "([iI])" .. c.tilde .. "?([eE])" .. c.tilde .. "?", "([aAeEiIuU])" .. c.tilde, c.tilde},
to = {"%1", c.tilde, "%1%2%3", "%1%2", "%1%2", "%1" .. c.macron}
},
sort_key = {
from = {"ā", "č", "ē", "ģ", "ī", "ķ", "ļ", "ņ", "š", "ū", "ž"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]}
},
standard_chars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc,
}
m["mg"] = {
"Malagasy",
7930,
"poz-bre",
"Latn, Arab",
}
m["mh"] = {
"Marshallese",
36280,
"poz-mic",
"Latn",
sort_key = {
from = {"ā", "ļ", "m̧", "ņ", "n̄", "o̧", "ō", "ū"},
to = {"a" .. p[1], "l" .. p[1], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1]}
},
}
m["mi"] = {
"Māori",
36451,
"poz-pep",
"Latn",
sort_key = {
remove_diacritics = c.macron,
from = {"ng", "wh"},
to = {"n" .. p[1], "w" .. p[1]}
},
}
m["mk"] = {
"Macedonian",
9296,
"zls",
"Cyrl, Polyt",
ancestors = "cu",
translit = {
Cyrl = "mk-translit",
-- FIXME: formerly no translit specified for Polyt; unclear if the default [[Module:grc-translit]] is
-- acceptable, so we disable it for now
Polyt = false,
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
remove_exceptions = {"Ѓ", "ѓ", "Ќ", "ќ"}
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
remove_exceptions = {"ѓ", "ќ"},
from = {"ѓ", "ѕ", "ј", "љ", "њ", "ќ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
-- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Cyrl = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["ml"] = {
"Malayalam",
36236,
"dra-mal",
"Mlym",
override_translit = true,
-- Mlym translit in [[Module:scripts/data]]
}
m["mn"] = {
"Mongolian",
9246,
"xgn-cen",
"Cyrl, Mong, Latn, Brai",
ancestors = "cmg",
translit = {
Cyrl = "mn-translit",
-- Mong translit in [[Module:scripts/data]]
},
override_translit = true,
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
strip_diacritics = {
Cyrl = {remove_diacritics = c.grave .. c.acute},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
from = {"ё", "ө", "ү"},
to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—",
Brai = c.braille,
c.punc
},
}
-- "mo" is treated as "ro", see [[WT:LT]]
m["mr"] = {
"Marathi",
1571,
"inc-sou",
"Deva, Modi",
ancestors = "omr",
translit = {
Deva = "mr-translit",
Modi = "mr-Modi-translit",
},
strip_diacritics = {
Deva = {
from = {"च़", "ज़", "झ़"},
to = {"च", "ज", "झ"}
},
},
}
m["ms"] = {
"Malay",
9237,
"poz-mly",
"Latn, ms-Arab",
ancestors = "ms-cla",
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
c.punc
},
}
m["mt"] = {
"Maltese",
9166,
"sem-arb",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = {
from = {"’"},
to = {"'"},
},
ancestors = "sqr",
sort_key = {
from = {
"ċ", "ġ", "ż", -- Convert into PUA so that decomposed form does not get caught by the next step.
"([cgz])", -- Ensure "c" comes after "ċ", "g" comes after "ġ" and "z" comes after "ż".
"g" .. p[1] .. "ħ", -- "għ" after initial conversion of "g".
p[3], p[4], "ħ", "ie", p[5] -- Convert "ċ", "ġ", "ħ", "ie", "ż" into final output.
},
to = {
p[3], p[4], p[5],
"%1" .. p[1],
"g" .. p[2],
"c", "g", "h" .. p[1], "i" .. p[1], "z"
}
},
}
m["my"] = {
"Burmese",
9228,
"tbq-brm",
"Mymr",
ancestors = "obr",
translit = "my-translit",
override_translit = true,
sort_key = {
from = {"ျ", "ြ", "ွ", "ှ", "ဿ"},
to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"}
},
}
m["na"] = {
"Nauruan",
13307,
"poz-mic",
"Latn",
}
m["nb"] = {
"Norwegian Bokmål",
25167,
"gmq",
"Latn",
wikimedia_codes = "no",
ancestors = "gmq-mno, da", -- da as an (but not the) ancestor of nb was agreed on - do not change without discussion
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nd"] = {
"Northern Ndebele",
35613,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["ne"] = {
"Nepali",
33823,
"inc-pah",
"Deva, Newa",
translit = {
Deva = "ne-translit"
},
}
m["ng"] = {
"Ndonga",
33900,
"bnt-ova",
"Latn",
}
m["nl"] = {
"Dutch",
7411,
"gmw-frk",
"Latn, Brai",
ancestors = "dum",
sort_key = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÄäËëÏïÖöÜü",
Brai = c.braille,
c.punc
},
}
m["nn"] = {
"Norwegian Nynorsk",
25164,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
},
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["no"] = {
"Norwegian",
9043,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nr"] = {
"Southern Ndebele",
36785,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["nv"] = {
"Navajo",
13310,
"apa",
"Latn, Brai",
sort_key = {
remove_diacritics = c.acute .. c.ogonek,
from = {
"chʼ", "tłʼ", "tsʼ", -- 3 chars
"ch", "dl", "dz", "gh", "hw", "kʼ", "kw", "sh", "tł", "ts", "zh", -- 2 chars
"ł", "ʼ" -- 1 char
},
to = {
"c" .. p[2], "t" .. p[2], "t" .. p[4],
"c" .. p[1], "d" .. p[1], "d" .. p[2], "g" .. p[1], "h" .. p[1], "k" .. p[1], "k" .. p[2], "s" .. p[1], "t" .. p[1], "t" .. p[3], "z" .. p[1],
"l" .. p[1], "z" .. p[2]
}
},
}
m["ny"] = {
"Chichewa",
33273,
"bnt-nys",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ng'"},
to = {"ng"}
},
}
m["oc"] = {
"Occitan",
14185,
"roa-ocr",
"Latn, Hebr",
ancestors = "pro",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla,
from = {"([lns])·h"},
to = {"%1h"}
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["oj"] = {
"Ojibwe",
33875,
"alg",
"Cans, Latn",
sort_key = {
Latn = {
from = {"aa", "ʼ", "ii", "oo", "sh", "zh"},
to = {"a" .. p[1], "h" .. p[1], "i" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]}
},
},
}
m["om"] = {
"Oromo",
33864,
"cus-eas",
"Latn, Ethi",
}
m["or"] = {
"Odia",
33810,
"inc-eas",
"Orya",
ancestors = "inc-mor",
translit = "or-translit",
}
m["os"] = {
"Ossetian",
33968,
"xsc-sar",
"Cyrl, Geor, Latn",
ancestors = "oos",
translit = {
Cyrl = "os-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = {
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
sort_key = {
Cyrl = {
from = {"ӕ", "гъ", "дж", "дз", "ё", "къ", "пъ", "тъ", "хъ", "цъ", "чъ"},
to = {"а" .. p[1], "г" .. p[1], "д" .. p[1], "д" .. p[2], "е" .. p[1], "к" .. p[1], "п" .. p[1], "т" .. p[1], "х" .. p[1], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["pa"] = {
"Punjabi",
58635,
"inc-pan",
"Guru, pa-Arab",
translit = {
Guru = "Guru-translit",
["pa-Arab"] = "pa-Arab-translit",
},
strip_diacritics = {
["pa-Arab"] = {
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna,
from = {"ݨ", "ࣇ"},
to = {"ن", "ل"}
},
},
}
m["pi"] = {
"Pali",
36727,
"inc-mid",
"Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", --and also Khom
ancestors = "sa",
translit = {
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Beng = "pi-translit",
Sinh = "si-translit",
Mymr = "pi-translit",
Thai = "pi-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Khmr = "pi-translit",
Cakm = "Cakm-translit",
},
strip_diacritics = {
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
Mymr = {
remove_diacritics = c.VS01,
},
},
sort_key = { -- FIXME: This needs to be converted into the current standardized format.
from = {"ā", "ī", "ū", "ḍ", "ḷ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṭ", "ॐ", "([เโ])([ก-ฮ])", "([ເໂ])([ກ-ຮ])", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", u(0xFE00), u(0x200D)},
to = {"a~", "i~", "u~", "d~", "l~", "m~", "n~", "n~~", "n~~~", "t~", "ओँ", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"}
},
}
m["pl"] = {
"Polish",
809,
"zlw-lch",
"Latn",
ancestors = "zlw-mpl",
sort_key = {
from = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ź", "ż"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc,
}
m["ps"] = {
"Pashto",
58680,
"ira-pat",
"ps-Arab",
strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.zwarakay .. c.superalef},
}
m["pt"] = {
"Portuguese",
5146,
"roa-gap",
"Latn, Brai",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "º", "œ"},
to = {"a", "ae", "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz",
Brai = c.braille,
c.punc
},
}
m["qu"] = {
"Quechua",
5218,
"qwe",
"Latn",
}
m["rm"] = {
"Romansh",
13199,
"roa-rhe",
ancestors = "rm-old",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e},
}
m["ro"] = {
"Romanian",
7913,
"roa-eas",
"Latn, Cyrl, Cyrs",
translit = {
Cyrl = "ro-translit"
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute,
from = {"ă", "â", "î", "ș", "ț"},
to = {"a" .. p[1], "a" .. p[2], "i" .. p[1], "s" .. p[1], "t" .. p[1]}
},
Cyrl = {
from = {"ӂ"},
to = {"ж" .. p[1]}
},
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]; presumably not present
standard_chars = {
Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz",
Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя",
c.punc
},
}
m["ru"] = {
"Russian",
7737,
"zle",
"Cyrl, Brai",
ancestors = "zle-mru",
translit = {
Cyrl = "ru-translit"
},
display_text = {
Cyrl = {
from = {"'"},
to = {"’"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"},
from = {"’"},
to = {"'"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
from = {
"і", "ѣ", "ѳ", "ѵ"
},
to = {
"и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3]
}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—",
Brai = c.braille,
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["rw"] = {
"Rwanda-Rundi",
3217514,
"bnt-glb",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron},
}
m["sa"] = {
"Sanskrit",
11059,
"inc",
"as-Beng, Bali, Beng, Bhks, Brah, Mymr, xwo-Mong, Deva, Gujr, Guru, Gran, Hani, Java, Kthi, Knda, Kawi, Khar, Khmr, Laoo, Mlym, mnc-Mong, Marc, Modi, Mong, Nand, Newa, Orya, Phag, Ranj, Saur, Shrd, Sidd, Sinh, Soyo, Lana, Takr, Taml, Tang, Telu, Thai, Tibt, Tutg, Tirh, Zanb", --and also Khom; script codes sorted by canonical name rather than code for [[MOD:sa-convert]]
translit = {
Beng = "sa-Beng-translit",
["as-Beng"] = "sa-Beng-translit",
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Gujr = "sa-Gujr-translit",
Guru = "sa-Guru-translit",
Java = "sa-Java-translit",
Kthi = "sa-Kthi-translit",
Khmr = "pi-translit",
Knda = "sa-Knda-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Mlym = "sa-Mlym-translit",
Modi = "sa-Modi-translit",
-- Mong, mnc-Mong, xwo-Mong translit in [[Module:scripts/data]]
-- NOTE: Formerly used xal-translit for transliterating xwo-Mong but that only handles Cyrillic; it has
-- code to transliterate xwo-Mong but it's broken so I've replaced it with the default xwo-translit.
Mymr = "pi-translit",
Orya = "sa-Orya-translit",
-- Shrd translit in [[Module:scripts/data]]
-- Sidd translit in [[Module:scripts/data]]
Sinh = "si-translit",
Taml = "sa-Taml-translit",
Telu = "sa-Telu-translit",
Thai = "pi-translit",
-- Tibt translit in [[Module:scripts/data]]
},
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
-- Tibt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Deva = s["sa-Deva-stripdiacritics"],
Mymr = {
remove_diacritics = c.VS01,
},
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
},
sort_key = {
Deva = s["sa-Deva-stripdiacritics"], -- until we have a proper Sanskrit sorting algorithm.
Lana = { -- Tai Tham
from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"},
to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"},
},
Laoo = "Laoo-sortkey",
Latn = {
from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"},
to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"},
},
Mymr = {
remove_diacritics = c.VS01,
},
Thai = "Thai-sortkey",
-- FIXME: The previous sort key which mixed all scripts removed ZWJ; I don't know which script(s) this was
-- intended for and there are no other languages which remove it in the sort key AFAIK. If it needs to be
-- removed, specify the script(s) it needs to be removed under or add handling for the "all" script that applies
-- regardless of script.
--all = {
-- remove_diacritics = c.ZWJ,
--},
},
}
m["sc"] = {
"Sardinian",
33976,
"roa-sou",
"Latn",
ancestors = "sc-old",
}
m["sd"] = {
"Sindhi",
33997,
"inc-snd",
"sd-Arab, Deva, Sind, Khoj",
translit = {
Sind = "Sind-translit",
["sd-Arab"] = "sd-Arab-translit"
},
strip_diacritics = {
["sd-Arab"] = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {"ٱ"},
to = {"ا"}
},
},
}
m["se"] = {
"Northern Sami",
33947,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. c.dotbelow .. "'ˈ"},
sort_key = {
from = {"á", "č", "đ", "ŋ", "š", "ŧ", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "n" .. p[1], "s" .. p[1], "t" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc,
}
m["sg"] = {
"Sango",
33954,
"crp",
"Latn",
ancestors = "ngb",
}
m["sh"] = {
"Serbo-Croatian",
9301,
"zls",
"Latn, Cyrl, Glag, Arab",
ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1
wikimedia_codes = "sh, bs, hr, sr",
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"Ć", "ć", "Ś", "ś", "Ź", "ź"}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"З́", "з́", "С́", "с́"}
},
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"ć", "ś", "ź"},
from = {"č", "ć", "dž", "đ", "lj", "nj", "š", "ś", "ž", "ź"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "z" .. p[1], "z" .. p[2]}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"з́", "с́"},
from = {"ђ", "з́", "ј", "љ", "њ", "с́", "ћ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "с" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
standard_chars = {
Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž",
Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["si"] = {
"Sinhalese",
13267,
"inc-ins",
"Sinh",
translit = "si-translit",
override_translit = true,
}
m["sk"] = {
"Slovak",
9058,
"zlw",
"Latn",
ancestors = "zlw-osk",
sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer .. c.caron},
standard_chars = "AaÁáÄäBbCcČčDdĎďEeÉéFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc,
}
m["sl"] = {
"Slovene",
9063,
"zls",
"Latn",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dgrave .. c.invbreve .. c.dotbelow,
remove_exceptions = {"Ć", "ć", "Ǵ", "ǵ", "Ś", "ś", "Ź", "ź"},
from = {"Ə", "ə", "Ł", "ł"},
to = {"E", "e", "L", "l"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dotabove .. c.ringabove .. c.dgrave .. c.invbreve .. c.dotbelow .. c.ringbelow .. c.ogonek,
remove_exceptions = {"ć", "ǵ", "ś", "ź"},
from = {"ä", "č", "ć", "đ", "ə", "ë", "ǧ", "ǵ", "ï", "ł", "ö", "š", "ś", "ü", "ž", "ź"},
to = {"a" .. p[1], "c" .. p[1], "c" .. p[2], "d" .. p[1], "e", "e" .. p[1], "g" .. p[1], "g" .. p[2], "i" .. p[1], "l", "o" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]},
},
standard_chars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc,
}
m["sm"] = {
"Samoan",
34011,
"poz-pnp",
"Latn",
}
m["sn"] = {
"Shona",
34004,
"bnt-sho",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
}
m["so"] = {
"Somali",
13275,
"cus-som",
"Latn, Arab, Osma",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
}
m["sq"] = {
"Albanian",
8748,
"sqj",
"Latn, Grek, ota-Arab, Elba, Todr, Vith",
translit = {
Elba = "Elba-translit",
Vith = "Vith-translit",
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron,
from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'},
},
},
sort_key = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron .. c.tilde .. c.breve .. c.caron,
from = {'^[ie] (%w)', '^të (%w)', 'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'},
to = {'%1', '%1', 'c'..p[1], 'd'..p[1], 'e'..p[1], 'g'..p[1], 'l'..p[1], 'n'..p[1], 'r'..p[1], 's'..p[1], 't'..p[1], 'x'..p[1], 'z'..p[1]},
}
-- TODO: Grek if the default sort key is unsuitable
},
standard_chars = {
Latn = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz",
c.punc
},
}
m["ss"] = {
"Swazi",
34014,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["st"] = {
"Sotho",
34340,
"bnt-sts",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["su"] = {
"Sundanese",
34002,
"poz-msa",
"Latn, Sund, Arab",
ancestors = "osn",
translit = {
Sund = "Sund-translit"
},
}
m["sv"] = {
"Swedish",
9027,
"gmq-eas",
"Latn",
ancestors = "gmq-osw-lat",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla .. "':",
remove_exceptions = {"å"},
from = {"ø", "æ", "œ", "ß", "å", "aͤ", "oͤ"},
to = {"ö", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"}
},
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc,
}
m["sw"] = {
"Swahili",
7838,
"bnt-swh",
"Latn, Arab",
sort_key = {
Latn = {
from = {"ng'"},
to = {"ng" .. p[1]}
},
},
}
m["ta"] = {
"Tamil",
5885,
"dra-tam",
"Taml",
ancestors = "ta-mid",
translit = "ta-translit",
override_translit = true,
}
m["te"] = {
"Telugu",
8097,
"dra-tel",
"Telu",
translit = "te-translit",
override_translit = true,
}
m["tg"] = {
"Tajik",
9260,
"ira-swi",
"Cyrl, fa-Arab, Latn",
ancestors = "fa-cls",
translit = {
Cyrl = "tg-translit"
},
override_translit = true,
strip_diacritics = {
Cyrl = s["tg-stripdiacritics"],
Latn = s["tg-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["th"] = {
"Thai",
9217,
"tai-swe",
"Thai, Khomt, Brai",
translit = {
Thai = "th-translit"
},
sort_key = {
Thai = "Thai-sortkey"
},
}
m["ti"] = {
"Tigrinya",
34124,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["tk"] = {
"Turkmen",
9267,
"trk-ogz",
"Latn, Cyrl, Arab",
strip_diacritics = {
Latn = s["tk-stripdiacritics"],
Cyrl = s["tk-stripdiacritics"],
},
sort_key = {
Latn = {
from = {"ç", "ä", "ž", "ň", "ö", "ş", "ü", "ý"},
to = {"c" .. p[1], "e" .. p[1], "j" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "y" .. p[1]}
},
Cyrl = {
from = {"ё", "җ", "ң", "ө", "ү", "ә"},
to = {"е" .. p[1], "ж" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "э" .. p[1]}
},
},
ancestors = "trk-eog",
}
m["tl"] = {
"Tagalog",
34057,
"phi",
"Latn, Tglg",
translit = {
Tglg = "tl-translit"
},
override_translit = true,
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey",
},
}
m["tn"] = {
"Tswana",
34137,
"bnt-sts",
"Latn",
}
m["to"] = {
"Tongan",
34094,
"poz-ton",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
sort_key = {remove_diacritics = c.macron},
}
m["tr"] = {
"Turkish",
256,
"trk-ogz",
"Latn",
ancestors = "ota",
dotted_dotless_i = true,
sort_key = {
from = {
-- Ignore circumflex, but account for capital Î wrongly becoming ı + circ due to dotted dotless I logic.
"ı" .. c.circ, c.circ,
"i", -- Ensure "i" comes after "ı".
"ç", "ğ", "ı", "ö", "ş", "ü"
},
to = {
"i", "",
"i" .. p[1],
"c" .. p[1], "g" .. p[1], "i", "o" .. p[1], "s" .. p[1], "u" .. p[1]
}
},
standard_chars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc,
}
m["ts"] = {
"Tsonga",
34327,
"bnt-tsr",
"Latn",
}
m["tt"] = {
"Tatar",
25285,
"trk-kbu",
"Cyrl, Latn, tt-Arab",
translit = {
Cyrl = "tt-translit",
["tt-Arab"] = "tt-translit"
},
--override_translit = true, -- enable override until Module code can detect Russian loans such as [[аэропорт]]
dotted_dotless_i = true,
sort_key = {
Cyrl = {
from = {"ә", "ў", "ғ", "ё", "җ", "қ", "ң", "ө", "ү", "һ"},
to = {"а" .. p[1], "в" .. p[1], "г" .. p[1], "е" .. p[1], "ж" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]}
},
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ä", "ə", "ç", "ğ", "ı", "ñ", "ŋ", "ö", "ɵ", "ş", "ü"
},
to = {
"i" .. p[1],
"a" .. p[1], "a" .. p[2], "c" .. p[1], "g" .. p[1], "i", "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "s" .. p[1], "u" .. p[1]
}
},
},
}
-- "tw" is treated as "ak", see [[WT:LT]]
m["ty"] = {
"Tahitian",
34128,
"poz-pep",
"Latn",
}
m["ug"] = {
"Uyghur",
13263,
"trk-kar",
"ug-Arab, Latn, Cyrl",
ancestors = "chg",
translit = {
["ug-Arab"] = "ug-translit",
Cyrl = "ug-translit",
},
override_translit = true,
}
m["uk"] = {
"Ukrainian",
8798,
"zle",
"Cyrl",
ancestors = "zle-muk",
translit = "uk-translit",
strip_diacritics = {remove_diacritics = c.grave .. c.acute},
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {
"ї", -- 2 chars
"ґ", "є", "і" -- 1 char
},
to = {
"и" .. p[2],
"г" .. p[1], "е" .. p[1], "и" .. p[1]
}
},
standard_chars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe.
}
m["ur"] = {
"Urdu",
1617,
"inc-hnd",
"ur-Arab, Hebr",
translit = {
["ur-Arab"] = "ur-translit"
},
strip_diacritics = {
["ur-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
["ur-Arab"] = "ایببپتثجچحخدذرزژسشصضطظعغفقکگلࣇڷمنݨوؤہھئٹڈڑآے",
c.punc,
},
}
m["uz"] = {
"Uzbek",
9264,
"trk-kar",
"Latn, Cyrl, fa-Arab",
ancestors = "chg",
translit = {
Cyrl = "uz-translit"
},
sort_key = {
Latn = {
from = {"oʻ", "gʻ", "sh", "ch", "ng"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3], "z" .. p[4], "z" .. p[5]}
},
Cyrl = {
from = {"ё", "ў", "қ", "ғ", "ҳ"},
to = {"е" .. p[1], "я" .. p[1], "я" .. p[2], "я" .. p[3], "я" .. p[4]}
},
},
strip_diacritics = {
["fa-Arab"] = "ar-stripdiacritics",
},
}
m["ve"] = {
"Venda",
32704,
"bnt-bso",
"Latn",
}
m["vi"] = {
"Vietnamese",
9199,
"mkh-vie",
"Latn, Hani",
ancestors = "mkh-mvi",
sort_key = {
Latn = "vi-sortkey",
Hani = "Hani-sortkey",
},
}
m["vo"] = {
"Volapük",
36986,
"art",
"Latn",
}
m["wa"] = {
"Walloon",
34219,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["wo"] = {
"Wolof",
34257,
"alv-fwo",
"Latn, Arab, Gara",
}
m["xh"] = {
"Xhosa",
13218,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["yi"] = {
"Yiddish",
8641,
"gmw-hgm",
"Hebr, Latn",
ancestors = "gmh",
translit = {
Hebr = "yi-translit",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["yo"] = {
"Yoruba",
34311,
"alv-yor",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.macron}
},
sort_key = {
Latn = {
from = {"ẹ", "ɛ", "gb", "ị", "kp", "ọ", "ɔ", "ṣ", "sh", "ụ"},
to = {"e" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "o" .. p[1], "o" .. p[1], "s" .. p[1], "s" .. p[1], "u" .. p[1]}
},
},
}
m["za"] = {
"Zhuang",
13216,
"tai",
"Latn, Hani",
sort_key = {
Latn = "za-sortkey",
Hani = "Hani-sortkey",
},
}
m["zh"] = {
"Chinese",
7850,
"zhx",
"Hants, Latn, Bopo, Nshu, Brai",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = {
Hani = "zh-translit",
Bopo = "zh-translit",
},
sort_key = {
Hani = "Hani-sortkey"
},
}
m["zu"] = {
"Zulu",
10179,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
return require("Module:languages").finalizeData(m, "language")
gx8qxn372mvflpjmn7xexq2a14xa89o
86379
86206
2026-07-23T03:10:01Z
Altronic
4137
translate some of the language names
86379
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
-- Ideally, we want to move these into [[Module:languages/data]], but because (a) it's necessary to use require on that module, and (b) they're only used in this data module, it's less memory-efficient to do that at the moment. If it becomes possible to use mw.loadData, then these should be moved there.
s["de-Latn-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove,
from = {"æ", "œ", "ß"},
to = {"ae", "oe", "ss"}
}
s["de-Latn-standardchars"] = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz"
s["ka-stripdiacritics"] = {remove_diacritics = c.circ}
s["no-sortkey"] = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
s["no-standardchars"] = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc
s["sa-Deva-stripdiacritics"] = { -- Don't use remove_diacritics for accent marks, as १ and ३ should also be removed if (and only if) they carry any.
from = {"ॐ", "[१३]?[" .. c.anudatta .. c.udatta .. c.dsvarita .. c.tsvarita .. "]+"},
to = {"ओँ"},
}
s["tg-stripdiacritics"] = {remove_diacritics = c.grave .. c.acute}
s["tk-stripdiacritics"] = {remove_diacritics = c.macron}
local m = {}
m["aa"] = {
"Afar",
27811,
"cus-eas",
"Latn, Ethi",
strip_diacritics = {
Latn = {remove_diacritics = c.acute},
},
}
m["ab"] = {
"Abkhaz",
5111,
"cau-abz",
"Cyrl, Geor, Latn",
translit = {
Cyrl = "ab-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
from = {"^а%-"},
to = {"а"},
},
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"х'ә", -- 3 chars
"гь", "гә", "ӷь", "ҕь", "ӷә", "ҕә", "дә", "ё", "жь", "жә", "ҙә", "ӡә", "ӡ'", "кь", "кә", "қь", "қә", "ҟь", "ҟә", "ҫә", "тә", "ҭә", "ф'", "хь", "хә", "х'", "ҳә", "ць", "цә", "ц'", "ҵә", "ҵ'", "шь", "шә", "џь", -- 2 chars
"ӷ", "ҕ", "ҙ", "ӡ", "қ", "ҟ", "ԥ", "ҧ", "ҫ", "ҭ", "ҳ", "ҵ", "ҷ", "ҽ", "ҿ", "ҩ", "џ", "ә", -- 1 char
"^а",
},
to = {
"х" .. p[4],
"г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "г" .. p[7], "г" .. p[8], "д" .. p[1], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "з" .. p[2], "з" .. p[4], "з" .. p[5], "к" .. p[1], "к" .. p[2], "к" .. p[4], "к" .. p[5], "к" .. p[7], "к" .. p[8], "с" .. p[2], "т" .. p[1], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[6], "ц" .. p[1], "ц" .. p[2], "ц" .. p[3], "ц" .. p[5], "ц" .. p[6], "ш" .. p[1], "ш" .. p[2], "ы" .. p[3],
"г" .. p[3], "г" .. p[4], "з" .. p[1], "з" .. p[3], "к" .. p[3], "к" .. p[6], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[2], "х" .. p[5], "ц" .. p[4], "ч" .. p[1], "ч" .. p[2], "ч" .. p[3], "ы" .. p[1], "ы" .. p[2], "ь" .. p[1],
"",
}
},
},
}
m["ae"] = {
"Avestan",
29572,
"ira-cen",
"Avst, Gujr, Deva",
translit = {
Avst = "Avst-translit"
},
}
m["af"] = {
"Afrikaans",
14196,
"gmw-frk",
"Latn, Arab",
ancestors = "nl",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'",
from = {"['ʼ]n"},
to = {"n" .. p[1]}
}
},
}
m["ak"] = {
"Akan",
28026,
"alv-ctn",
"Latn",
}
m["am"] = {
"Amharic",
28244,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["an"] = {
"Aragonese",
8765,
"roa-nar",
"Latn",
}
m["ar"] = {
"Arabic",
13955,
"sem-arb",
"Arab, Hebr, Syrc, Brai, Nbat",
translit = {
Arab = "ar-translit"
},
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["as"] = {
"Assamese",
29401,
"inc-bas",
"as-Beng",
ancestors = "inc-mas",
translit = "as-translit",
}
m["av"] = {
"Avar",
29561,
"cau-ava",
"Cyrl, Latn, Arab",
ancestors = "oav",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"],
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"гъ", "гь", "гӏ", "ё", "кк", "къ", "кь", "кӏ", "лъ", "лӏ", "тӏ", "хх", "хъ", "хь", "хӏ", "цӏ", "чӏ"},
to = {"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "к" .. p[4], "л" .. p[1], "л" .. p[2], "т" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[4], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["ay"] = {
"Aymara",
4627,
"sai-aym",
"Latn",
}
m["az"] = {
"Azerbaijani",
9292,
"trk-ogz",
"Latn, Cyrl, fa-Arab",
ancestors = "trk-oat",
dotted_dotless_i = true,
strip_diacritics = {
Latn = {
from = {"ʼ"},
to = {"'"},
},
["fa-Arab"] = {
module = "ar-stripdiacritics",
["from"] = {
"ۆ",
"ۇ",
"وْ",
"ڲ",
"ؽ",
},
["to"] = {
"و",
"و",
"و",
"گ",
"ی",
},
},
},
display_text = {
Latn = {
from = {"'"},
to = {"ʼ"}
}
},
sort_key = {
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ç", "ə", "ğ", "x", "ı", "q", "ö", "ş", "ü", "w"
},
to = {
"i" .. p[1],
"c" .. p[1], "e" .. p[1], "g" .. p[1], "h" .. p[1], "i", "k" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]
}
},
Cyrl = {
from = {"ғ", "ә", "ы", "ј", "ҝ", "ө", "ү", "һ", "ҹ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["ba"] = {
"Bashkir",
13389,
"trk-kbu",
"Cyrl",
translit = "ba-translit",
override_translit = true,
sort_key = {
from = {"ғ", "ҙ", "ё", "ҡ", "ң", "ө", "ҫ", "ү", "һ", "ә"},
to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "с" .. p[1], "у" .. p[1], "х" .. p[1], "э" .. p[1]}
},
}
m["be"] = {
"Belarusian",
9091,
"zle",
"Cyrl, Latn",
ancestors = "zle-mbe",
translit = {
Cyrl = "be-translit",
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"ґ", "ё", "і", "ў"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "у" .. p[1]}
},
Latn = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"},
from = {"ć", "č", "dz", "dź", "dž", "ch", "ł", "ń", "ś", "š", "ŭ", "ź", "ž"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "d" .. p[3], "h" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя",
Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž",
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["bg"] = {
"Bulgarian",
7918,
"zls",
"Cyrl",
ancestors = "cu-bgm",
translit = "bg-translit",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute,
remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"},
},
standard_chars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc,
}
m["bh"] = {
"Bihari",
135305,
"inc-eas",
"Deva",
}
m["bi"] = {
"Bislama",
35452,
"crp",
"Latn",
ancestors = "en",
}
m["bm"] = {
"Bambara",
33243,
"dmn-emn",
"Latn, Nkoo",
sort_key = {
Latn = {
from = {"ɛ", "ɲ", "ŋ", "ɔ"},
to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]}
},
},
}
m["bn"] = {
"Bengali",
9610,
"inc-bas",
"Beng, Newa",
ancestors = "inc-mbn",
translit = {
Beng = "bn-translit"
},
}
m["bo"] = {
"Tibetan",
34271,
"sit-tib",
"Tibt", -- sometimes Deva?
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["br"] = {
"Breton",
12107,
"cel-brs",
"Latn",
ancestors = "xbm",
sort_key = {
from = {"ch", "c['ʼ’]h"},
to = {"c" .. p[1], "c" .. p[2]}
},
}
m["ca"] = {
"Catalanais",
7026,
"roa-ocr",
"Latn",
ancestors = "roa-oca",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla .. "·"},
standard_chars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc,
}
m["ce"] = {
"Chechen",
33350,
"cau-vay",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "оь", "пӏ", "тӏ", "уь", "хь", "хӏ", "цӏ", "чӏ", "юь", "яь"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "ю" .. p[1], "я" .. p[1]}
},
},
}
m["ch"] = {
"Chamorro",
33262,
"poz",
"Latn",
sort_key = {
remove_diacritics = "'",
from = {"å", "ch", "ñ", "ng"},
to = {"a" .. p[1], "c" .. p[1], "n" .. p[1], "n" .. p[2]}
},
}
m["co"] = {
"Corsican",
33111,
"roa-itr",
"Latn",
sort_key = {
from = {"chj", "ghj", "sc", "sg"},
to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]}
},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc,
}
m["cr"] = {
"Cree",
33390,
"alg",
"Latn, Cans",
translit = {
Cans = "cr-translit"
},
}
m["cs"] = {
"Czech",
9056,
"zlw",
"Latn",
ancestors = "cs-ear",
sort_key = {
from = {"á", "č", "ď", "é", "ě", "ch", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "h" .. p[1], "i" .. p[1], "n" .. p[1], "o" .. p[1], "r" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "y" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc,
}
m["cu"] = {
"Old Church Slavonic",
35499,
"zls",
"Cyrs, Glag, Zname",
translit = {
Cyrs = "Cyrs-translit",
Glag = "Glag-translit"
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cv"] = {
"Chuvash",
33348,
"trk-ogr",
"Cyrl",
ancestors = "cv-mid",
translit = "cv-translit",
override_translit = true,
sort_key = {
from = {"ӑ", "ё", "ӗ", "ҫ", "ӳ"},
to = {"а" .. p[1], "е" .. p[1], "е" .. p[2], "с" .. p[1], "у" .. p[1]}
},
}
m["cy"] = {
"Cuimris",
9309,
"cel-brw",
"Latn",
ancestors = "wlm",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. "'",
from = {"ch", "dd", "ff", "ng", "ll", "ph", "rh", "th"},
to = {"c" .. p[1], "d" .. p[1], "f" .. p[1], "g" .. p[1], "l" .. p[1], "p" .. p[1], "r" .. p[1], "t" .. p[1]}
},
standard_chars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc,
}
m["da"] = {
"Danmhairgis",
9035,
"gmq-eas",
"Latn",
ancestors = "gmq-oda",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla,
remove_exceptions = {"å"},
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc,
}
m["de"] = {
"Gearmailtis",
188,
"gmw-hgm",
"Latn, Latf, Brai",
ancestors = "de-ear",
sort_key = {
Latn = s["de-Latn-sortkey"],
Latf = s["de-Latn-sortkey"],
},
standard_chars = {
Latn = s["de-Latn-standardchars"],
Latf = s["de-Latn-standardchars"],
Brai = c.braille,
c.punc
}
}
m["dv"] = {
"Dhivehi",
32656,
"inc-ins",
"Thaa, Diak",
translit = {
Thaa = "dv-translit",
Diak = "Diak-translit",
},
ancestors = "dv-old",
override_translit = true,
}
m["dz"] = {
"Dzongkha",
33081,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ee"] = {
"Ewe",
30005,
"alv-gbe",
"Latn",
sort_key = {
remove_diacritics = c.tilde,
from = {"ɖ", "dz", "ɛ", "ƒ", "gb", "ɣ", "kp", "ny", "ŋ", "ɔ", "ts", "ʋ"},
to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "f" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1], "v" .. p[1]}
},
}
m["el"] = {
"Greek",
9129,
"grk",
"Grek, Polyt, Brai",
ancestors = "el-kth",
translit = "el-translit",
override_translit = true,
-- Grek and Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ",
Brai = c.braille,
c.punc
},
}
m["en"] = {
"Beurla",
1860,
"gmw-ang",
"Latn, Brai, Shaw, Dsrt", -- entries in Shaw or Dsrt might require prior discussion
wikimedia_codes = "en, simple",
ancestors = "en-ear",
sort_key = {
Latn = {
-- Many of these are needed for sorting language names.
remove_diacritics = "'\"%-%.,%s·ʻʼ" .. c.diacritics,
-- These are found in pagenames.
from = {"[ɒæ🅱¢©ᴄðđəǝɜɡħʜıɨłŋɲøɔœꝑꝓꝕßʋ]"},
to = {{
["ɒ"] = "a", ["æ"] = "ae", ["🅱"] = "b", ["¢"] = "c", ["©"] = "c",
["ᴄ"] = "c", ["ð"] = "d", ["đ"] = "d", ["ə"] = "e", ["ǝ"] = "e",
["ɜ"] = "e", ["ɡ"] = "g", ["ħ"] = "h", ["ʜ"] = "h", ["ı"] = "i",
["ɨ"] = "i", ["ł"] = "l", ["ŋ"] = "n", ["ɲ"] = "n", ["ø"] = "o",
["ɔ"] = "o", ["œ"] = "oe", ["ꝑ"] = "p", ["ꝓ"] = "p", ["ꝕ"] = "p",
["ß"] = "ss", ["ʋ"] = "v",
}},
},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
Brai = c.braille,
c.punc
},
}
m["eo"] = {
"Esperanto",
143,
"art",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {"ĉ", "ĝ", "ĥ", "ĵ", "ŝ", "ŭ"},
to = {"c" .. p[1], "g" .. p[1], "h" .. p[1], "j" .. p[1], "s" .. p[1], "u" .. p[1]}
},
standard_chars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc,
}
m["es"] = {
"Spanish",
1321,
"roa-cas",
"Latn, Brai",
ancestors = "es-ear",
sort_key = {
Latn = {
remove_exceptions = {"ñ"},
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "ñ", "º", "œ"},
to = {"a", "ae", "n" .. p[1], "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["et"] = {
"Estonian",
9072,
"urj-fin",
"Latn",
sort_key = {
from = {
"š", "ž", "õ", "ä", "ö", "ü", -- 2 chars
"z" -- 1 char
},
to = {
"s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4],
"s" .. p[2]
}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc,
}
m["eu"] = {
"Basque",
8752,
"euq",
"Latn",
sort_key = {
from = {"ç", "ñ"},
to = {"c" .. p[1], "n" .. p[1]}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc,
}
m["fa"] = {
"Persian",
9168,
"ira-swi",
"fa-Arab, Hebr",
ancestors = "fa-cls",
strip_diacritics = {
["fa-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ٱ"}, -- character "ۂ" code U+06C2 to "ه"; hamzatu l-waṣli to a regular alif
to = {"ه", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ff"] = {
"Fula",
33454,
"alv-fwo",
"Latn, Adlm",
}
m["fi"] = {
"Finnish",
1412,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = { -- used to indicate gemination of the next consonant
remove_diacritics = "ˣ",
from = {"’"},
to = {"'"},
},
sort_key = { -- [[Appendix:Finnish alphabet#Collation]] + "aͤ" and "oͤ" as historical variants of "ä" and "ö".
remove_diacritics = "'’:" .. c.diacritics,
remove_exceptions = {
"a[" .. c.ringabove .. c.diaer .. c.small_e .. "]", -- åäaͤ
"o[" .. c.diaer .. c.tilde .. c.dacute .. c.small_e .. "]", -- öõőoͤ
"u[" .. c.diaer .. c.dacute .. "]" -- üű
},
from = {"æ", "[ðđ]", "ł", "ŋ", "œ", "ß", "þ", "u[" .. c.diaer .. c.dacute .. "]", "å", "aͤ", "o[" .. c.tilde .. c.dacute .. c.small_e .. "]", "ø", "(.)['%-]"},
to = {"ae", "d", "l", "n", "oe", "ss", "th", "y", "z" .. p[1], "ä", "ö", "ö", "%1"}
},
standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc,
}
m["fj"] = {
"Fijian",
33295,
"poz-pcc",
"Latn",
}
m["fo"] = {
"Faroese",
25258,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "í", "ó", "ú", "ý", "æ", "ø"},
to = {"a" .. p[1], "d" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc,
}
m["fr"] = {
"French",
150,
"roa-oil",
"Latn, Brai",
ancestors = "frm",
sort_key = {
Latn = s["roa-oil-sortkey"]
},
standard_chars = {
Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz",
Brai = c.braille,
c.punc
},
}
m["fy"] = {
"West Frisian",
27175,
"gmw-fri",
"Latn",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer,
from = {"y"},
to = {"i"}
},
standard_chars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc,
}
m["ga"] = {
"Gaeilge",
9142,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {
remove_diacritics = c.acute,
from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"},
to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc,
}
m["gd"] = {
"Gàidhlig",
9314,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
sort_key = {remove_diacritics = c.grave .. c.acute},
standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc,
}
m["gl"] = {
"Galician",
9307,
"roa-gap",
"Latn",
sort_key = {
remove_diacritics = c.acute,
from = {"ñ"},
to = {"n" .. p[1]}
},
standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc,
}
m["gu"] = {
"Gujarati",
5137,
"inc-wes",
"Arab, Gujr",
ancestors = "inc-mgu",
translit = {
Gujr = "gu-translit",
},
strip_diacritics = {
Arab = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun},
Gujr = {remove_diacritics = "઼"},
},
}
m["gv"] = {
"Gàidhlig Mhanainneach",
12175,
"cel-gae",
"Latn",
ancestors = "mga",
sort_key = {remove_diacritics = c.cedilla .. "-"},
standard_chars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc,
}
m["ha"] = {
"Hausa",
56475,
"cdc-wst",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron}
},
sort_key = {
Latn = {
from = {"ɓ", "b'", "ɗ", "d'", "ƙ", "k'", "sh", "ƴ", "'y"},
to = {"b" .. p[1], "b" .. p[2], "d" .. p[1], "d" .. p[2], "k" .. p[1], "k" .. p[2], "s" .. p[1], "y" .. p[1], "y" .. p[2]}
},
},
}
m["he"] = {
"Hebrew",
9288,
"sem-can",
"Hebr, Phnx, Brai, Samr",
ancestors = "he-med",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]
-- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["hi"] = {
"Hindi",
1568,
"inc-hnd",
"Deva, Kthi, Newa",
translit = {
Deva = "hi-translit"
},
standard_chars = {
Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰",
c.punc
},
}
m["ho"] = {
"Hiri Motu",
33617,
"crp",
"Latn",
ancestors = "meu",
}
m["ht"] = {
"Haitian Creole",
33491,
"crp",
"Latn",
ancestors = "ht-sdm",
sort_key = {
from = {
"oun", -- 3 chars
"an", "ch", "è", "en", "ng", "ò", "on", "ou", "ui" -- 2 chars
},
to = {
"o" .. p[4],
"a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "u" .. p[1]
}
},
}
m["hu"] = {
"Hungarian",
9067,
"urj-ugr",
"Latn, Hung",
ancestors = "ohu",
sort_key = {
Latn = {
from = {
"dzs", -- 3 chars
"á", "cs", "dz", "é", "gy", "í", "ly", "ny", "ó", "ö", "ő", "sz", "ty", "ú", "ü", "ű", "zs", -- 2 chars
},
to = {
"d" .. p[2],
"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "u" .. p[3], "z" .. p[1],
}
},
},
standard_chars = {
Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz",
c.punc
},
}
m["hy"] = {
"Armenian",
8785,
"hyx",
"Armn, Brai",
ancestors = "axm",
-- Armn translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Armn = {
remove_diacritics = "՛՜՞՟",
from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵", "ՙ", "՚"},
to = {"և", "յ", "ի", "է", "ֈ", "ʻ", "’"}
},
},
sort_key = {
Armn = {
from = {
"ու", "եւ", -- 2 chars
"և" -- 1 char
},
to = {
"ւ", "եվ",
"եվ"
}
},
},
}
m["hz"] = {
"Herero",
33315,
"bnt-swb",
"Latn",
}
m["ia"] = {
"Interlingua",
35934,
"art",
"Latn",
}
m["id"] = {
"Indonesian",
9240,
"poz-mly",
"Latn",
ancestors = "ms",
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["ie"] = {
"Interlingue",
35850,
"art",
"Latn",
type = "appendix-constructed",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
m["ig"] = {
"Igbo",
33578,
"alv-igb",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron},
sort_key = {
from = {"gb", "gh", "gw", "ị", "kp", "kw", "ṅ", "nw", "ny", "ọ", "sh", "ụ"},
to = {"g" .. p[1], "g" .. p[2], "g" .. p[3], "i" .. p[1], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "o" .. p[1], "s" .. p[1], "u" .. p[1]}
},
}
m["ii"] = {
"Nuosu",
34235,
"tbq-nlo",
"Yiii",
translit = "ii-translit",
}
m["ik"] = {
"Inupiaq",
27183,
"esx-inu",
"Latn",
sort_key = {
from = {
"ch", "ġ", "dj", "ḷ", "ł̣", "ñ", "ng", "r̂", "sr", "zr", -- 2 chars
"ł", "ŋ", "ʼ" -- 1 char
},
to = {
"c" .. p[1], "g" .. p[1], "h" .. p[1], "l" .. p[1], "l" .. p[3], "n" .. p[1], "n" .. p[2], "r" .. p[1], "s" .. p[1], "z" .. p[1],
"l" .. p[2], "n" .. p[2], "z" .. p[2]
}
},
}
m["io"] = {
"Ido",
35224,
"art",
"Latn",
}
m["is"] = {
"Icelandic",
294,
"gmq-ins",
"Latn",
sort_key = {
from = {"á", "ð", "é", "í", "ó", "ú", "ý", "þ", "æ", "ö"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
standard_chars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc,
}
m["it"] = {
"Italian",
652,
"roa-itr",
"Latn",
ancestors = "roa-oit",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove},
standard_chars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc,
}
m["iu"] = {
"Inuktitut",
29921,
"esx-inu",
"Cans, Latn",
translit = {
Cans = "cr-translit"
},
override_translit = true,
}
m["ja"] = {
"Japanese",
5287,
"jpx",
"Jpan, Latn, Brai",
ancestors = "ja-ear",
translit = s["jpx-translit"],
link_tr = true,
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["jv"] = {
"Javanese",
33549,
"poz",
"Latn, Java, Arab",
ancestors = "kaw",
translit = {
Java = "jv-translit"
},
link_tr = true,
strip_diacritics = {
Latn = {remove_diacritics = c.circ} -- Modern jv don't use ê
},
sort_key = {
Latn = {
from = {"å", "dh", "é", "è", "ng", "ny", "th"},
to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "n" .. p[2], "t" .. p[1]}
},
},
}
m["ka"] = {
"Georgian",
8108,
"ccs-gzn",
"Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian
ancestors = "ka-mid",
-- Geor, Geok translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
Geor = s["ka-stripdiacritics"],
Geok = s["ka-stripdiacritics"],
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["kg"] = {
"Kongo",
33702,
"bnt-kng",
"Latn",
}
m["ki"] = {
"Kikuyu",
33587,
"bnt-kka",
"Latn",
}
m["kj"] = {
"Kwanyama",
1405077,
"bnt-ova",
"Latn",
}
m["kk"] = {
"Kazakh",
9252,
"trk-kno",
"Cyrl, Latn, kk-Arab",
translit = {
Cyrl = {
from = {
"Ё", "ё", "Й", "й", "Нг", "нг", "Ӯ", "ӯ", -- 2 chars; are "Ӯ" and "ӯ" actually used?
"А", "а", "Ә", "ә", "Б", "б", "В", "в", "Г", "г", "Ғ", "ғ", "Д", "д", "Е", "е", "Ж", "ж", "З", "з", "И", "и", "К", "к", "Қ", "қ", "Л", "л", "М", "м", "Н", "н", "Ң", "ң", "О", "о", "Ө", "ө", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ұ", "ұ", "Ү", "ү", "Ф", "ф", "Х", "х", "Һ", "һ", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "І", "і", "Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я", -- 1 char
},
to = {
"E", "e", "İ", "i", "Ñ", "ñ", "U", "u",
"A", "a", "Ä", "ä", "B", "b", "V", "v", "G", "g", "Ğ", "ğ", "D", "d", "E", "e", "J", "j", "Z", "z", "İ", "i", "K", "k", "Q", "q", "L", "l", "M", "m", "N", "n", "Ñ", "ñ", "O", "o", "Ö", "ö", "P", "p", "R", "r", "S", "s", "T", "t", "U", "u", "Ū", "ū", "Ü", "ü", "F", "f", "X", "x", "H", "h", "S", "s", "Ç", "ç", "Ş", "ş", "Ş", "ş", "", "", "Y", "y", "I", "ı", "", "", "É", "é", "Ü", "ü", "Ä", "ä",
}
}
},
-- override_translit = true,
sort_key = {
Cyrl = {
from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ұ", "ү", "һ", "і"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1], "ы" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя",
c.punc
},
}
m["kl"] = {
"Greenlandic",
25355,
"esx-inu",
"Latn",
sort_key = {
from = {"æ", "ø", "å"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
}
}
m["km"] = {
"Khmer",
9205,
"mkh-kmr",
"Khmr",
ancestors = "xhm",
translit = "km-translit", --This might yield unwanted result unless its entry has {{km-IPA}}.
}
m["kn"] = {
"Kannada",
33673,
"dra-kan",
"Knda, Tutg",
ancestors = "dra-mkn",
-- Knda translit in [[Module:scripts/data]]
}
m["ko"] = {
"Korean",
9176,
"qfa-kor",
"Kore, Brai",
ancestors = "ko-ear",
translit = {
Kore = "ko-translit",
},
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["kr"] = {
"Kanuri",
36094,
"ssa-sah",
"Latn, Arab",
-- the sortkey and strip_diacritics are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve}
},
sort_key = {
Latn = {
from = {"ǝ", "ny", "ɍ", "sh"},
to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]}
},
},
}
m["ks"] = {
"Kashmiri",
33552,
"inc-kas",
"ks-Arab, Deva, Shrd, Latn",
translit = {
["ks-Arab"] = "ks-Arab-translit",
Deva = "ks-Deva-translit",
-- Shrd translit in [[Module:scripts/data]]
},
}
-- "kv" is treated as "koi", "kpv", see [[WT:LT]]
m["kw"] = {
"Cornish",
25289,
"cel-brs",
"Latn",
ancestors = "cnx",
sort_key = {
from = {"ch"},
to = {"c" .. p[1]}
},
}
m["ky"] = {
"Kyrgyz",
9255,
"trk-kkp",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "ky-translit"
},
override_translit = true,
sort_key = {
Cyrl = {
from = {"ё", "ң", "ө", "ү"},
to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
}
m["la"] = {
"Latin",
397,
"itc-laf",
"Latn, Ital",
ancestors = "itc-ola",
-- Ital translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission)
display_text = {
Latn = s["itc-Latn-displaytext"]
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"]
},
sort_key = {
Latn = s["itc-Latn-sortkey"]
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXx",
c.punc
},
}
m["lb"] = {
"Luxembourgish",
9051,
"gmw-hgm",
"Latn, Brai",
ancestors = "gmw-cfr",
sort_key = {
Latn = {
from = {"ä", "ë", "é"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]}
},
},
}
m["lg"] = {
"Luganda",
33368,
"bnt-nyg",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ŋ"},
to = {"n" .. p[1]}
},
}
m["li"] = {
"Limburgish",
102172,
"gmw-frk",
"Latn",
ancestors = "dum",
}
m["ln"] = {
"Lingala",
36217,
"bnt-bmo",
"Latn",
sort_key = {
remove_diacritics = c.acute .. c.circ .. c.caron,
from = {"ɛ", "gb", "mb", "mp", "nd", "ng", "nk", "ns", "nt", "ny", "nz", "ɔ"},
to = {"e" .. p[1], "g" .. p[1], "m" .. p[1], "m" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "n" .. p[4], "n" .. p[5], "n" .. p[6], "n" .. p[7], "o" .. p[1]}
},
}
m["lo"] = {
"Lao",
9211,
"tai-swe",
"Laoo", -- also Tai Noi/Lao Buhan script
translit = "lo-translit",
sort_key = "Laoo-sortkey",
standard_chars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc,
}
m["lt"] = {
"Lithuanian",
9083,
"bat-eas",
"Latn",
ancestors = "olt",
display_text = "lt-common",
strip_diacritics = "lt-common",
sort_key = "lt-common",
standard_chars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc,
}
m["lu"] = {
"Luba-Katanga",
36157,
"bnt-lub",
"Latn",
}
m["lv"] = {
"Latvian",
9078,
"bat-eas",
"Latn",
strip_diacritics = {
-- This attempts to convert vowels with tone marks to vowels either with or without macrons. Specifically, there should be no macrons if the vowel is part of a diphthong (including resonant diphthongs such pìrksts -> pirksts not #pīrksts). What we do is first convert the vowel + tone mark to a vowel + tilde in a decomposed fashion, then remove the tilde in diphthongs, then convert the remaining vowel + tilde sequences to macroned vowels, then delete any other tilde. We leave already-macroned vowels alone: Both e.g. ar and ār occur before consonants. FIXME: This still might not be sufficient.
from = {"([Ee])" .. c.cedilla, "[" .. c.grave .. c.circ .. c.tilde .."]", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .. "?([^aAeEiIoOuU])", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .."?$", "([iI])" .. c.tilde .. "?([eE])" .. c.tilde .. "?", "([aAeEiIuU])" .. c.tilde, c.tilde},
to = {"%1", c.tilde, "%1%2%3", "%1%2", "%1%2", "%1" .. c.macron}
},
sort_key = {
from = {"ā", "č", "ē", "ģ", "ī", "ķ", "ļ", "ņ", "š", "ū", "ž"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]}
},
standard_chars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc,
}
m["mg"] = {
"Malagasy",
7930,
"poz-bre",
"Latn, Arab",
}
m["mh"] = {
"Marshallese",
36280,
"poz-mic",
"Latn",
sort_key = {
from = {"ā", "ļ", "m̧", "ņ", "n̄", "o̧", "ō", "ū"},
to = {"a" .. p[1], "l" .. p[1], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1]}
},
}
m["mi"] = {
"Māori",
36451,
"poz-pep",
"Latn",
sort_key = {
remove_diacritics = c.macron,
from = {"ng", "wh"},
to = {"n" .. p[1], "w" .. p[1]}
},
}
m["mk"] = {
"Macedonian",
9296,
"zls",
"Cyrl, Polyt",
ancestors = "cu",
translit = {
Cyrl = "mk-translit",
-- FIXME: formerly no translit specified for Polyt; unclear if the default [[Module:grc-translit]] is
-- acceptable, so we disable it for now
Polyt = false,
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.acute,
remove_exceptions = {"Ѓ", "ѓ", "Ќ", "ќ"}
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
remove_exceptions = {"ѓ", "ќ"},
from = {"ѓ", "ѕ", "ј", "љ", "њ", "ќ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
-- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Cyrl = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["ml"] = {
"Malayalam",
36236,
"dra-mal",
"Mlym",
override_translit = true,
-- Mlym translit in [[Module:scripts/data]]
}
m["mn"] = {
"Mongolian",
9246,
"xgn-cen",
"Cyrl, Mong, Latn, Brai",
ancestors = "cmg",
translit = {
Cyrl = "mn-translit",
-- Mong translit in [[Module:scripts/data]]
},
override_translit = true,
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
strip_diacritics = {
Cyrl = {remove_diacritics = c.grave .. c.acute},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave,
from = {"ё", "ө", "ү"},
to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—",
Brai = c.braille,
c.punc
},
}
-- "mo" is treated as "ro", see [[WT:LT]]
m["mr"] = {
"Marathi",
1571,
"inc-sou",
"Deva, Modi",
ancestors = "omr",
translit = {
Deva = "mr-translit",
Modi = "mr-Modi-translit",
},
strip_diacritics = {
Deva = {
from = {"च़", "ज़", "झ़"},
to = {"च", "ज", "झ"}
},
},
}
m["ms"] = {
"Malay",
9237,
"poz-mly",
"Latn, ms-Arab",
ancestors = "ms-cla",
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
c.punc
},
}
m["mt"] = {
"Maltese",
9166,
"sem-arb",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = {
from = {"’"},
to = {"'"},
},
ancestors = "sqr",
sort_key = {
from = {
"ċ", "ġ", "ż", -- Convert into PUA so that decomposed form does not get caught by the next step.
"([cgz])", -- Ensure "c" comes after "ċ", "g" comes after "ġ" and "z" comes after "ż".
"g" .. p[1] .. "ħ", -- "għ" after initial conversion of "g".
p[3], p[4], "ħ", "ie", p[5] -- Convert "ċ", "ġ", "ħ", "ie", "ż" into final output.
},
to = {
p[3], p[4], p[5],
"%1" .. p[1],
"g" .. p[2],
"c", "g", "h" .. p[1], "i" .. p[1], "z"
}
},
}
m["my"] = {
"Burmese",
9228,
"tbq-brm",
"Mymr",
ancestors = "obr",
translit = "my-translit",
override_translit = true,
sort_key = {
from = {"ျ", "ြ", "ွ", "ှ", "ဿ"},
to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"}
},
}
m["na"] = {
"Nauruan",
13307,
"poz-mic",
"Latn",
}
m["nb"] = {
"Norwegian Bokmål",
25167,
"gmq",
"Latn",
wikimedia_codes = "no",
ancestors = "gmq-mno, da", -- da as an (but not the) ancestor of nb was agreed on - do not change without discussion
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nd"] = {
"Northern Ndebele",
35613,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["ne"] = {
"Nepali",
33823,
"inc-pah",
"Deva, Newa",
translit = {
Deva = "ne-translit"
},
}
m["ng"] = {
"Ndonga",
33900,
"bnt-ova",
"Latn",
}
m["nl"] = {
"Dutch",
7411,
"gmw-frk",
"Latn, Brai",
ancestors = "dum",
sort_key = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"},
},
standard_chars = {
Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÄäËëÏïÖöÜü",
Brai = c.braille,
c.punc
},
}
m["nn"] = {
"Norwegian Nynorsk",
25164,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute,
},
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["no"] = {
"Norwegian",
9043,
"gmq-wes",
"Latn",
ancestors = "gmq-mno",
sort_key = s["no-sortkey"],
standard_chars = s["no-standardchars"],
}
m["nr"] = {
"Southern Ndebele",
36785,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["nv"] = {
"Navajo",
13310,
"apa",
"Latn, Brai",
sort_key = {
remove_diacritics = c.acute .. c.ogonek,
from = {
"chʼ", "tłʼ", "tsʼ", -- 3 chars
"ch", "dl", "dz", "gh", "hw", "kʼ", "kw", "sh", "tł", "ts", "zh", -- 2 chars
"ł", "ʼ" -- 1 char
},
to = {
"c" .. p[2], "t" .. p[2], "t" .. p[4],
"c" .. p[1], "d" .. p[1], "d" .. p[2], "g" .. p[1], "h" .. p[1], "k" .. p[1], "k" .. p[2], "s" .. p[1], "t" .. p[1], "t" .. p[3], "z" .. p[1],
"l" .. p[1], "z" .. p[2]
}
},
}
m["ny"] = {
"Chichewa",
33273,
"bnt-nys",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
sort_key = {
from = {"ng'"},
to = {"ng"}
},
}
m["oc"] = {
"Occitan",
14185,
"roa-ocr",
"Latn, Hebr",
ancestors = "pro",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla,
from = {"([lns])·h"},
to = {"%1h"}
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["oj"] = {
"Ojibwe",
33875,
"alg",
"Cans, Latn",
sort_key = {
Latn = {
from = {"aa", "ʼ", "ii", "oo", "sh", "zh"},
to = {"a" .. p[1], "h" .. p[1], "i" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]}
},
},
}
m["om"] = {
"Oromo",
33864,
"cus-eas",
"Latn, Ethi",
}
m["or"] = {
"Odia",
33810,
"inc-eas",
"Orya",
ancestors = "inc-mor",
translit = "or-translit",
}
m["os"] = {
"Ossetian",
33968,
"xsc-sar",
"Cyrl, Geor, Latn",
ancestors = "oos",
translit = {
Cyrl = "os-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {
Cyrl = {
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute,
from = {"æ"},
to = {"ӕ"}
},
Latn = {
from = {"ӕ"},
to = {"æ"}
},
},
sort_key = {
Cyrl = {
from = {"ӕ", "гъ", "дж", "дз", "ё", "къ", "пъ", "тъ", "хъ", "цъ", "чъ"},
to = {"а" .. p[1], "г" .. p[1], "д" .. p[1], "д" .. p[2], "е" .. p[1], "к" .. p[1], "п" .. p[1], "т" .. p[1], "х" .. p[1], "ц" .. p[1], "ч" .. p[1]}
},
},
}
m["pa"] = {
"Punjabi",
58635,
"inc-pan",
"Guru, pa-Arab",
translit = {
Guru = "Guru-translit",
["pa-Arab"] = "pa-Arab-translit",
},
strip_diacritics = {
["pa-Arab"] = {
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna,
from = {"ݨ", "ࣇ"},
to = {"ن", "ل"}
},
},
}
m["pi"] = {
"Pali",
36727,
"inc-mid",
"Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", --and also Khom
ancestors = "sa",
translit = {
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Beng = "pi-translit",
Sinh = "si-translit",
Mymr = "pi-translit",
Thai = "pi-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Khmr = "pi-translit",
Cakm = "Cakm-translit",
},
strip_diacritics = {
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
Mymr = {
remove_diacritics = c.VS01,
},
},
sort_key = { -- FIXME: This needs to be converted into the current standardized format.
from = {"ā", "ī", "ū", "ḍ", "ḷ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṭ", "ॐ", "([เโ])([ก-ฮ])", "([ເໂ])([ກ-ຮ])", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", u(0xFE00), u(0x200D)},
to = {"a~", "i~", "u~", "d~", "l~", "m~", "n~", "n~~", "n~~~", "t~", "ओँ", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"}
},
}
m["pl"] = {
"Polish",
809,
"zlw-lch",
"Latn",
ancestors = "zlw-mpl",
sort_key = {
from = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ź", "ż"},
to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1], "z" .. p[2]}
},
standard_chars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc,
}
m["ps"] = {
"Pashto",
58680,
"ira-pat",
"ps-Arab",
strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.zwarakay .. c.superalef},
}
m["pt"] = {
"Portuguese",
5146,
"roa-gap",
"Latn, Brai",
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla,
from = {"ª", "æ", "º", "œ"},
to = {"a", "ae", "o", "oe"}
},
},
standard_chars = {
Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz",
Brai = c.braille,
c.punc
},
}
m["qu"] = {
"Quechua",
5218,
"qwe",
"Latn",
}
m["rm"] = {
"Romansh",
13199,
"roa-rhe",
ancestors = "rm-old",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e},
}
m["ro"] = {
"Romanian",
7913,
"roa-eas",
"Latn, Cyrl, Cyrs",
translit = {
Cyrl = "ro-translit"
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute,
from = {"ă", "â", "î", "ș", "ț"},
to = {"a" .. p[1], "a" .. p[2], "i" .. p[1], "s" .. p[1], "t" .. p[1]}
},
Cyrl = {
from = {"ӂ"},
to = {"ж" .. p[1]}
},
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]; presumably not present
standard_chars = {
Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz",
Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя",
c.punc
},
}
m["ru"] = {
"Russian",
7737,
"zle",
"Cyrl, Brai",
ancestors = "zle-mru",
translit = {
Cyrl = "ru-translit"
},
display_text = {
Cyrl = {
from = {"'"},
to = {"’"}
},
},
strip_diacritics = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"},
from = {"’"},
to = {"'"},
},
},
sort_key = {
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
from = {
"і", "ѣ", "ѳ", "ѵ"
},
to = {
"и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3]
}
},
},
standard_chars = {
Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—",
Brai = c.braille,
(c.punc:gsub("'", "")) -- Exclude apostrophe.
},
}
m["rw"] = {
"Rwanda-Rundi",
3217514,
"bnt-glb",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron},
}
m["sa"] = {
"Sanskrit",
11059,
"inc",
"as-Beng, Bali, Beng, Bhks, Brah, Mymr, xwo-Mong, Deva, Gujr, Guru, Gran, Hani, Java, Kthi, Knda, Kawi, Khar, Khmr, Laoo, Mlym, mnc-Mong, Marc, Modi, Mong, Nand, Newa, Orya, Phag, Ranj, Saur, Shrd, Sidd, Sinh, Soyo, Lana, Takr, Taml, Tang, Telu, Thai, Tibt, Tutg, Tirh, Zanb", --and also Khom; script codes sorted by canonical name rather than code for [[MOD:sa-convert]]
translit = {
Beng = "sa-Beng-translit",
["as-Beng"] = "sa-Beng-translit",
-- Brah translit in [[Module:scripts/data]]
Deva = "sa-translit",
Gujr = "sa-Gujr-translit",
Guru = "sa-Guru-translit",
Java = "sa-Java-translit",
Kthi = "sa-Kthi-translit",
Khmr = "pi-translit",
Knda = "sa-Knda-translit",
Lana = "pi-translit",
Laoo = "pi-translit",
Mlym = "sa-Mlym-translit",
Modi = "sa-Modi-translit",
-- Mong, mnc-Mong, xwo-Mong translit in [[Module:scripts/data]]
-- NOTE: Formerly used xal-translit for transliterating xwo-Mong but that only handles Cyrillic; it has
-- code to transliterate xwo-Mong but it's broken so I've replaced it with the default xwo-translit.
Mymr = "pi-translit",
Orya = "sa-Orya-translit",
-- Shrd translit in [[Module:scripts/data]]
-- Sidd translit in [[Module:scripts/data]]
Sinh = "si-translit",
Taml = "sa-Taml-translit",
Telu = "sa-Telu-translit",
Thai = "pi-translit",
-- Tibt translit in [[Module:scripts/data]]
},
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
-- Tibt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Deva = s["sa-Deva-stripdiacritics"],
Mymr = {
remove_diacritics = c.VS01,
},
Thai = {
from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here.
to = {"ิํ", "ฐ", "ญ"}
},
},
sort_key = {
Deva = s["sa-Deva-stripdiacritics"], -- until we have a proper Sanskrit sorting algorithm.
Lana = { -- Tai Tham
from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"},
to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"},
},
Laoo = "Laoo-sortkey",
Latn = {
from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"},
to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"},
},
Mymr = {
remove_diacritics = c.VS01,
},
Thai = "Thai-sortkey",
-- FIXME: The previous sort key which mixed all scripts removed ZWJ; I don't know which script(s) this was
-- intended for and there are no other languages which remove it in the sort key AFAIK. If it needs to be
-- removed, specify the script(s) it needs to be removed under or add handling for the "all" script that applies
-- regardless of script.
--all = {
-- remove_diacritics = c.ZWJ,
--},
},
}
m["sc"] = {
"Sardinian",
33976,
"roa-sou",
"Latn",
ancestors = "sc-old",
}
m["sd"] = {
"Sindhi",
33997,
"inc-snd",
"sd-Arab, Deva, Sind, Khoj",
translit = {
Sind = "Sind-translit",
["sd-Arab"] = "sd-Arab-translit"
},
strip_diacritics = {
["sd-Arab"] = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {"ٱ"},
to = {"ا"}
},
},
}
m["se"] = {
"Northern Sami",
33947,
"smi",
"Latn",
display_text = {
from = {"'"},
to = {"ˈ"}
},
strip_diacritics = {remove_diacritics = c.macron .. c.dotbelow .. "'ˈ"},
sort_key = {
from = {"á", "č", "đ", "ŋ", "š", "ŧ", "ž"},
to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "n" .. p[1], "s" .. p[1], "t" .. p[1], "z" .. p[1]}
},
standard_chars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc,
}
m["sg"] = {
"Sango",
33954,
"crp",
"Latn",
ancestors = "ngb",
}
m["sh"] = {
"Serbo-Croatian",
9301,
"zls",
"Latn, Cyrl, Glag, Arab",
ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1
wikimedia_codes = "sh, bs, hr, sr",
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"Ć", "ć", "Ś", "ś", "Ź", "ź"}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"З́", "з́", "С́", "с́"}
},
},
sort_key = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"ć", "ś", "ź"},
from = {"č", "ć", "dž", "đ", "lj", "nj", "š", "ś", "ž", "ź"},
to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "z" .. p[1], "z" .. p[2]}
},
Cyrl = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {"з́", "с́"},
from = {"ђ", "з́", "ј", "љ", "њ", "с́", "ћ", "џ"},
to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "с" .. p[1], "т" .. p[1], "ч" .. p[1]}
},
},
standard_chars = {
Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž",
Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш",
c.punc
},
}
m["si"] = {
"Sinhalese",
13267,
"inc-ins",
"Sinh",
translit = "si-translit",
override_translit = true,
}
m["sk"] = {
"Slovak",
9058,
"zlw",
"Latn",
ancestors = "zlw-osk",
sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer .. c.caron},
standard_chars = "AaÁáÄäBbCcČčDdĎďEeÉéFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc,
}
m["sl"] = {
"Slovene",
9063,
"zls",
"Latn",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dgrave .. c.invbreve .. c.dotbelow,
remove_exceptions = {"Ć", "ć", "Ǵ", "ǵ", "Ś", "ś", "Ź", "ź"},
from = {"Ə", "ə", "Ł", "ł"},
to = {"E", "e", "L", "l"},
},
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dotabove .. c.ringabove .. c.dgrave .. c.invbreve .. c.dotbelow .. c.ringbelow .. c.ogonek,
remove_exceptions = {"ć", "ǵ", "ś", "ź"},
from = {"ä", "č", "ć", "đ", "ə", "ë", "ǧ", "ǵ", "ï", "ł", "ö", "š", "ś", "ü", "ž", "ź"},
to = {"a" .. p[1], "c" .. p[1], "c" .. p[2], "d" .. p[1], "e", "e" .. p[1], "g" .. p[1], "g" .. p[2], "i" .. p[1], "l", "o" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]},
},
standard_chars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc,
}
m["sm"] = {
"Samoan",
34011,
"poz-pnp",
"Latn",
}
m["sn"] = {
"Shona",
34004,
"bnt-sho",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
}
m["so"] = {
"Somali",
13275,
"cus-som",
"Latn, Arab, Osma",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
}
m["sq"] = {
"Albanian",
8748,
"sqj",
"Latn, Grek, ota-Arab, Elba, Todr, Vith",
translit = {
Elba = "Elba-translit",
Vith = "Vith-translit",
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron,
from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'},
},
},
sort_key = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron .. c.tilde .. c.breve .. c.caron,
from = {'^[ie] (%w)', '^të (%w)', 'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'},
to = {'%1', '%1', 'c'..p[1], 'd'..p[1], 'e'..p[1], 'g'..p[1], 'l'..p[1], 'n'..p[1], 'r'..p[1], 's'..p[1], 't'..p[1], 'x'..p[1], 'z'..p[1]},
}
-- TODO: Grek if the default sort key is unsuitable
},
standard_chars = {
Latn = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz",
c.punc
},
}
m["ss"] = {
"Swazi",
34014,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["st"] = {
"Sotho",
34340,
"bnt-sts",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["su"] = {
"Sundanese",
34002,
"poz-msa",
"Latn, Sund, Arab",
ancestors = "osn",
translit = {
Sund = "Sund-translit"
},
}
m["sv"] = {
"Swedish",
9027,
"gmq-eas",
"Latn",
ancestors = "gmq-osw-lat",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla .. "':",
remove_exceptions = {"å"},
from = {"ø", "æ", "œ", "ß", "å", "aͤ", "oͤ"},
to = {"ö", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"}
},
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc,
}
m["sw"] = {
"Swahili",
7838,
"bnt-swh",
"Latn, Arab",
sort_key = {
Latn = {
from = {"ng'"},
to = {"ng" .. p[1]}
},
},
}
m["ta"] = {
"Tamil",
5885,
"dra-tam",
"Taml",
ancestors = "ta-mid",
translit = "ta-translit",
override_translit = true,
}
m["te"] = {
"Telugu",
8097,
"dra-tel",
"Telu",
translit = "te-translit",
override_translit = true,
}
m["tg"] = {
"Tajik",
9260,
"ira-swi",
"Cyrl, fa-Arab, Latn",
ancestors = "fa-cls",
translit = {
Cyrl = "tg-translit"
},
override_translit = true,
strip_diacritics = {
Cyrl = s["tg-stripdiacritics"],
Latn = s["tg-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]}
},
},
}
m["th"] = {
"Thai",
9217,
"tai-swe",
"Thai, Khomt, Brai",
translit = {
Thai = "th-translit"
},
sort_key = {
Thai = "Thai-sortkey"
},
}
m["ti"] = {
"Tigrinya",
34124,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["tk"] = {
"Turkmen",
9267,
"trk-ogz",
"Latn, Cyrl, Arab",
strip_diacritics = {
Latn = s["tk-stripdiacritics"],
Cyrl = s["tk-stripdiacritics"],
},
sort_key = {
Latn = {
from = {"ç", "ä", "ž", "ň", "ö", "ş", "ü", "ý"},
to = {"c" .. p[1], "e" .. p[1], "j" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "y" .. p[1]}
},
Cyrl = {
from = {"ё", "җ", "ң", "ө", "ү", "ә"},
to = {"е" .. p[1], "ж" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "э" .. p[1]}
},
},
ancestors = "trk-eog",
}
m["tl"] = {
"Tagalog",
34057,
"phi",
"Latn, Tglg",
translit = {
Tglg = "tl-translit"
},
override_translit = true,
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey",
},
}
m["tn"] = {
"Tswana",
34137,
"bnt-sts",
"Latn",
}
m["to"] = {
"Tongan",
34094,
"poz-ton",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
sort_key = {remove_diacritics = c.macron},
}
m["tr"] = {
"Turkish",
256,
"trk-ogz",
"Latn",
ancestors = "ota",
dotted_dotless_i = true,
sort_key = {
from = {
-- Ignore circumflex, but account for capital Î wrongly becoming ı + circ due to dotted dotless I logic.
"ı" .. c.circ, c.circ,
"i", -- Ensure "i" comes after "ı".
"ç", "ğ", "ı", "ö", "ş", "ü"
},
to = {
"i", "",
"i" .. p[1],
"c" .. p[1], "g" .. p[1], "i", "o" .. p[1], "s" .. p[1], "u" .. p[1]
}
},
standard_chars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc,
}
m["ts"] = {
"Tsonga",
34327,
"bnt-tsr",
"Latn",
}
m["tt"] = {
"Tatar",
25285,
"trk-kbu",
"Cyrl, Latn, tt-Arab",
translit = {
Cyrl = "tt-translit",
["tt-Arab"] = "tt-translit"
},
--override_translit = true, -- enable override until Module code can detect Russian loans such as [[аэропорт]]
dotted_dotless_i = true,
sort_key = {
Cyrl = {
from = {"ә", "ў", "ғ", "ё", "җ", "қ", "ң", "ө", "ү", "һ"},
to = {"а" .. p[1], "в" .. p[1], "г" .. p[1], "е" .. p[1], "ж" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]}
},
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ä", "ə", "ç", "ğ", "ı", "ñ", "ŋ", "ö", "ɵ", "ş", "ü"
},
to = {
"i" .. p[1],
"a" .. p[1], "a" .. p[2], "c" .. p[1], "g" .. p[1], "i", "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "s" .. p[1], "u" .. p[1]
}
},
},
}
-- "tw" is treated as "ak", see [[WT:LT]]
m["ty"] = {
"Tahitian",
34128,
"poz-pep",
"Latn",
}
m["ug"] = {
"Uyghur",
13263,
"trk-kar",
"ug-Arab, Latn, Cyrl",
ancestors = "chg",
translit = {
["ug-Arab"] = "ug-translit",
Cyrl = "ug-translit",
},
override_translit = true,
}
m["uk"] = {
"Ukrainian",
8798,
"zle",
"Cyrl",
ancestors = "zle-muk",
translit = "uk-translit",
strip_diacritics = {remove_diacritics = c.grave .. c.acute},
sort_key = {
remove_diacritics = c.grave .. c.acute,
from = {
"ї", -- 2 chars
"ґ", "є", "і" -- 1 char
},
to = {
"и" .. p[2],
"г" .. p[1], "е" .. p[1], "и" .. p[1]
}
},
standard_chars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe.
}
m["ur"] = {
"Urdu",
1617,
"inc-hnd",
"ur-Arab, Hebr",
translit = {
["ur-Arab"] = "ur-translit"
},
strip_diacritics = {
["ur-Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
["ur-Arab"] = "ایببپتثجچحخدذرزژسشصضطظعغفقکگلࣇڷمنݨوؤہھئٹڈڑآے",
c.punc,
},
}
m["uz"] = {
"Uzbek",
9264,
"trk-kar",
"Latn, Cyrl, fa-Arab",
ancestors = "chg",
translit = {
Cyrl = "uz-translit"
},
sort_key = {
Latn = {
from = {"oʻ", "gʻ", "sh", "ch", "ng"},
to = {"z" .. p[1], "z" .. p[2], "z" .. p[3], "z" .. p[4], "z" .. p[5]}
},
Cyrl = {
from = {"ё", "ў", "қ", "ғ", "ҳ"},
to = {"е" .. p[1], "я" .. p[1], "я" .. p[2], "я" .. p[3], "я" .. p[4]}
},
},
strip_diacritics = {
["fa-Arab"] = "ar-stripdiacritics",
},
}
m["ve"] = {
"Venda",
32704,
"bnt-bso",
"Latn",
}
m["vi"] = {
"Vietnamese",
9199,
"mkh-vie",
"Latn, Hani",
ancestors = "mkh-mvi",
sort_key = {
Latn = "vi-sortkey",
Hani = "Hani-sortkey",
},
}
m["vo"] = {
"Volapük",
36986,
"art",
"Latn",
}
m["wa"] = {
"Walloon",
34219,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["wo"] = {
"Wolof",
34257,
"alv-fwo",
"Latn, Arab, Gara",
}
m["xh"] = {
"Xhosa",
13218,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
m["yi"] = {
"Yiddish",
8641,
"gmw-hgm",
"Hebr, Latn",
ancestors = "gmh",
translit = {
Hebr = "yi-translit",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["yo"] = {
"Yoruba",
34311,
"alv-yor",
"Latn, Arab",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.macron}
},
sort_key = {
Latn = {
from = {"ẹ", "ɛ", "gb", "ị", "kp", "ọ", "ɔ", "ṣ", "sh", "ụ"},
to = {"e" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "o" .. p[1], "o" .. p[1], "s" .. p[1], "s" .. p[1], "u" .. p[1]}
},
},
}
m["za"] = {
"Zhuang",
13216,
"tai",
"Latn, Hani",
sort_key = {
Latn = "za-sortkey",
Hani = "Hani-sortkey",
},
}
m["zh"] = {
"Chinese",
7850,
"zhx",
"Hants, Latn, Bopo, Nshu, Brai",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = {
Hani = "zh-translit",
Bopo = "zh-translit",
},
sort_key = {
Hani = "Hani-sortkey"
},
}
m["zu"] = {
"Zulu",
10179,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
}
return require("Module:languages").finalizeData(m, "language")
jem3l3uspyysn9tc4wixw8s2y41q9lq
Mòideal:languages/data/3/a
828
16717
86207
2026-07-21T21:52:32Z
Altronic
4137
Copy from English Wiktionary
86207
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["aaa"] = {
"Ghotuo",
35463,
"alv-yek",
"Latn",
}
m["aab"] = {
"Alumu-Tesu",
35034,
"nic-alu",
"Latn",
}
m["aac"] = {
"Ari",
1811224,
"ngf-gsu",
"Latn",
}
m["aad"] = {
"Amal",
56708,
"paa-sep",
"Latn",
}
-- "aae" is treated as "sq", see [[WT:LT]]
m["aaf"] = {
"Aranadan",
3507928,
"dra-mal",
"Mlym",
-- Mlym translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["aag"] = {
"Ambrak",
4741706,
"paa-pal",
"Latn",
}
m["aah"] = {
"Abu'",
4670715,
"paa-ara",
"Latn",
}
m["aai"] = {
"Arifama-Miniafia",
4790560,
"poz-ocw",
"Latn",
}
m["aak"] = {
"Ankave",
3446690,
"ngf-ata",
"Latn",
}
m["aal"] = {
"Afade",
56434,
"cdc-cbm",
"Latn",
}
m["aan"] = {
"Anambé",
3507873,
"tup-gua",
"Latn",
}
m["aap"] = {
"Arára (Pará)",
56807,
"sai-pek",
"Latn",
}
m["aaq"] = {
"Penobscot",
3515185,
"alg-abp",
"Latn",
}
m["aas"] = {
"Aasax",
56620,
"cus-sou",
"Latn",
}
-- "aat" is treated as "sq", see [[WT:LT]]
m["aau"] = {
"Abau",
3073568,
"paa-sep",
"Latn",
}
m["aaw"] = {
"Solong",
7558834,
"poz-ocw",
"Latn",
}
m["aax"] = {
"Upper Mandobo",
12636156,
"ngf-dum",
"Latn",
}
m["aaz"] = {
"Amarasi",
4740192,
"poz-tim",
"Latn",
}
m["aba"] = {
"Abé",
34833,
"alv-lag",
"Latn",
}
m["abb"] = {
"Bankon",
34860,
"bnt-bsa",
"Latn",
}
m["abc"] = {
"Ambala Ayta",
3448896,
"phi",
"Latn",
}
m["abd"] = {
"Camarines Norte Agta",
3399682,
"phi",
"Latn",
}
m["abe"] = {
"Abenaki",
17502788,
"alg-abp",
"Latn",
}
m["abf"] = {
"Abai Sungai",
4663287,
"poz-san",
"Latn",
}
m["abg"] = {
"Abaga",
3507954,
"ngf-kya",
"Latn",
}
m["abh"] = {
"Tajiki Arabic",
56833,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["abi"] = {
"Abidji",
34781,
"alv-lag",
"Latn",
}
m["abj"] = {
"Aka-Bea",
2356391,
"qfa-ads",
"Latn",
}
m["abl"] = {
"Abung",
49215,
"poz-lgx",
"Latn",
}
m["abm"] = {
"Abanyom",
7502,
"nic-eko",
"Latn",
}
m["abn"] = {
"Abua",
34835,
"nic-cde",
"Latn",
}
m["abo"] = {
"Abon",
35121,
"nic-tvn",
"Latn",
}
m["abp"] = {
"Abenlen Ayta",
3436621,
"phi",
"Latn",
}
m["abq"] = {
"Abaza",
27567,
"cau-abz",
"Cyrl, Latn",
translit = {
Cyrl = "abq-translit"
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"гъв", "гъь", "гӏв", "джв", "джь", "къв", "къь", "кӏв", "кӏь", "хъв", "хӏв", "чӏв", -- 3 chars
"гв", "гъ", "гь", "гӏ", "дж", "дз", "ё", "жв", "жь", "кв", "къ", "кь", "кӏ", "ль", "лӏ", "пӏ", "тл", "тш", "тӏ", "фӏ", "хв", "хъ", "хь", "хӏ", "цӏ", "чв", "чӏ", "шв", "шӏ" -- 2 chars
},
to = {
"г" .. p[3], "г" .. p[4], "г" .. p[7], "д" .. p[2], "д" .. p[3], "к" .. p[3], "к" .. p[4], "к" .. p[7], "к" .. p[8], "х" .. p[3], "х" .. p[6], "ч" .. p[3],
"г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "д" .. p[1], "д" .. p[4], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "к" .. p[1], "к" .. p[2], "к" .. p[5], "к" .. p[6], "л" .. p[1], "л" .. p[2], "п" .. p[1], "т" .. p[1], "т" .. p[2], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[4], "х" .. p[5], "ц" .. p[1], "ч" .. p[1], "ч" .. p[2], "ш" .. p[1], "ш" .. p[2]
}
},
},
}
-- "abr" Abron is treated as "ak" Akan, see [[WT:LT]]
m["abs"] = {
"Ambonese Malay",
3124354,
"crp",
"Latn",
ancestors = "ms",
}
m["abt"] = {
"Ambulas",
3508015,
"paa-nnd",
"Latn",
}
m["abu"] = {
"Abure",
34767,
"alv-ptn",
"Latn",
}
m["abv"] = {
"Baharna Arabic",
56576,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["abw"] = {
"Pal",
7126121,
"ngf-omo",
"Latn",
}
m["abx"] = {
"Inabaknon",
2820163,
"poz-sbj",
"Latn",
}
m["aby"] = {
"Aneme Wake",
3508107,
"ngf-yar",
"Latn",
}
m["abz"] = {
"Abui",
2822110,
"paa-alp",
"Latn",
}
m["aca"] = {
"Achagua",
2822982,
"awd",
"Latn",
}
m["acb"] = {
"Áncá",
11130787,
"nic-mom",
"Latn",
}
m["acd"] = {
"Gikyode",
35256,
"alv-gng",
"Latn",
}
m["ace"] = {
"Acehnese",
27683,
"cmc",
"Latn, ms-Arab",
standard_chars = {
Latn = "AaBbCcDdEeÉéÈèËëFfGgHhIiJjKkLlMmNnOoÔôÖöPpQqRrSsTtUuVvWwXxYyZz", -- current orthography (not yet add Arab)
c.punc
},
}
m["ach"] = {
"Acholi",
34926,
"sdv-los",
"Latn",
}
m["aci"] = {
"Aka-Cari",
2670418,
"qfa-adn",
"Latn",
}
m["ack"] = {
"Aka-Kora",
3433680,
"qfa-adn",
"Latn",
}
m["acl"] = {
"Akar-Bale",
3436825,
"qfa-ads",
"Latn",
}
m["acm"] = {
"Iraqi Arabic",
56232,
"sem-arb",
"Arab, Hebr",
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["acn"] = {
"Achang",
56582,
"tbq-brm",
"Latn",
}
m["acp"] = {
"Eastern Acipa",
5329945,
"nic-kmk",
"Latn",
}
m["acr"] = {
"Achi",
34774,
"myn",
"Latn",
}
m["acs"] = {
"Acroá",
2829146,
"sai-cje",
"Latn",
}
m["acu"] = {
"Achuar",
2823170,
"sai-jiv",
"Latn",
}
m["acv"] = {
"Achumawi",
56661,
"nai-pal",
"Latn",
}
m["acw"] = {
"Hijazi Arabic",
56608,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["acx"] = {
"Omani Arabic",
56630,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["acy"] = {
"Cypriot Arabic",
56416,
"sem-arb",
"Latn, Grek",
ancestors = "acm",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.breve},
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Latn = "AaBbCcDdΔδEeFfGgĠġĊċIiJjKkLlMmNnOoPpΘθRrSsTtUuVvWwXxYyZzŞş",
c.punc
},
}
m["acz"] = {
"Acheron",
34769,
"alv-tal",
"Latn",
}
m["ada"] = {
"Adangme",
35141,
"alv-gda",
"Latn",
}
m["adb"] = {
"Atauran",
125421255,
"poz-cet",
"Latn",
}
m["add"] = {
"Dzodinka",
35266,
"nic-nka",
"Latn",
}
m["ade"] = {
"Adele",
27740,
"alv-ntg",
"Latn",
}
m["adf"] = {
"Dhofari Arabic",
56565,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["adg"] = {
"Andegerebinha",
3508123,
"aus-rnd",
"Latn",
}
m["adh"] = {
"Adhola",
1971400,
"sdv-los",
"Latn",
}
m["adi"] = {
"Adi",
56440,
"sit-tan",
"Latn",
}
m["adj"] = {
"Adioukrou",
34738,
"alv-lag",
"Latn",
}
m["adl"] = {
"Galo",
2857892,
"sit-tan",
"Latn",
}
m["adn"] = {
"Adang",
3398276,
"paa-alp",
"Latn",
}
m["ado"] = {
"Abu",
56659,
"paa-por",
"Latn",
}
m["adp"] = {
"Adap",
3512402,
"sit-tib",
"Tibt",
ancestors = "dz",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["adq"] = {
"Adangbe",
34730,
"alv-gda",
"Latn",
ancestors = "ada",
}
m["adr"] = {
"Adonara",
4684505,
"poz-cet",
"Latn",
}
m["ads"] = {
"Adamorobe Sign Language",
27709,
"sgn",
"Latn", -- when documented
}
m["adt"] = {
"Adnyamathanha",
2225391,
"aus-psw",
"Latn",
}
m["adu"] = {
"Aduge",
34734,
"alv-nwd",
"Latn",
ancestors = "opa",
}
m["adw"] = {
"Amondawa",
12626847,
"tup-gua",
"Latn",
}
m["ady"] = {
"West Circassian",
27776,
"cau-cir",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "cau-cir-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"кхъу", "къӏу", -- 4 chars
"гъу", "джу", "дзу", "жъу", "къу", "кхъ", "къӏ", "кӏу", "кӏь", "лъу", "лӏу", "пӏу", "сӏу", "тӏу", "фӏу", "хъу", "цӏу", "чъу", "чӏу", "шъу", "шӏу", "щӏу", -- 3 chars
"гу", "гъ", "гь", "дж", "дз", "ё", "жъ", "жь", "ку", "къ", "кь", "кӏ", "лъ", "ль", "лӏ", "пӏ", "сӏ", "тӏ", "фӏ", "ху", "хъ", "хь", "цу", "цӏ", "чу", "чъ", "чӏ", "шъ", "шӏ", "щӏ", "ӏу", "ӏь" -- 2 chars
},
to = {
"к" .. p[5], "к" .. p[7],
"г" .. p[3], "д" .. p[2], "д" .. p[4], "ж" .. p[2], "к" .. p[3], "к" .. p[4], "к" .. p[6], "к" .. p[10], "к" .. p[11], "л" .. p[2], "л" .. p[5], "п" .. p[2], "с" .. p[2], "т" .. p[2], "ф" .. p[2], "х" .. p[3], "ц" .. p[3], "ч" .. p[3], "ч" .. p[5], "ш" .. p[2], "ш" .. p[4], "щ" .. p[2],
"г" .. p[1], "г" .. p[2], "г" .. p[4], "д" .. p[1], "д" .. p[3], "е" .. p[1], "ж" .. p[1], "ж" .. p[3], "к" .. p[1], "к" .. p[2], "к" .. p[8], "к" .. p[9], "л" .. p[1], "л" .. p[3], "л" .. p[4], "п" .. p[1], "с" .. p[1], "т" .. p[1], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[4], "ц" .. p[1], "ц" .. p[2], "ч" .. p[1], "ч" .. p[2], "ч" .. p[4], "ш" .. p[1], "ш" .. p[3], "щ" .. p[1], "ӏ" .. p[1], "ӏ" .. p[2]
}
},
},
}
m["adz"] = {
"Adzera",
3327445,
"poz-ocw",
"Latn",
}
m["aea"] = {
"Areba",
3509129,
"aus-pam",
"Latn",
}
m["aeb"] = {
"Tunisian Arabic",
56240,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["aed"] = {
"Argentine Sign Language",
3322073,
"sgn",
"Latn", -- when documented
}
m["aee"] = {
"Northeast Pashayi",
12642198,
"inc-pas",
"fa-Arab, Latn",
}
m["aek"] = {
"Haeke",
5638166,
"poz-cln",
"Latn",
}
m["ael"] = {
"Ambele",
34818,
"nic-grf",
"Latn",
}
m["aem"] = {
"Arem",
3507920,
"mkh-vie",
"Latn",
}
m["aen"] = {
"Armenian Sign Language",
3446604,
"sgn",
}
m["aeq"] = {
"Aer",
3246741,
"inc-wes",
"Arab",
}
m["aer"] = {
"Eastern Arrernte",
10728232,
"aus-rnd",
"Latn",
}
m["aes"] = {
"Alsea",
2395641,
nil,
"Latn",
}
m["aeu"] = {
"Akeu",
4700657,
"tbq-sil",
"Latn",
}
m["aew"] = {
"Ambakich",
56642,
"paa-eke",
"Latn",
}
m["aey"] = {
"Amele",
3508025,
"ngf-gum",
"Latn",
}
m["aez"] = {
"Aeka",
16110528,
"ngf-oro",
"Latn",
}
m["afb"] = {
"Gulf Arabic",
56385,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["afd"] = {
"Andai",
4753480,
"paa-arf",
"Latn",
}
m["afe"] = {
"Putukwam",
3914930,
"nic-ben",
"Latn",
}
m["afg"] = {
"Afghan Sign Language",
4689093,
"sgn",
}
m["afh"] = {
"Afrihili",
384707,
"art",
"Latn",
type = "appendix-constructed",
}
m["afi"] = {
"Akrukay",
57003,
"paa-tam",
"Latn",
}
m["afk"] = {
"Nanubae",
6964416,
"paa-arf",
"Latn",
}
m["afn"] = {
"Defaka",
35174,
"nic",
"Latn",
}
m["afo"] = {
"Eloyi",
3914066,
"nic-plt",
"Latn",
}
m["afp"] = {
"Tapei",
16887371,
"paa-arf",
"Latn",
}
m["afs"] = {
"Afro-Seminole Creole",
27867,
"crp",
"Latn",
ancestors = "en",
}
m["aft"] = {
"Afitti",
3400829,
"sdv-nyi",
"Latn",
}
m["afu"] = {
"Awutu",
34847,
"alv-gng",
"Latn",
}
m["afz"] = {
"Obokuitai",
7075258,
"paa-clp",
"Latn",
}
m["aga"] = {
"Aguano",
3331203,
nil,
"Latn",
}
m["agb"] = {
"Legbo",
35584,
"nic-uce",
"Latn",
}
m["agc"] = {
"Agatu",
34732,
"alv-ido",
"Latn",
}
m["agd"] = {
"Agarabi",
3399642,
"ngf-gau",
"Latn",
}
m["age"] = {
"Angal",
10951553,
"ngf-ank",
"Latn",
}
m["agf"] = {
"Arguni",
12473346,
"poz-cet",
"Latn",
}
m["agg"] = {
"Angor",
3508100,
"paa-sng",
"Latn",
}
m["agh"] = {
"Ngelima",
7022266,
"bnt-bta",
"Latn",
}
m["agi"] = {
"Agariya",
663586,
"mun",
"Deva",
}
m["agj"] = {
"Argobba",
29292,
"sem-eth",
"Ethi",
}
m["agk"] = {
"Isarog Agta",
6078982,
"phi",
"Latn",
}
m["agl"] = {
"Fembe",
372927,
"ngf-est",
"Latn",
}
m["agm"] = {
"Angaataha",
3508001,
"ngf-ang",
"Latn",
}
m["agn"] = {
"Agutaynen",
3399717,
"phi-kal",
"Latn",
}
m["ago"] = {
"Tainae",
7676186,
"ngf-taa",
"Latn",
}
m["agq"] = {
"Aghem",
34737,
"nic-rnw",
"Latn",
}
m["agr"] = {
"Aguaruna",
1526530,
"sai-jiv",
"Latn",
}
m["ags"] = {
"Esimbi",
35260,
"nic-bds",
"Latn",
}
m["agt"] = {
"Central Cagayan Agta",
5017296,
"phi",
"Latn",
}
m["agu"] = {
"Aguacateca",
35091,
"myn",
"Latn",
}
m["agv"] = {
"Remontado Agta",
3508085,
"phi",
"Latn",
}
m["agw"] = {
"Kahua",
3191906,
"poz-sls",
"Latn",
}
m["agx"] = {
"Aghul",
36498,
"cau-esm",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = s["cau-Cyrl-displaytext"],
strip_diacritics = s["cau-Cyrl-stripdiacritics"],
sort_key = {
from = {"аь", "гъ", "гь", "гӏ", "дж", "ё", "къ", "кь", "кӏ", "оь", "пӏ", "тӏ", "уь", "хъ", "хь", "хӏ", "цӏ", "чӏ"},
to = {"а" .. p[1], "г" .. p[1], "г" .. p[2], "г" .. p[3], "д" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "ц" .. p[1], "ч" .. p[1]}
},
}
m["agy"] = {
"Southern Alta",
7569611,
"phi",
"Latn",
}
m["agz"] = {
"Mount Iriga Agta",
6921432,
"phi",
"Latn",
}
m["aha"] = {
"Ahanta",
34729,
"alv-ctn",
"Latn",
}
m["ahb"] = {
"Axamb",
2874710,
"poz-vnc",
"Latn",
}
m["ahg"] = {
"Qimant",
35663,
"cus-cen",
"Latn",
}
m["ahh"] = {
"Aghu",
3436645,
"ngf-awy",
"Latn",
}
m["ahi"] = {
"Tiagba",
3400073,
"kro-aiz",
"Latn",
}
m["ahk"] = {
"Akha",
56643,
"tbq-han",
"Latn, Mymr, Thai",
sort_key = {
Thai = {
from = {"[%pๆ]", "[็-๎]", "([เแโใไ])([ก-ฮ])"},
to = {"", "", "%2%1"}
},
},
}
m["ahl"] = {
"Igo",
35412,
"alv-ktg",
"Latn",
}
m["ahm"] = {
"Mobu",
35967,
"kro-aiz",
"Latn",
}
m["ahn"] = {
"Àhàn",
34723,
"alv-aah",
"Latn",
}
m["aho"] = {
"Ahom",
34778,
"tai-swe",
"Ahom",
translit = "Ahom-translit",
}
m["ahp"] = {
"Apro",
34810,
"alv-kwa",
"Latn",
}
m["ahr"] = {
"Ahirani",
15549890,
"raj",
"Deva",
translit = "mr-translit",
}
m["ahs"] = {
"Ashe",
34823,
"nic-plc",
"Latn",
}
m["aht"] = {
"Ahtna",
21058,
"ath-nor",
"Latn",
}
m["aia"] = {
"Arosi",
2863483,
"poz-sls",
"Latn",
}
m["aib"] = {
"Äynu",
27927,
"qfa-mix",
"Arab, Latn",
ancestors = "ug, fa"
}
m["aic"] = {
"Ainbai",
3332149,
"paa-bew",
"Latn",
}
m["aid"] = {
"Alngith",
3279409,
"aus-pmn",
"Latn",
}
m["aie"] = {
"Amara",
2841180,
"poz-ocw",
"Latn",
}
m["aif"] = {
"Agi",
3331491,
"paa-wpa",
"Latn",
}
m["aig"] = {
"Antigua and Barbuda Creole English",
3244184,
"crp",
"Latn",
ancestors = "en",
}
m["aih"] = {
"Ai-Cham",
2827749,
"qfa-kms",
"Latn, Hani",
sort_key = {
Hani = "Hani-sortkey"
},
}
m["aii"] = {
"Assyrian Neo-Aramaic",
29440,
"sem-nna",
"Syrc",
translit = "aii-translit",
strip_diacritics = "Syrc-stripdiacritics",
}
m["aij"] = {
"Lishanid Noshan",
3436467,
"sem-nna",
"Hebr",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["aik"] = {
"Ake",
34808,
"nic-pls",
"Latn",
}
m["ail"] = {
"Aimele",
3327418,
"ngf-bos",
"Latn",
}
m["aim"] = {
"Aimol",
4697175,
"tbq-kuk",
"Latn, Beng",
}
m["ain"] = {
"Ainu",
27969,
"qfa-ain",
"Kana, Latn, Cyrl",
sort_key = {
Kana = "Kana-sortkey"
},
}
m["aio"] = {
"Aiton",
3399725,
"tai-swe",
"Mymr",
translit = "aio-phk-translit",
display_text = s["aio-displaytext"],
strip_diacritics = s["aio-stripdiacritics"],
}
m["aip"] = {
"Burumakok",
5000984,
"ngf-wok",
"Latn",
}
m["air"] = {
"Airoran",
3321131,
"paa-saa",
"Latn",
}
m["ait"] = {
"Arikem",
3446679,
"tup",
"Latn",
}
m["aiw"] = {
"Aari",
7495,
"omv-aro",
"Latn",
}
m["aix"] = {
"Aighon",
3504287,
"poz-ocw",
"Latn",
}
m["aiy"] = {
"Ali",
34814,
"gba-eas",
"Latn",
}
m["aja"] = {
"Aja (East Africa)",
3237491,
"csu-bkr",
"Latn",
}
m["ajg"] = {
"Aja (West Africa)",
35035,
"alv-gbe",
"Latn",
}
m["aji"] = {
"Ajië",
2828867,
"poz-cln",
"Latn",
}
m["ajn"] = {
"Andajin",
16111302,
"aus-wor",
"Latn",
}
m["ajp"] = {
"South Levantine Arabic",
55633582,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["ajw"] = {
"Ajawa",
56645,
"cdc-wst",
"Latn",
}
m["ajz"] = {
"Amri Karbi",
3508092,
"tbq-kuk",
"Latn",
ancestors = "mjw",
}
m["akb"] = {
"Angkola Batak",
2640686,
"btk",
"Latn, Batk",
}
m["akc"] = {
"Mpur",
3327139,
"qfa-iso", -- Papuan; based on Palmer (2018), Ethnologue and Glottolog
"Latn",
}
m["akd"] = {
"Ukpet-Ehom",
36618,
"nic-ucr",
"Latn",
}
m["ake"] = {
"Akawaio",
28059,
"sai-pem",
"Latn",
}
m["akf"] = {
"Akpa",
34801,
"alv-ido",
"Latn",
}
m["akg"] = {
"Anakalangu",
4750964,
"poz-cet",
"Latn",
}
m["akh"] = {
"Angal Heneng",
10950354,
"ngf-ank",
"Latn",
}
m["aki"] = {
"Aiome",
56735,
"paa-aia",
"Latn",
}
m["akj"] = {
"Jeru",
2919121,
"qfa-adn",
"Latn, Deva",
}
m["akk"] = {
"Akkadian",
35518,
"sem-eas",
"Xsux, Latn",
}
m["akl"] = {
"Aklanon",
8773,
"phi",
"Latn",
}
m["akm"] = {
"Aka-Bo",
35361,
"qfa-adn",
"Latn",
}
m["ako"] = {
"Akurio",
56650,
"sai-tar",
"Latn",
}
m["akp"] = {
"Siwu",
36470,
"alv-ntg",
"Latn",
}
m["akq"] = {
"Ak",
56654,
"paa-sep",
"Latn",
}
m["akr"] = {
"Araki",
2699882,
"poz-vnn",
"Latn",
}
m["aks"] = {
"Akaselem",
34817,
"nic-grm",
"Latn",
}
m["akt"] = {
"Akolet",
3330162,
"poz-ocw",
"Latn",
}
m["aku"] = {
"Akum",
34799,
"nic-ykb",
"Latn",
}
m["akv"] = {
"Akhvakh",
56423,
"cau-and",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = s["cau-Cyrl-displaytext"],
strip_diacritics = s["cau-Cyrl-stripdiacritics"],
}
m["akw"] = {
"Akwa",
34802,
"bnt-mbo",
"Latn",
}
m["akx"] = {
"Aka-Kede",
3436816,
"qfa-adc",
"Latn",
}
m["aky"] = {
"Aka-Kol",
3436784,
"qfa-adc",
"Latn",
}
m["akz"] = {
"Alabama",
1815020,
"nai-mus",
"Latn",
}
m["ala"] = {
"Alago",
34813,
"alv-ido",
"Latn",
}
m["alc"] = {
"Kawésqar",
56544,
"aqa",
"Latn",
}
m["ald"] = {
"Alladian",
34837,
"alv-lag",
"Latn",
}
m["ale"] = {
"Aleut",
27210,
"esx",
"Latn, Cyrl",
}
m["alf"] = {
"Alege",
34815,
"nic-ben",
"Latn",
}
m["alh"] = {
"Alawa",
2147917,
"aus-gun",
"Latn",
}
m["ali"] = {
"Amaimon",
3327427,
"ngf-mad",
"Latn",
}
m["alj"] = {
"Alangan",
3327423,
"phi",
"Latn",
}
m["alk"] = {
"Alak",
2714690,
"mkh",
"Latn",
}
m["all"] = {
"Allar",
3393634,
"dra-mal",
"Mlym",
-- Mlym translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
-- "aln" is treated as "sq", see [[WT:LT]]
m["alm"] = {
"Amblong",
11022615,
"poz-vnn",
"Latn",
}
m["alo"] = {
"Larike-Wakasihu",
3217929,
"poz-cma",
"Latn",
}
m["alp"] = {
"Alune",
3327367,
"poz-cet",
"Latn",
}
m["alq"] = {
"Algonquin",
28092,
"alg",
"Latn, Cans",
ancestors = "oj",
}
m["alr"] = {
"Alutor",
28213,
"qfa-ckn",
"Cyrl",
strip_diacritics = {
from = {"['’]"},
to = {"ʼ"}
},
sort_key = {
from = {"вʼ", "гʼ", "ғ", "ә", "ё", "ӄ", "ӈ"},
to = {"в" .. p[1], "г" .. p[1], "г" .. p[2], "е" .. p[1], "е" .. p[2], "к" .. p[1], "н" .. p[1]}
},
}
m["alt"] = {
"Southern Altai",
1991779,
"trk-kkp",
"Cyrl",
translit = "Altai-translit",
sort_key = {
from = {"ј", "ё", "ҥ", "ӧ", "ӱ"},
to = {"д" .. p[1], "е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
},
}
m["alu"] = {
"'Are'are",
5160,
"poz-sls",
"Latn",
}
m["alw"] = {
"Alaba",
56652,
"cus-hec",
"Latn",
}
m["alx"] = {
"Amol",
3504260,
"paa-pal",
"Latn",
}
m["aly"] = {
"Alyawarr",
3327389,
"aus-rnd",
"Latn",
}
m["alz"] = {
"Alur",
56507,
"sdv-los",
"Latn",
}
m["ama"] = {
"Amanayé",
3508053,
"tup-gua",
"Latn",
}
m["amb"] = {
"Ambo",
3450142,
"nic-tvn",
"Latn",
}
m["amc"] = {
"Amahuaca",
2669150,
"sai-pan",
"Latn",
}
m["ame"] = {
"Yanesha'",
3088540,
"awd",
"Latn",
}
m["amf"] = {
"Hamer-Banna",
35764,
"omv-aro",
"Latn, Ethi",
sort_key = "amf-utilities"
}
m["amg"] = {
"Amurdag",
3360016,
"aus-wdj",
"Latn",
}
m["ami"] = {
"Amis",
35132,
"map",
"Latn",
}
m["amj"] = {
"Amdang",
28335,
"ssa-fur",
"Latn",
}
m["amk"] = {
"Ambai",
1875885,
"poz-hce",
"Latn",
}
m["aml"] = {
"War-Jaintia",
56321,
"aav-khs",
"Latn",
}
m["amm"] = {
"Ama",
3446626,
"paa-lma",
"Latn",
}
m["amn"] = {
"Amanab",
3327399,
"paa-war",
"Latn",
}
m["amo"] = {
"Amo",
34826,
"nic-kne",
"Latn",
}
m["amp"] = {
"Alamblak",
56688,
"paa-sep",
"Latn",
}
m["amq"] = {
"Amahai",
3327384,
"poz-cma",
"Latn",
}
m["amr"] = {
"Amarakaeri",
35128,
"sai-har",
"Latn",
}
m["ams"] = {
"Southern Amami Ōshima",
2840986,
"jpx-nry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["amt"] = {
"Amto",
56517,
"paa-amu",
"Latn",
}
m["amu"] = {
"Guerrero Amuzgo",
3501942,
"omq",
"Latn",
}
m["amv"] = {
"Ambelau",
2669214,
"poz-cma",
"Latn",
}
m["amw"] = {
"Western Neo-Aramaic",
34226,
"sem-arw",
"Armi, Syrc, Latn",
strip_diacritics = {
Syrc = "Syrc-stripdiacritics"
},
}
m["amx"] = {
"Anmatyerre",
10412317,
"aus-rnd",
"Latn",
}
m["amy"] = {
"Ami",
10408315,
"aus-dal",
"Latn",
}
m["amz"] = {
"Atampaya",
3446651,
"aus-pam",
"Latn",
}
m["ana"] = {
"Andaqui",
2846078,
nil,
"Latn",
}
m["anb"] = {
"Andoa",
2846171,
"sai-zap",
"Latn",
}
m["anc"] = {
"Ngas",
35999,
"cdc-wst",
"Latn",
}
m["and"] = {
"Ansus",
3513300,
"poz-hce",
"Latn",
}
m["ane"] = {
"Xârâcùù",
3571097,
"poz-cln",
"Latn",
}
m["anf"] = {
"Animere",
34783,
"alv-ktg",
"Latn",
}
m["ang"] = {
"Old English",
42365,
"gmw-ang",
"Latn, Runr",
translit = {
Runr = "Runr-translit"
},
strip_diacritics = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron .. c.breve .. c.dotabove .. c.diaer .. c.dotbelow,
from = {"[Ƿƿ]"},
to = {{
["Ƿ"] = "W", ["ƿ"] = "w",
}},
},
},
sort_key = {
Latn = {
remove_diacritics = c.acute .. c.circ .. c.macron .. c.breve .. c.dotabove .. c.diaer .. c.dotbelow,
from = {"[æƀꝺðꝼᵹȝłœꞃꞅꞇþꝥꝧƿ]"},
to = {{
["æ"] = "ae", ["ƀ"] = "b", ["ꝺ"] = "d", ["ð"] = "d" .. p[1], ["ꝼ"] = "f",
["ᵹ"] = "g", ["ȝ"] = "g" .. p[1], ["ł"] = "l", ["œ"] = "oe", ["ꞃ"] = "r",
["ꞅ"] = "s", ["ꞇ"] = "t", ["þ"] = "t" .. p[1], ["ꝥ"] = "t" .. p[1],
["ꝧ"] = "t" .. p[1], ["ƿ"] = "w",
}},
},
},
standard_chars = {
Latn = "AaÆæBbCcDdÐðEeFfGgHhIiLlMmNnOoŒœPpRrSsTtÞþUuWwXxYy",
c.punc,
},
}
m["anh"] = {
"Nend",
6991554,
"ngf-wso",
"Latn",
}
m["ani"] = {
"Andi",
34849,
"cau-and",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = s["cau-Cyrl-displaytext"],
strip_diacritics = s["cau-Cyrl-stripdiacritics"],
}
m["anj"] = {
"Anor",
56458,
"paa-aia",
"Latn",
}
m["ank"] = {
"Goemai",
35272,
"cdc-wst",
"Latn",
}
m["anl"] = {
"Anu",
4777679,
"sit-mru",
"Latn",
}
m["anm"] = {
"Anāl",
56235,
"tbq-kuk",
"Latn",
}
m["ann"] = {
"Obolo",
36614,
"nic-lcr",
"Latn",
}
m["ano"] = {
"Andoque",
2669225,
"qfa-iso",
"Latn",
}
m["anp"] = {
"Angika",
28378,
"inc-bih",
"Deva, Kthi",
translit = {
Deva = "hi-translit",
Kthi = "bho-Kthi-translit",
},
}
m["anq"] = {
"Jarawa",
2475526,
"qfa-ong",
"Latn",
}
m["anr"] = {
"Andh",
4754314,
"inc-sou",
"Deva",
}
m["ans"] = {
"Anserma",
3446613,
"sai-chc",
"Latn",
}
m["ant"] = {
"Antakarinya",
921304,
"aus-psw",
"Latn",
}
m["anu"] = {
"Anuak",
56677,
"sdv-lon",
"Latn",
}
m["anv"] = {
"Denya",
35187,
"nic-mam",
"Latn",
}
m["anw"] = {
"Anaang",
2845320,
"nic-ief",
"Latn",
}
m["anx"] = {
"Andra-Hus",
2846195,
"poz-aay",
"Latn",
}
m["any"] = {
"Anyi",
28395,
"alv-ctn",
"Latn",
}
m["anz"] = {
"Anem",
56512,
"qfa-dis", -- Papuan; might be an isolate or in a putative West New Britain family
"Latn",
}
m["aoa"] = {
"Angolar",
34994,
"crp",
"Latn",
ancestors = "pt",
}
m["aob"] = {
"Abom",
3446647,
"qfa-dis", -- Papuan; possibly a divergent Tirio language (Anim family), or a top-level TNG node
"Latn",
}
m["aoc"] = {
"Pemon",
10729616,
"sai-pem",
"Latn",
}
m["aod"] = {
"Andarum",
3507888,
"paa-ata",
"Latn",
}
m["aoe"] = {
"Angal Enen",
10951638,
"ngf-ank",
"Latn",
}
m["aof"] = {
"Bragat",
3507977,
"paa-pal",
"Latn",
}
m["aog"] = {
"Angoram",
56366, -- cf 6754745 for merged dialect
"paa-lse",
"Latn",
}
m["aoi"] = {
"Anindilyakwa",
2714654,
"aus-arn",
"Latn",
}
m["aoj"] = {
"Mufian",
3507881,
"paa-ara",
"Latn",
}
m["aok"] = {
"Arhö",
4790086,
"poz-cln",
"Latn",
}
m["aol"] = {
"Alorese",
3332062,
"poz",
"Latn",
}
m["aom"] = {
"Ömie",
8078975,
"ngf-koi",
"Latn",
}
m["aon"] = {
"Bumbita Arapesh",
3508044,
"paa-ara",
"Latn",
}
m["aor"] = {
"Aore",
12627129,
"poz-vnn",
"Latn",
}
m["aos"] = {
"Taikat",
7676018,
"paa-taa",
"Latn",
}
m["aot"] = {
"Atong (India)",
5646,
"tbq-bdg",
"Latn, Beng",
}
m["aou"] = {
"A'ou",
16109994,
"gio",
"Latn", -- also Hani?
}
m["aox"] = {
"Atorada",
3507932,
"awd",
"Latn",
}
m["aoz"] = {
"Uab Meto",
3441962,
"poz-tim",
"Latn",
}
m["apb"] = {
"Sa'a",
36294,
"poz-sls",
"Latn",
}
m["apc"] = {
"North Levantine Arabic",
22809485,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["apd"] = {
"Sudanese Arabic",
56573,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["ape"] = {
"Bukiyip",
3507895,
"paa-ara",
"Latn",
}
m["apf"] = {
"Pahanan Agta",
7135432,
"phi",
"Latn",
}
m["apg"] = {
"Ampanang",
4748035,
"poz",
"Latn",
}
m["aph"] = {
"Athpare",
3449126,
"sit-kie",
"Deva, Latn",
}
m["api"] = {
"Apiaká",
3507941,
"tup-gua",
"Latn",
}
m["apj"] = {
"Jicarilla",
28277,
"apa",
"Latn",
}
m["apk"] = {
"Plains Apache",
27861,
"apa",
"Latn",
}
m["apl"] = {
"Lipan",
28269,
"apa",
"Latn",
}
m["apm"] = {
"Chiricahua",
13368,
"apa",
"Latn",
}
m["apn"] = {
"Apinayé",
2858311,
"sai-nje",
"Latn",
}
m["apo"] = {
"Ambul",
12627135,
"poz-ocw",
"Latn",
}
m["app"] = {
"Apma",
2669188,
"poz-vnn",
"Latn",
}
m["apq"] = {
"A-Pucikwar",
28466,
"qfa-adc",
"Latn",
}
m["apr"] = {
"Arop-Lokep",
2863482,
"poz-ocw",
"Latn",
}
m["aps"] = {
"Arop-Sissano",
12627242,
"poz-ocw",
"Latn",
}
m["apt"] = {
"Apatani",
56306,
"sit-tan",
"Latn",
}
m["apu"] = {
"Apurinã",
2859081,
"awd",
"Latn",
}
m["apv"] = {
"Alapmunte",
16110782,
"sai-nmk",
"Latn",
}
m["apw"] = {
"Western Apache",
28060,
"apa",
"Latn",
}
m["apx"] = {
"Aputai",
12473343,
"poz-tim",
"Latn",
}
m["apy"] = {
"Apalaí",
2736980,
"sai-gui",
"Latn",
}
m["apz"] = {
"Safeyoka",
7398693,
"ngf-woj",
"Latn",
}
m["aqc"] = {
"Archi",
34915,
"cau-lzg",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = s["cau-Cyrl-displaytext"],
strip_diacritics = s["cau-Cyrl-stripdiacritics"],
sort_key = {
from = {
"ккъӏв", "ххьӏв", -- 5 chars
"гъӏв", "ёоӏ", "ккъӏ", "ккъв", "къӏв", "ллъв", "ххьӏ", "хъӏв", "хьӏв", "ццӏв", "ччӏв", -- 4 chars
"ааӏ", "гӏв", "гъӏ", "гъв", "гьв", "ееӏ", "ёӏ", "ёо", "ииӏ", "кӏв", "ккв", "ккъ", "къӏ", "къв", "кьв", "лӏв", "ллъ", "лъв", "льв", "ооӏ", "пӏв", "ппв", "ссв", "тӏв", "ттв", "ууӏ", "хӏв", "ххв", "хъӏ", "хъв", "хьӏ", "цӏв", "ццӏ", "ццв", "чӏв", "ччӏ", "ээӏ", "юуӏ", "яаӏ", -- 3 chars
"аӏ", "аа", "гӏ", "гв", "гъ", "гь", "дв", "еӏ", "ее", "ё", "жв", "зв", "иӏ", "ии", "кӏ", "кв", "кк", "къ", "кь", "лӏ", "лв", "лъ", "ль", "оӏ", "оо", "пӏ", "пв", "пп", "св", "сс", "тӏ", "тв", "тт", "уӏ", "уу", "фв", "хӏ", "хв", "хх", "хъ", "цӏ", "цв", "цц", "чӏ", "чв", "шв", "щв", "эӏ", "ээ", "юӏ", "юу", "яӏ", "яа" -- 2 chars
},
to = {
"к" .. p[8], "х" .. p[7],
"г" .. p[6], "е" .. p[7], "к" .. p[7], "к" .. p[9], "к" .. p[12], "л" .. p[5], "х" .. p[6], "х" .. p[10], "х" .. p[13], "ц" .. p[6], "ч" .. p[5],
"а" .. p[3], "г" .. p[2], "г" .. p[5], "г" .. p[7], "г" .. p[9], "е" .. p[3], "е" .. p[5], "е" .. p[6], "и" .. p[3], "к" .. p[2], "к" .. p[5], "к" .. p[6], "к" .. p[11], "к" .. p[13], "к" .. p[15], "л" .. p[2], "л" .. p[4], "л" .. p[7], "л" .. p[9], "о" .. p[3], "п" .. p[2], "п" .. p[5], "с" .. p[3], "т" .. p[2], "т" .. p[5], "у" .. p[3], "х" .. p[2], "х" .. p[5], "х" .. p[9], "х" .. p[11], "х" .. p[12], "ц" .. p[2], "ц" .. p[5], "ц" .. p[7], "ч" .. p[2], "ч" .. p[4], "э" .. p[3], "ю" .. p[3], "я" .. p[3],
"а" .. p[1], "а" .. p[2], "г" .. p[1], "г" .. p[3], "г" .. p[4], "г" .. p[8], "д" .. p[1], "е" .. p[1], "е" .. p[2], "е" .. p[4], "ж" .. p[1], "з" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "к" .. p[3], "к" .. p[4], "к" .. p[10], "к" .. p[14], "л" .. p[1], "л" .. p[3], "л" .. p[6], "л" .. p[8], "о" .. p[1], "о" .. p[2], "п" .. p[1], "п" .. p[3], "п" .. p[4], "с" .. p[1], "с" .. p[2], "т" .. p[1], "т" .. p[3], "т" .. p[4], "у" .. p[1], "у" .. p[2], "ф" .. p[1], "х" .. p[1], "х" .. p[3], "х" .. p[4], "х" .. p[8], "ц" .. p[1], "ц" .. p[3], "ц" .. p[4], "ч" .. p[1], "ч" .. p[3], "ш" .. p[1], "щ" .. p[1], "э" .. p[1], "э" .. p[2], "ю" .. p[1], "ю" .. p[2], "я" .. p[1], "я" .. p[2]
}
},
}
m["aqd"] = {
"Ampari Dogon",
4748057,
"nic-dgw",
"Latn",
}
m["aqg"] = {
"Arigidi",
34829,
"alv-von",
"Latn",
}
m["aqm"] = {
"Atohwaim",
11732297,
"paa-kay",
"Latn",
}
m["aqn"] = {
"Northern Alta",
7058116,
"phi",
"Latn",
}
m["aqp"] = {
"Atakapa",
10975683,
"qfa-iso",
"Latn",
}
m["aqr"] = {
"Arhâ",
4790085,
"poz-cln",
"Latn",
}
m["aqt"] = {
"Angaité",
15736037,
"sai-mas",
"Latn",
}
m["aqz"] = {
"Akuntsu",
4701960,
"tup",
"Latn",
}
m["arc"] = {
"Aramaic",
28602,
"sem-ara",
"Hebr, Armi, Syrc, Palm, Nbat, Phnx, Mand, Samr, Hatr, Elym",
translit = {
Armi = "Armi-translit",
Palm = "Palm-translit",
},
strip_diacritics = {
-- The first three were added by [[User:Wikitiki89]] in 2015 for use with Syriac, which has diacritics that look
-- like a diaeresis (syāmē) and macrons above and below (mṭalqānā); see Wikipedia [[w:Syriac alphabet]]. But
-- I don't know if they are actually represented using these diacritics.
Syrc = {remove_diacritics = c.macron .. c.diaer .. c.macronbelow .. u(0x0730) .. "-" .. u(0x0748)},
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- Samr strip_diacritics, sort_key in [[Module:scripts/data]]; previously no sort_key for Samr, presumably a mistake
-- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["ard"] = {
"Arabana",
3507959,
"aus-kar",
"Latn",
}
m["are"] = {
"Western Arrernte",
12645549,
"aus-rnd",
"Latn",
}
m["arh"] = {
"Arhuaco",
2640621,
"cba",
"Latn",
}
m["ari"] = {
"Arikara",
56539,
"cdd",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
}
m["arj"] = {
"Arapaso",
9627356,
"sai-tuc",
"Latn",
}
m["ark"] = {
"Arikapú",
3446640,
"sai-mje",
"Latn",
}
m["arl"] = {
"Arabela",
2591221,
"sai-zap",
"Latn",
}
m["arn"] = {
"Mapudungun",
33730,
"sai-ara",
"Latn",
}
m["aro"] = {
"Araona",
958414,
"sai-tac",
"Latn",
}
m["arp"] = {
"Arapaho",
56417,
"alg-ara",
"Latn",
}
m["arq"] = {
"Algerian Arabic",
56499,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["arr"] = {
"Arara-Karo",
35539,
"tup",
"Latn",
}
m["ars"] = {
"Najdi Arabic",
56574,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["aru"] = {
"Arua",
2746221,
"auf",
"Latn",
}
m["arv"] = {
"Arbore",
56883,
"cus-eas",
"Latn",
}
m["arw"] = {
"Lokono",
2655664,
"awd-taa",
"Latn",
}
m["arx"] = {
"Aruá",
3507907,
"tup",
"Latn",
}
m["ary"] = {
"Moroccan Arabic",
56426,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["arz"] = {
"Egyptian Arabic",
29919,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["asa"] = {
"Pare",
36403,
"bnt-par",
"Latn",
}
m["asb"] = {
"Assiniboine",
2591288,
"sio-dkt",
"Latn",
}
m["asc"] = {
"Casuarina Coast Asmat",
11732046,
"ngf-asm",
"Latn",
}
m["ase"] = {
"American Sign Language",
14759,
"sgn",
"Sgnw",
}
m["asf"] = {
"Auslan",
29525,
"sgn",
"Latn", -- when documented
}
m["asg"] = {
"Cishingini",
35199,
"nic-kam",
"Latn",
}
m["ash"] = {
"Abishira",
2871740,
"qfa-dis", -- extinct, poorly documented; isolate or in a proposed Tequiraca-Canichana family by Kaufman (1994)
"Latn",
}
m["asi"] = {
"Buruwai",
5001031,
"ngf-sab",
"Latn",
}
m["asj"] = {
"Nsari",
36418,
"nic-bbe",
"Latn",
}
m["ask"] = {
"Ashkun",
29379,
"nur-sou",
"Arab, Latn",
}
m["asl"] = {
"Asilulu",
12473347,
"poz-cma",
"Latn",
}
m["asn"] = {
"Xingú Asuriní",
8044571,
"tup-gua",
"Latn",
}
m["aso"] = {
"Dano",
5220979,
"ngf-gah",
"Latn",
}
m["asp"] = {
"Algerian Sign Language",
3135421,
"sgn",
}
m["asq"] = {
"Austrian Sign Language",
36668,
"sgn",
"Latn", -- when documented
}
m["asr"] = {
"Asuri",
3504321,
"mun",
"Latn", -- when documented
}
m["ass"] = {
"Ipulo",
35408,
"nic-tvc",
"Latn",
}
m["ast"] = {
"Asturian",
29507,
"roa-asl",
"Latn",
}
m["asu"] = {
"Tocantins Asurini",
32041490,
"tup-gua",
"Latn",
}
m["asv"] = {
"Asoa",
56296,
"csu-maa",
"Latn",
}
m["asw"] = {
"Australian Aboriginal Sign Language",
955216,
"sgn",
"Latn", -- when documented
}
m["asx"] = {
"Muratayak",
11732766,
"ngf-war",
"Latn",
}
m["asy"] = {
"Yaosakor Asmat",
16113158,
"ngf-asm",
"Latn",
}
m["asz"] = {
"As",
2866218,
"poz-hce",
"Latn",
}
m["ata"] = {
"Pele-Ata",
56511,
"qfa-dis", -- Papuan; possibly in a putative West New Britain family, or an isolate
"Latn",
}
m["atb"] = {
"Zaiwa",
56594,
"tbq-brm",
"Latn, Lisu", -- also Hani?
-- Lisu translit, sort_key in [[Module:scripts/data]]
}
m["atc"] = {
"Atsahuaca",
4817730,
"sai-pan",
"Latn",
}
m["atd"] = {
"Ata Manobo",
12627315,
"mno",
"Latn",
}
m["ate"] = {
"Atemble",
4813055,
"ngf-wso",
"Latn",
}
m["atg"] = {
"Okpela",
7082551,
"alv-yek",
"Latn",
}
m["ati"] = {
"Attié",
34844,
"alv-lag",
"Latn",
}
m["atj"] = {
"Atikamekw",
56590,
"alg",
"Latn",
ancestors = "cr",
}
m["atk"] = {
"Ati",
3217458,
"phi",
"Latn",
}
m["atl"] = {
"Mount Iraya Agta",
6921430,
"phi",
"Latn",
}
m["atm"] = {
"Ata",
4812603,
"phi",
"Latn",
}
m["ato"] = {
"Atong (Cameroon)",
34824,
"nic-grs",
"Latn",
}
m["atp"] = {
"Pudtol Atta",
12640726,
"phi",
"Latn",
}
m["atq"] = {
"Aralle-Tabulahan",
4783889,
"poz-ssw",
"Latn",
}
m["atr"] = {
"Waimiri-Atroari",
56865,
"sai-car",
"Latn",
}
m["ats"] = {
"Gros Ventre",
56628,
"alg-ara",
"Latn",
}
m["att"] = {
"Pamplona Atta",
12639245,
"phi",
"Latn",
}
m["atu"] = {
"Reel",
7306882,
"sdv-dnu",
"Latn",
}
m["atv"] = {
"Northern Altai",
2640863,
"trk-ssb",
"Cyrl",
translit = "Altai-translit",
}
m["atw"] = {
"Atsugewi",
56718,
"nai-pal",
"Latn",
}
m["atx"] = {
"Arutani",
56609,
nil,
"Latn",
}
m["aty"] = {
"Aneityum",
2379113,
"poz-vns",
"Latn",
}
m["atz"] = {
"Arta",
3508067,
"phi",
"Latn",
}
m["aua"] = {
"Asumboa",
4811870,
"poz-tem",
"Latn",
}
m["aub"] = {
"Alugu",
12626798,
"tbq-urp",
"Latn", -- also Hani?
}
m["auc"] = {
"Huaorani",
758570,
"qfa-iso",
"Latn",
}
m["aud"] = {
"Anuta",
35326,
"poz-pnp",
"Latn",
}
m["aug"] = {
"Aguna",
34733,
"alv-gbe",
"Latn",
}
m["auh"] = {
"Aushi",
2872082,
"bnt-sbi",
"Latn",
}
m["aui"] = {
"Anuki",
3508132,
"poz-ocw",
"Latn",
}
m["auj"] = {
"Awjila",
56398,
"ber",
"Latn, Arab, Tfng",
}
m["auk"] = {
"Heyo",
3504295,
"paa-hya",
"Latn",
}
m["aul"] = {
"Aulua",
427300,
"poz-vnc",
"Latn",
}
m["aum"] = {
"Asu",
34798,
"alv-ngb",
"Latn",
}
m["aun"] = {
"Molmo One",
12637224,
"paa-trr",
"Latn",
}
m["auo"] = {
"Auyokawa",
56247,
"cdc-wst",
"Latn",
}
m["aup"] = {
"Makayam",
6738863,
"paa-tir",
"Latn",
}
m["auq"] = {
"Anus",
23855,
"poz-ocw",
"Latn",
}
m["aur"] = {
"Aruek",
3504279,
"paa-kom",
"Latn",
}
m["aut"] = {
"Austral",
2669261,
"poz-pep",
"Latn",
}
m["auu"] = {
"Auye",
4827334,
"ngf-pan",
"Latn",
}
m["auw"] = {
"Awyi",
3513326,
"paa-taa",
"Latn",
}
m["aux"] = {
"Aurá",
3507995,
"tup-gua",
"Latn",
}
m["auy"] = {
"Auyana",
2873211,
"ngf-gau",
"Latn",
}
m["auz"] = {
"Uzbeki Arabic",
3399507,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["avb"] = {
"Avau",
12627412,
"poz-ocw",
"Latn",
}
m["avd"] = {
"Alviri-Vidari",
3327357,
"xme",
"fa-Arab",
ancestors = "xme-mid",
}
m["avi"] = {
"Avikam",
34840,
"alv-lag",
"Latn",
}
m["avk"] = {
"Kotava",
1377116,
"art",
"Latn",
type = "appendix-constructed",
}
m["avm"] = {
"Angkamuthi",
62603022,
"aus-pmn",
"Latn",
}
m["avn"] = {
"Avatime",
34796,
"alv-ktg",
"Latn",
}
m["avo"] = {
"Agavotaguerra",
3508007,
"awd",
"Latn",
}
m["avs"] = {
"Aushiri",
3409318,
"sai-zap",
"Latn",
}
m["avt"] = {
"Au",
3446608,
"paa-wap",
"Latn",
}
m["avu"] = {
"Avokaya",
56685,
"csu-mma",
"Latn",
}
m["avv"] = {
"Avá-Canoeiro",
4829584,
"tup-gua",
"Latn",
}
m["awa"] = {
"Awadhi",
29579,
"inc-hie",
"Deva, Kthi, fa-Arab",
ancestors = "inc-oaw",
translit = {
Deva = "hi-translit"
},
}
m["awb"] = {
"Awa (New Guinea)",
2874650,
"ngf-gau",
"Latn",
}
m["awc"] = {
"Cicipu",
35193,
"nic-kam",
"Latn",
}
m["awe"] = {
"Awetí",
4830038,
"tup",
"Latn",
}
m["awg"] = {
"Anguthimri",
4764288,
"aus-pam",
"Latn",
}
m["awh"] = {
"Awbono",
3446684,
"paa-baa",
"Latn",
}
m["awi"] = {
"Aekyom",
3399691,
"paa-kae",
"Latn",
}
m["awk"] = {
"Awabakal",
3449138,
"aus-pam",
"Latn",
}
m["awm"] = {
"Arawum",
4784537,
"ngf-rai",
"Latn",
}
m["awn"] = {
"Awngi",
34934,
"cus-cen",
"Ethi",
}
m["awo"] = {
"Awak",
3446643,
"alv-wjk",
"Latn",
}
m["awr"] = {
"Awera",
56379,
"paa-flp",
"Latn",
}
m["aws"] = {
"South Awyu",
12633986,
"ngf-awy",
"Latn",
}
m["awt"] = {
"Araweté",
4784535,
"tup-gua",
"Latn",
}
m["awu"] = {
"Central Awyu",
12628801,
"ngf-awy",
"Latn",
}
m["awv"] = {
"Jair Awyu",
16110177,
"ngf-awy",
"Latn",
}
m["aww"] = {
"Awun",
56369,
"paa-sep",
"Latn",
}
m["awx"] = {
"Awara",
2874670,
"ngf-waa",
"Latn",
}
m["awy"] = {
"Edera Awyu",
12630425,
"ngf-awy",
"Latn",
}
m["axb"] = {
"Abipón",
11252539,
"sai-guc",
"Latn",
}
m["axe"] = {
"Ayerrerenge",
16112737,
"aus-pam",
"Latn",
}
m["axg"] = {
"Arára (Mato Grosso)",
3446660,
nil,
"Latn",
}
m["axk"] = {
"Aka (Central Africa)",
11010149,
"bnt-ngn",
"Latn",
}
m["axl"] = {
"Lower Southern Aranda",
6693295,
"aus-rnd",
"Latn",
}
m["axm"] = {
"Middle Armenian",
4438498,
"hyx",
"Armn",
ancestors = "xcl",
-- Armn translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
remove_diacritics = "՞՜՛՟",
from = {"եւ", "ՙ", "՚"},
to = {"և", "ʻ", "’"}
}
}
m["axx"] = {
"Xârâgurè",
8045635,
"poz-cln",
"Latn",
}
m["aya"] = {
"Awar",
56876,
"paa-baw",
"Latn",
}
m["ayb"] = {
"Ayizo",
34841,
"alv-pph",
"Latn",
}
m["ayd"] = {
"Ayabadhu",
3509164,
"aus-pmn",
"Latn",
}
m["aye"] = {
"Ayere",
34788,
"alv-aah",
"Latn",
}
m["ayg"] = {
"Nyanga (Togo)",
35446,
"alv-gng",
"Latn",
}
m["ayi"] = {
"Leyigha",
3914492,
"nic-uce",
"Latn",
}
m["ayk"] = {
"Akuku",
3450179,
"alv-nwd",
"Latn",
}
m["ayl"] = {
"Libyan Arabic",
56503,
"sem-arb",
"Arab",
strip_diacritics = "ar-stripdiacritics",
}
m["ayn"] = {
"Yemeni Arabic",
1686766,
"sem-arb",
"Arab, Hebr",
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ayo"] = {
"Ayoreo",
56634,
"sai-zam",
"Latn",
}
m["ayp"] = {
"North Mesopotamian Arabic",
56577,
"sem-arb",
"Arab",
ancestors = "acm",
strip_diacritics = "ar-stripdiacritics",
}
m["ayq"] = {
"Ayi",
56449,
"paa-sep",
"Latn",
}
m["ays"] = {
"Sorsogon Ayta",
7563752,
"phi",
"Latn",
}
m["ayt"] = {
"Bataan Ayta",
4921648,
"phi",
"Latn",
}
m["ayu"] = {
"Ayu",
34786,
"alv",
"Latn",
}
-- ayy deleted and removed from ISO; per the removal request, "no linguistic data exists for any [Ayta] language that the
-- ancestors of this group might have once spoken. And thus, there is no evidence that this group ever had a language
-- distinct from any other Philippine language." [Lobel]
m["ayz"] = {
"Maybrat",
4830892,
"paa-may",
-- either an isolate; grouped with Abun and the West Bird's Head family; or in the putative West Papuan family
"Latn",
}
m["aza"] = {
"Azha",
4832486,
"tbq-axi",
"Latn",
}
m["azd"] = {
"Eastern Durango Nahuatl",
16115449,
"azc-dur",
"Latn",
}
m["azg"] = {
"San Pedro Amuzgos Amuzgo",
35092,
"omq",
"Latn",
}
m["azm"] = {
"Ipalapa Amuzgo",
12633013,
"omq",
"Latn",
}
m["azn"] = {
"Western Durango Nahuatl",
12645553,
"azc-dur",
"Latn",
}
m["azo"] = {
"Awing",
34856,
"nic-nge",
"Latn",
}
m["azt"] = {
"Faire Atta",
12630884,
"phi",
"Latn",
}
m["azz"] = {
"Highland Puebla Nahuatl",
12953754,
"azc-nah",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
6k1bl22owtt9y8hsqig0niyedn4q89h
Teamplaid:Documentation
10
16718
86212
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation]] gu [[Teamplaid:documentation]]
86212
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation]]
758h9ed88k4xms3wca3goqb9i4cdn9q
Teamplaid:Documentation/Metapage
10
16719
86214
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/Metapage]] gu [[Teamplaid:documentation/Metapage]]
86214
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/Metapage]]
togey19zi1mu10nmtuiblymp89jzpt4
Teamplaid:Documentation/color scheme
10
16720
86216
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/color scheme]] gu [[Teamplaid:documentation/color scheme]]
86216
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/color scheme]]
90dki7y0vv29khrs8ibmey1tlk5irzw
Teamplaid:Documentation/color scheme for statistics
10
16721
86218
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/color scheme for statistics]] gu [[Teamplaid:documentation/color scheme for statistics]]
86218
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/color scheme for statistics]]
ed9m56kxymc2wqxagjfnput3cdzp330
Teamplaid:Documentation/core
10
16722
86220
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/core]] gu [[Teamplaid:documentation/core]]
86220
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/core]]
ddu4qpjmcafk6f8gar0vw4xsxshgo6l
Teamplaid:Documentation/data box
10
16723
86222
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/data box]] gu [[Teamplaid:documentation/data box]]
86222
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/data box]]
ke568a6171uhh806glp56x3eoh43xks
Teamplaid:Documentation/data box2
10
16724
86224
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/data box2]] gu [[Teamplaid:documentation/data box2]]
86224
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/data box2]]
olyme6xmg2igh20ummaafeaucbyuhfx
Teamplaid:Documentation/docname
10
16725
86226
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/docname]] gu [[Teamplaid:documentation/docname]]
86226
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/docname]]
sqaabtsgjznqpde0iyubfn1moao62hz
Teamplaid:Documentation/docspace
10
16726
86228
2026-07-21T22:12:34Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/docspace]] gu [[Teamplaid:documentation/docspace]]
86228
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/docspace]]
pj6h5fmg0opwopwna1dr4a2or0is1bb
Teamplaid:Documentation/documentation
10
16727
86230
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/documentation]] gu [[Teamplaid:documentation/documentation]]
86230
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/documentation]]
s36eyiv8qb98pg30fdq7bih5ydrffnh
Teamplaid:Documentation/end box
10
16728
86232
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/end box]] gu [[Teamplaid:documentation/end box]]
86232
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/end box]]
ar1nhiesasl4iu8efzgp7tgs4zqlq2w
Teamplaid:Documentation/end box2
10
16729
86234
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/end box2]] gu [[Teamplaid:documentation/end box2]]
86234
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/end box2]]
2z06qv6k4clanige5jx88jj8t4e98ku
Teamplaid:Documentation/link box
10
16730
86236
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/link box]] gu [[Teamplaid:documentation/link box]]
86236
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/link box]]
58duj8e5huu1wla6u16ywlaubcu3b55
Teamplaid:Documentation/mirror
10
16731
86238
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/mirror]] gu [[Teamplaid:documentation/mirror]]
86238
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/mirror]]
j9j3h3eck3vk79aewlymb27hi6fxaak
Teamplaid:Documentation/preload
10
16732
86240
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/preload]] gu [[Teamplaid:documentation/preload]]
86240
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/preload]]
czwexy0ntcqe6jf82brtv7o2934bz98
Teamplaid:Documentation/start box
10
16733
86242
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/start box]] gu [[Teamplaid:documentation/start box]]
86242
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/start box]]
4kd0vso0lo7gnv0q93ynm2rrpn08s3a
Teamplaid:Documentation/start box2
10
16734
86244
2026-07-21T22:12:35Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/start box2]] gu [[Teamplaid:documentation/start box2]]
86244
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/start box2]]
o7rmmsnr387q5ieqib2bglxi5u1ztml
Teamplaid:Documentation/template page
10
16735
86246
2026-07-21T22:12:36Z
Altronic
4137
Ghluais Altronic duilleag [[Teamplaid:Documentation/template page]] gu [[Teamplaid:documentation/template page]]
86246
wikitext
text/x-wiki
#REDIRECT [[Teamplaid:documentation/template page]]
m4t0l6sbzk7ukwe51fhsnowee2nk9rh
Mòideal:pron qualifier
828
16736
86251
2026-07-22T01:52:04Z
Altronic
4137
Copy from English Wiktionary
86251
Scribunto
text/plain
-- TODO: this module is now used for more than just pronunciations and should be renamed.
local export = {}
local labels_module = "Module:labels"
local qualifier_module = "Module:qualifier"
local references_module = "Module:references"
local function track(page)
require("Module:debug/track")("pron qualifier/" .. page)
return true
end
--[==[
This function is used by any module that wants to add support for (some subset of) left and right regular and accent
qualifiers, labels and references to a template, e.g. for pronunciations.
It is currently used by [[Module:IPA]], [[Module:rhymes]], [[Module:hyphenation]], [[Module:homophones]],
[[Module:affix]] and various lang-specific modules such as [[Module:es-pronunc]] (for specifying pronunciation,
rhymes, hyphenation, homophones and audio in {{tl|es-pr}}). It should potentially also be used in {{tl|audio}}.
To reduce memory usage, the caller should check that any qualifiers exist before loading the module.
`data` is a structure containing the following fields:
* `q`: List of left regular qualifiers, each a string.
* `qq`: List of right regular qualifiers, each a string.
* `qualifiers`: List of qualifiers, each a string, for compatibility. If `qualifiers_right` is given, these are
right qualifiers, otherwise left qualifiers. If both `qualifiers` and `q`/`qq` (depending on the value of
`qualifiers_right`) are non-{nil}, `qualifiers` is ignored.
* `qualifiers_right`: If specified, qualifiers in `qualifiers` are placed to the right, otherwise the left. See above.
* `a`: List of left accent qualifiers, each a string.
* `aa`: List of right accent qualifiers, each a string.
* `l`: List of left labels, each a string.
* `ll`: List of right labels, each a string.
* `refs`: {nil} or a list of references or reference specs to add directly after the text; the value of a list item
is either a string containing the reference text (typically a call to a citation template such as {{tl|cite-book}}, or
a template wrapping such a call), or an object with fields `text` (the reference text), `name` (the name of the
reference, as in {{cd|<nowiki><ref name="foo">...</ref></nowiki>}} or {{cd|<nowiki><ref name="foo" /></nowiki>}})
and/or `group` (the group of the reference, as in {{cd|<nowiki><ref name="foo" group="bar">...</ref></nowiki>}} or
{{cd|<nowiki><ref name="foo" group="bar"/></nowiki>}}); this uses a parser function to format the reference
appropriately and insert a footnote number that hyperlinks to the actual reference, located in the
{{cd|<nowiki><references /></nowiki>}} section.
* `lang`: Language object for accent qualifiers.
* `text`: The text to wrap with qualifiers.
*` raw`: Don't do any CSS wrapping of the formatted text.
The order of qualifiers and labels, on both the left and right, is (1) labels, (2) accent qualifiers, (3) regular
qualifiers. This goes in order of relative importance.
]==]
function export.format_qualifiers(data)
if not data.text then
error("Missing `data.text`; did you try to pass `text` or `qualifiers_right` as separate params?")
end
if not data.lang then
track("nolang")
end
local text = data.text
-- Format the qualifiers and labels that go either before or after the main text. They are ordered as follows, on
-- both the left and the right: (1) labels, (2) accent qualifiers, (3) regular qualifiers. This puts the different
-- types of qualifiers/labels in order of relative importance. Return nil if no qualifiers or labels, otherwise
-- a string containing all formatted qualifiers and labels surrounded by parens.
local function format_qualifier_like(labels, accent_qualifiers, qualifiers)
local has_qualifiers = qualifiers and qualifiers[1]
local has_accent_qualifiers = accent_qualifiers and accent_qualifiers[1]
local has_labels = labels and labels[1]
if not has_qualifiers and not has_accent_qualifiers and not has_labels then
return nil
end
local qualifier_like_parts = {}
local function ins(part)
table.insert(qualifier_like_parts, part)
end
local function format_label_like(labels, mode)
return require(labels_module).show_labels {
lang = data.lang,
labels = labels,
nocat = true,
mode = mode,
open = false,
close = false,
no_ib_content = true,
no_track_already_seen = true,
ok_to_destructively_modify = true, -- doesn't apply to `labels`
raw = data.raw,
}
end
local m_qualifier = require(qualifier_module)
if has_labels then
ins(format_label_like(labels))
end
if has_accent_qualifiers then
ins(format_label_like(accent_qualifiers, "accent"))
end
if has_qualifiers then
ins(m_qualifier.format_qualifiers {
qualifiers = qualifiers,
open = false,
close = false,
no_ib_content = true,
raw = data.raw,
})
end
local qualifier_inside
local function wrap_qualifier_css(txt, suffix)
if data.raw then
return txt
else
return m_qualifier.wrap_qualifier_css(txt, suffix)
end
end
if qualifier_like_parts[2] then
qualifier_inside = table.concat(qualifier_like_parts, wrap_qualifier_css(",", "comma") .. " ")
else
qualifier_inside = qualifier_like_parts[1]
end
qualifier_like_parts = {}
ins(wrap_qualifier_css("(", "brac"))
ins(wrap_qualifier_css(qualifier_inside, "content"))
ins(wrap_qualifier_css(")", "brac"))
return table.concat(qualifier_like_parts)
end
if data.refs then
text = text .. require(references_module).format_references(data.refs)
end
local leftq = format_qualifier_like(data.l, data.a, data.q or not data.qualifiers_right and data.qualifiers)
local rightq = format_qualifier_like(data.ll, data.aa, data.qq or data.qualifiers_right and data.qualifiers)
if leftq then
text = leftq .. " " .. text
end
if rightq then
text = text .. " " .. rightq
end
return text
end
return export
nkakbwx2we31h7ak7pqnd0ng4a55308
Mòideal:en-utilities
828
16737
86252
2026-07-22T01:55:03Z
Altronic
4137
Copy from English Wiktionary
86252
Scribunto
text/plain
local export = {}
local add_suffix -- Defined below.
local find = string.find
local is_regular_plural -- Defined below.
local match = string.match
local remove_possessive -- Defined below.
local reverse = string.reverse
local sub = string.sub
local toNFD = mw.ustring.toNFD
local ugsub = mw.ustring.gsub
local ulower = mw.ustring.lower
local umatch = mw.ustring.match
local usub = mw.ustring.sub
local uupper = mw.ustring.upper
local vowels = "aæᴀᴁɐɑɒ@eᴇǝⱻəɛɘɜɞɤiıɪɨᵻoøœᴏɶɔᴐɵuᴜʉᵾɯꟺʊʋʌyʏ"
local hyphens = "%-‐‑‒–—"
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local diacritics
local function get_diacritics()
diacritics, get_diacritics = mw.loadData("Module:headword/data").page.comb_chars.diacritics_all .. "+", nil
return diacritics
end
-- Normalize a string, so that case and diacritics are ignored. By default, "gu"
-- and "qu" are normalized to "g" and "q", because they behave like consonants
-- under certain conditions (e.g. final "y" does not usually have the plural
-- "ies" after a vowel, but it's regular for "quy" to become "quies". The flag
-- `not_gu` prevents this happening to "gu", and is needed because terms ending
-- "-guy" are almost always compounds of "guy" (→ "guys").
local function normalize(str, followed_by, not_gu)
if not followed_by then
followed_by = ""
end
str = ugsub(toNFD(str) .. followed_by, "([" .. (not_gu and "" or "Gg") .. "Qq])u([".. vowels .. "])", "%1%2")
return ulower(ugsub(sub(str, 1, #str - #followed_by), diacritics or get_diacritics(), ""))
end
local function epenthetic_e_default(stem)
return sub(stem, -1) ~= "e"
end
local function epenthetic_e_for_s(stem, term)
-- If the stem is different, it must be from "y" → "i".
if stem ~= term then
return true
end
local final
if match(stem, "^[^\128-\255]*$") then
final = sub(stem, -1)
else
stem = ugsub(toNFD(stem), diacritics or get_diacritics(), "")
final = usub(stem, -1)
end
-- Epenthetic "e" is added after a sibilant or sibilant-affricate. The vast
-- majority of these are spelled "s", "x", "z", "ch" and "sh", but "dg"
-- (→ "dge") and "ß" (→ "ss") can be found in obsolete spellings, "shh" in
-- onomatopoeia, and "zh", "dj", "jj" (and more) in loanwords.
return (
final == "g" and sub(stem, -2, -2) == "d" or
final == "h" and match(stem, "[csz]h+$") or
final == "j" and umatch(stem, "[^" .. vowels .. "]j$") or
final == "s" or
final == "u" and umatch(stem, "%f[%w']u$") or
final == "x" or
final == "z" or
final == "ß"
)
end
function export.remove_possessive(stem)
return match(stem, "^(.*)'s$") or match(stem, "^(.*s)'$") or stem
end
remove_possessive = export.remove_possessive
local suffixes = {}
suffixes["'s"] = {
truncated = function(stem)
return sub(stem, -1) == "s" and "'" or "'s"
end,
}
suffixes["s.plural"] = {
final_y_is_i = true,
epenthetic_e = epenthetic_e_for_s,
modifies_possessive = true,
}
suffixes["s.verb"] = {
final_y_is_i = true,
final_consonant_is_doubled = true,
epenthetic_e = epenthetic_e_for_s
}
suffixes["ing"] = {
final_consonant_is_doubled = true,
remove_silent_e = true,
}
suffixes["d"] = {
final_y_is_i = true,
final_consonant_is_doubled = true,
epenthetic_e = epenthetic_e_default,
}
suffixes["dst"] = suffixes["d"]
suffixes["st.verb"] = suffixes["d"]
suffixes["th"] = suffixes["d"]
suffixes["n"] = {
final_y_is_i = true,
final_y_is_i_after_vowel = true,
final_guy_is_gui = true,
final_consonant_is_doubled = true,
-- No epenthetic "e" after an "e", or an "i", "r" or "w" preceded by a vowel.
epenthetic_e = function(stem)
return not (
sub(stem, -1) == "e" or
umatch(normalize(stem), "[" .. vowels .. "][irw]$")
)
end,
}
suffixes["r"] = {
final_y_is_i = true,
final_ey_is_i = true,
final_guy_is_gui = true,
final_consonant_is_doubled = true,
epenthetic_e = epenthetic_e_default
}
suffixes["st.superlative"] = suffixes["r"]
-- Returns the stem used for suffixes that sometimes convert final "y" into "i",
-- such as "-es" ("-ies"), e.g. "penny" → "penni" ("pennies"). If
-- `final_ey_is_i` is true, final "ey" may also be converted, e.g. "plaguey" →
-- "plagui"; this is needed for "-er" ("-ier") and "-est" ("-iest"). If `not_gu`
-- is true, then normalize() will be called with the `not_gu` flag (see there
-- for more info); this is true in most cases.
local function convert_final_y_to_i(str, not_gu, final_ey_is_i, final_y_is_i_after_vowel)
local final3 = usub(str, -3)
-- Special case: treat "eey" as "ee" + "y" (e.g. "treey" → "treeiest").
-- "oey" and "uey" are usually vowel + "ey", but examples of "oe" + "y" and
-- "ue" = "y" do also exist: compare "go" → "goey" → "goier" with "doe" →
-- "doey" → "doeier"; "flu" → "fluey" → "fluiest" and "flue" → "fluey" →
-- "flueiest" form a theoretically possible minimal pair.
if final3 == "eey" then
return sub(str, 1, -2) .. "i"
end
local final2 = usub(str, -2)
-- If `final_ey_is_i` is true, treat final "-ey" can also be reduced.
if final_ey_is_i and final2 == "ey" then
-- Remove "ey" to get the base stem.
local base_stem = sub(str, 1, -3)
-- Special case: allow final "-ey" ("potato-ey" → "potato-iest").
if umatch(final3, "[" .. hyphens .. "]ey") then
return base_stem .. "i"
end
-- Final "ey" becomes "i" iff the term is polysyllabic (e.g. not
-- "grey"). "ey" is common if the base stem ends in a vowel ("echo →
-- "echoey"), so the presence of a vowel anywhere in the base stem is
-- sufficient to deem it polysyllabic. ("echoey" → "echo" → "echoiest",
-- "beigey" → "beig" → "beigiest", but "grey" → "gr" → "greyest"). The
-- first "y" in "-yey" can be treated as a vowel as long as it's
-- preceded by something ("clayey" → "clay" → "clayiest", "cryey" →
-- "cry" → "cryiest", but "*yey" → "*y" → "*yeyest"), so it needs to be
-- treated as a special case.
local normalized = normalize(base_stem, "ey")
if sub(normalized, -1) == "y" then
if umatch(normalized, "[%w@][yY]$") then
return base_stem .. "i"
end
elseif umatch(normalized, "[" .. vowels .. "%d]%w*$") then
return base_stem .. "i"
end
-- Special cases:
-- Final "quy" ("soliloquy" → "soliloquies").
-- Final "guy" iff `not_gu` is false ("roguy" → "roguiest").
-- Final "y" after a vowel iff `final_y_is_i_after_vowel` is true ("slay" →
-- "slain").
-- Final "-y" ("bro-y" → "bro-iest"), accounting for hyphen variation.
elseif umatch(final2, "[" .. hyphens .. "]y") then
-- Replace final "y" with "i".
return sub(str, 1, -2) .. "i"
-- Otherwise, final "y" becomes "i" iff it's not preceded by a vowel
-- ("shy" → "shiest", "horsy" → "horsies", but "day" → "days", "coy" →
-- "coyest").
else
-- Remove "y" to get the base stem.
local base_stem = sub(str, 1, -2)
if umatch(normalize(base_stem, "y", not_gu), "[^%s%p" .. (final_y_is_i_after_vowel and "" or vowels) .. "]$") then
return base_stem .. "i"
end
end
return str
end
local function double_final_consonant(str, final)
local initial = umatch(normalize(sub(str, 1, -2), final), "^.*%f[^%z%s" .. hyphens .. "…]([%l%p]*)[" .. vowels .. "]$")
return initial and (
initial == "" or
initial == "y" or
match(initial, "^.[\128-\191]*$") and umatch(initial, "[^" .. vowels .. "]") or
umatch(initial, "^[^" .. vowels .. "]*%f[^%l]$")
) and (str .. final) or str
end
local function remove_silent_e(str)
local final2 = sub(str, -2)
if final2 == "ie" then
-- Replace "ie" with "y", unless it follows another "y" (e.g.
-- "spulyie" → "spulyieing").
return ugsub(str, "([^yY%s%p])ie$", "%1y")
end
local base_stem = sub(str, 1, -2)
-- Silent "e" occurs after "u" or a consonant (cluster) preceded by a vowel.
return (
final2 == "ue" or
umatch(normalize(base_stem, "e"), "[" .. vowels .. "][^" .. vowels .. "]+$")
) and base_stem or str
end
function export.add_suffix(term, suffix, pos)
local data, possessive = suffixes[suffix]
-- If modifies_possessive is set, check for and remove any possessive
-- suffix, which will be re-added again at the end.
if data.modifies_possessive then
local new = remove_possessive(term)
if new ~= term then
term, possessive = new, true
end
end
suffix = match(suffix, "^([^.]*)")
local final, stem = sub(term, -1)
-- Proper nouns don't have a final "y" changed to "i" (e.g. "the Gettys",
-- "the public Ivys").
if data.final_y_is_i and final == "y" and pos ~= "proper noun" then
stem = convert_final_y_to_i(term, not data.final_guy_is_gui, data.final_ey_is_i, data.final_y_is_i_after_vowel)
elseif data.remove_silent_e and final == "e" then
stem = remove_silent_e(term)
else
stem = term
end
local epenthetic_e = data.epenthetic_e
if epenthetic_e and epenthetic_e(stem, term) then
suffix = "e" .. suffix
end
if (
data.final_consonant_is_doubled and
match(final, "^[bcdfgjklmnpqrstvz]$") and -- Only double regular consonants.
umatch(suffix, "^[" .. vowels .. "]")
) then
stem = double_final_consonant(term, final)
end
local truncated = data.truncated
if truncated then
suffix = truncated(stem)
end
local output = stem .. suffix
-- Re-add the possessive suffix, if applicable.
if possessive then
output = add_suffix(output, "'s", pos)
end
return output
end
add_suffix = export.add_suffix
--[==[
Pluralize a word in a smart fashion, according to normal English rules.
# If the word ends in a consonant or "qu" + "-y", replace "-y" with "-ies".
# If the word ends in "s", "x", "z", "ch", "sh" or "zh", add "-es".
# Otherwise, add "-s".
This handles links correctly:
# If a piped link, change the second part appropriately.
# If a non-piped link and rule #1 above applies, convert to a piped link with the second part containing the plural.
# If a non-piped link and rules #2 or #3 above apply, add the plural outside the link.
]==]
function export.pluralize(str)
-- Treat as a link if a "[[" is present and the string ends with "]]".
if not (find(str, "[[", 1, true) and sub(str, -2) == "]]") then
return add_suffix(str, "s.plural")
end
-- Find the last "[[" (in case there is more than one) by reversing
-- the string.
local str_rev = reverse(str)
local open = find(str_rev, "[[", 3, true)
-- If the last "[[" is followed by a "]]" which isn't at the end,
-- then the final "]]" is just plaintext (e.g. "[[foo]]bar]]").
local bad_close = find(str_rev, "]]", 3, true)
-- Note: the bad "]]" will have a lower index than the last "[[" in
-- the reversed string.
if bad_close and bad_close < open then
return add_suffix(str, "s.plural")
end
open = #str - open + 2
-- Get the target and display text by searching from just after "[[".
local target, display = match(str, "([^|]*)|?(.*)%]%]$", open)
display = add_suffix(display ~= "" and display or target, "s.plural")
-- If the link target is a substring of the display text, then
-- use a trail (e.g. "[[foo]]" → "[[foo]]s", since "foo" is a substring
-- of "foos").
local index, trail = find(display, target, 1, true)
if index == 1 then
return sub(str, 1, open - 1) .. target .. "]]" .. sub(display, trail + 1)
end
-- Otherwise, return a piped link.
return sub(str, 1, open - 1) .. target .. "|" .. display .. "]]"
end
--[==[
Returns true if `plural` is an expected, regular plural of `term`.
The optional parameter `pos` can be used to specify the part of speech,
which is necessary because proper nouns do not change a {"-y"} suffix to {"-ies"}
(e.g. {"Abby"} → {"Abbys"}). By default, `pos` is set to {"noun"}. In addition to
{"proper noun"}, it can also take the special value {"noun+"}, which means that
the function will first attempt the check with the {"noun"} setting, and will
then attempt it with the {"proper noun"} setting iff the term begins with a
capital letter.
]==]
function export.is_regular_plural(plural, term, pos)
local init_plural, init_term, try_as_proper_noun = plural, term
if pos == "noun+" then
pos, try_as_proper_noun = "noun", true
end
-- Ignore any final punctuation that occurs in both forms, which is common
-- in abbreviations (e.g. "abbr." → "abbrs.").
local final_punc = umatch(term, "%p*$")
local final_punc_len = #final_punc
if sub(plural, -final_punc_len) == final_punc then
term = sub(term, 1, -final_punc_len - 1)
plural = sub(plural, 1, -final_punc_len - 1)
end
if plural == add_suffix(term, "s.plural", pos) then
return true
end
local final = sub(term, -1)
if (
-- Doubled final consonants in "s" and "z".
final == "s" and plural == term .. "ses" or -- e.g. "busses"
final == "z" and plural == term .. "zes" or -- e.g. "quizzes"
-- convert_final_y_to_i() without the `not_gu` flag set, to catch
-- "-guy" → "-guies", but not "day" → "daies".
final == "y" and plural == convert_final_y_to_i(term) .. "es" or
-- Capitalized terms like "$DEITY" → "$DEITIES (should we treat this as regular?)
final == "Y" and ulower(plural) == convert_final_y_to_i(ulower(term)) .. "es"
) then
return true
elseif try_as_proper_noun then
local init = umatch(init_term, "^[^%w%s]*(%w)")
return init and uupper(init) == init and ulower(init) ~= init and
is_regular_plural(init_plural, init_term, "proper noun") or
false
end
return false
end
is_regular_plural = export.is_regular_plural
do
local function do_singularize(str)
local sing = match(str, "^(.-)ies$")
if sing then
return sing .. "y"
end
-- Handle cases like "[[parish]]es"
return match(str, "^(.-[cs]h%]*)es$") or -- not -zhes
-- Handle cases like "[[box]]es"
match(str, "^(.-x%]*)es$") or -- not -ses or -zes
-- Handle regular plurals
match(str, "^(.-)s$") or
-- Otherwise, return input
str
end
local function collapse_link(link, linktext)
if link == linktext then
return "[[" .. link .. "]]"
end
return "[[" .. link .. "|" .. linktext .. "]]"
end
--[==[
Singularize a word in a smart fashion, according to normal English rules. Works analogously to {pluralize()}.
'''NOTE''': This doesn't always work as well as {pluralize()}. Beware. It will mishandle cases like "passes" -> "passe", "eyries" -> "eyry".
# If word ends in -ies, replace -ies with -y.
# If the word ends in -xes, -shes, -ches, remove -es. [Does not affect -ses, cf. "houses", "impasses".]
# Otherwise, remove -s.
This handles links correctly:
# If a piped link, change the second part appropriately. Collapse the link to a simple link if both parts end up the same.
# If a non-piped link, singularize the link.
# A link like "[[parish]]es" will be handled correctly because the code that checks for -shes etc. allows ] characters between the
'sh' etc. and final -es.
]==]
function export.singularize(str)
if type(str) == "table" then
-- allow calling from a template
str = str.args[1]
end
-- Check for a link. This pattern matches both piped and unpiped links.
-- If the link is not piped, the second capture (linktext) will be empty.
local beginning, link, linktext = match(str, "^(.*)%[%[([^|%]]+)%|?(.-)%]%]$")
if not link then
return do_singularize(str)
elseif linktext ~= "" then
return beginning .. collapse_link(link, do_singularize(linktext))
end
return beginning .. "[[" .. do_singularize(link) .. "]]"
end
end
--[==[
Return the appropriate indefinite article to prefix to `str`. Correctly handles links and capitalized text.
Does not correctly handle words like [[union]], [[uniform]] and [[university]] that take "a" despite beginning with
a 'u'. The returned article will have its first letter capitalized if `ucfirst` is specified, otherwise lowercase.
]==]
function export.get_indefinite_article(str, ucfirst)
str = str or ""
-- If there's a link at the beginning, examine the first letter of the
-- link text. This pattern matches both piped and unpiped links.
-- If the link is not piped, the second capture (linktext) will be empty.
local link, linktext = match(str, "^%[%[([^|%]]+)%|?(.-)%]%]")
if match(link and (linktext ~= "" and linktext or link) or str, "^()[AEIOUaeiou]") then
return ucfirst and "An" or "an"
end
return ucfirst and "A" or "a"
end
get_indefinite_article = export.get_indefinite_article
--[==[
Prefix `text` with the appropriate indefinite article to prefix to `text`. Correctly handles links and capitalized
text. Does not correctly handle words like [[union]], [[uniform]] and [[university]] that take "a" despite beginning
with a 'u'. The returned article will have its first letter capitalized if `ucfirst` is specified, otherwise lowercase.
]==]
function export.add_indefinite_article(text, ucfirst)
return get_indefinite_article(text, ucfirst) .. " " .. text
end
export.vowels = vowels
export.vowel = "[" .. vowels .. "]"
return export
qmuwy34gf3az49fu17xn4hzrc6y4prc
Mòideal:en-utilities/templates
828
16738
86253
2026-07-22T01:55:36Z
Altronic
4137
Copy from English Wiktionary
86253
Scribunto
text/plain
-- Prevent substitution.
if mw.isSubsting() then
return require("Module:unsubst")
end
local export = {}
local en_utilities_module = "Module:en-utilities"
local process_params = require("Module:parameters").process
function export.pluralize_t(frame)
return require(en_utilities_module).pluralize(process_params(frame:getParent().args, {
[1] = true
})[1])
end
return export
q5nvncywdimgj7thilh0re85h0hai2b
Mòideal:Unsubst
828
16739
86255
2026-07-22T01:56:52Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:Unsubst]] gu [[Mòideal:unsubst]]
86255
Scribunto
text/plain
return require [[Mòideal:unsubst]]
ffdxtvvzljwfde28uit8ct6c7yj2vcm
Mòideal:Unsubst/doc
828
16740
86257
2026-07-22T01:56:52Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:Unsubst/doc]] gu [[Mòideal:unsubst/doc]]
86257
wikitext
text/x-wiki
#REDIRECT [[Mòideal:unsubst/doc]]
ittfbp04aerzy4vavx7mvt2oiric08t
Mòideal:qualifier
828
16741
86260
2026-07-22T02:01:04Z
Altronic
4137
Copy from English Wiktionary
86260
Scribunto
text/plain
local export = {}
local concat = table.concat
--[==[
Wrap text in one or more CSS classes. `classes` should be a string; separate multiple classes with a space.
]==]
function export.wrap_css(text, classes)
return ("<span class=\"%s\">%s</span>"):format(classes, text)
end
--[==[
Wrap text in one or more qualifier CSS classes. `suffix` is the suffix describing the type of content, e.g. `brac`
for parens, `content` for content, `comma` for commas. CSS classes <code>ib-<var>suffix</var></code> and
i<code>qualifier-<var>suffix</var></code> are added.
]==]
function export.wrap_qualifier_css(text, suffix)
local css_classes = ("ib-%s qualifier-%s"):format(suffix, suffix)
return export.wrap_css(text, css_classes)
end
--[==[
Format one or more qualifiers. `data` is an object with the following fields:
* `qualifiers`: A single qualifier or a list or qualifiers.
* `open`: Override the open paren displayed before the qualifiers. If `false` or an empty string, no paren is displayed.
* `close`: Override the close paren displayed before the qualifiers. If `false` or an empty string, no paren is
displayed.
* `opencontent`: Content to display before the qualifiers, after the open paren.
* `closecontent`: Content to display after the qualifiers, before the close paren.
* `no_ib_content`: Suppress wrapping the content with classes `ib-content` and `qualifier-content`. Parens and commas
will still be wrapped in CSS.
* `raw`: Suppress all CSS wrapping.
]==]
function export.format_qualifiers(data)
local qualifiers, open, close = data.qualifiers, data.open, data.close
if type(qualifiers) ~= "table" then
qualifiers = {qualifiers}
end
if not qualifiers[1] then
return ""
end
local parts = {}
local function ins(text)
table.insert(parts, text)
end
local function wrap_qualifier_css(text, suffix)
if data.raw then
return text
end
return export.wrap_qualifier_css(text, suffix)
end
if open ~= false and open ~= ""then
ins(wrap_qualifier_css(open or "(", "brac"))
end
if data.opencontent then
ins(data.opencontent)
end
local content = concat(qualifiers, wrap_qualifier_css(",", "comma") .. " ")
if not data.no_ib_content then
content = wrap_qualifier_css(content, "content")
end
ins(content)
if data.closecontent then
ins(data.closecontent)
end
if close ~= false and close ~= "" then
ins(wrap_qualifier_css(close or ")", "brac"))
end
return concat(parts)
end
--[==[
An older interface onto `format_qualifiers`. Eventually code should be converted to use the new entry point.
]==]
function export.format_qualifier(qualifiers, open, close, opencontent, closecontent, no_ib_content)
return export.format_qualifiers {
qualifiers = qualifiers,
open = open,
close = close,
opencontent = opencontent,
closecontent = closecontent,
no_ib_content = no_ib_content,
}
end
local function format_qualifiers_with_clarification(qualifiers, clarification, openquote, closequote)
local opencontent = export.wrap_css(clarification, "qualifier-clarification") ..
export.wrap_css(openquote or "“", "qualifier-clarification qualifier-quote")
local closecontent = export.wrap_css(closequote or "”", "qualifier-clarification qualifier-quote")
return export.format_qualifiers {
qualifiers = qualifiers,
open = "(",
close = ")",
opencontent = opencontent,
closecontent = closecontent,
}
end
--[==[
Internal implementation of {{tl|sense}}.
]==]
function export.sense(qualifiers)
return export.format_qualifiers {
qualifiers = qualifiers
}.. export.wrap_css(":", "ib-colon sense-qualifier-colon")
end
--[==[
Internal implementation of {{tl|antsense}}.
]==]
function export.antsense(qualifiers)
return format_qualifiers_with_clarification(qualifiers, "antonym(s) of ") ..
export.wrap_css(":", "ib-colon sense-qualifier-colon")
end
return export
tc3tigewud11x9n9900h1tvmhjpvcah
Mòideal:gender and number
828
16742
86261
2026-07-22T02:03:32Z
Altronic
4137
Copy from English Wiktionary
86261
Scribunto
text/plain
local export = {}
local debug_track_module = "Module:debug/track"
local load_module = "Module:load"
local pron_qualifier_module = "Module:pron qualifier"
local parameters_module = "Module:parameters"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local concat = table.concat
local insert = table.insert
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function format_pron_qualifiers(...)
format_pron_qualifiers = require(pron_qualifier_module).format_qualifiers
return format_pron_qualifiers(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local gender_and_number_data
local function get_gender_and_number_data()
gender_and_number_data, get_gender_and_number_data = load_data("Module:gender and number/data"), nil
return gender_and_number_data
end
--[==[ intro:
This module creates standardised displays for gender and number. It converts a gender specification into Wiki/HTML format.
A gender/number specification consists of one or more gender/number elements, separated by hyphens. Examples are:
{"n"} (neuter gender), {"f-p"} (feminine plural), {"m-an-p"} (masculine animate plural),
{"pf"} (perfective aspect). Each gender/number element has the following properties:
# A code, as used in the spec, e.g. {"f"} for feminine, {"p"} for plural.
# A type, e.g. `gender`, `number` or `animacy`. Each element in a given spec must be of a different type.
# A display form, which in turn consists of a display code and a tooltip gloss. The display code
may not be the same as the spec code, e.g. the spec code {"an"} has display code {"anim"} and tooltip
gloss ''animate''.
# A category into which lemmas of the right part of speech are placed if they have a gender/number
spec containing the given element. For example, a noun with gender/number spec {"m-an-p"} is placed
into the categories `<var>lang</var> masculine nouns`, `<var>lang</var> animate nouns` and `<var>lang</var> pluralia tantum`.
]==]
--[==[
Version of format_list that can be invoked from a template.
]==]
function export.show_list(frame)
local params = {
[1] = {list = true},
["lang"] = {type = "language"},
}
local iargs = process_params(frame.args, params)
return export.format_list(iargs[1], iargs.lang)
end
--[==[
Older entry point; equivalent to format_genders() except that it formats the
categories and returns them appended to the formatted gender text rather than
returning the formatted text and categories separately.
]==]
function export.format_list(specs, lang, pos_for_cat, sort_key)
debug_track("gender and number/old-format-list")
local text, cats = export.format_genders(specs, lang, pos_for_cat)
if not cats then
return text
end
return text .. format_categories(cats, lang, sort_key)
end
local function autoadd_abbr(display)
if not display then
error("Internal error: '.display' for gender/number code is missing")
end
if display:find("<abbr", nil, true) then
return display
end
return ('%s'):format(display, display)
end
-- Add qualifiers, labels and references to a formatted gender/number spec. `spec` is the object describing the
-- gender/number spec, which should optionally contain:
-- * left qualifiers in `q` or (for compatibility) `qualifiers`, an array of strings;
-- * right qualifiers in `qq`, an array of strings;
-- * left labels in `l`, an array of strings;
-- * right labels in `ll`, an array of strings;
-- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text`
-- (formatted reference text) and optionally `name` and/or `group`;
-- `formatted` is the formatted version of the term itself, and `lang` is the optional language object passed into
-- format_genders().
local function add_qualifiers_and_refs(formatted, spec, lang)
local function field_non_empty(field)
local list = spec[field]
if not list then
return nil
end
if type(list) ~= "table" then
error(("Internal error: Wrong type for `spec.%s`=%s, should be \"table\""):format(
field, mw.dumpObject(list)))
end
return list[1]
end
if field_non_empty("q") or field_non_empty("qq") or field_non_empty("l") or field_non_empty("ll") or
field_non_empty("qualifiers") or field_non_empty("refs") then
formatted = format_pron_qualifiers{
lang = lang,
text = formatted,
q = spec.q,
qq = spec.qq,
qualifiers = spec.qualifiers,
l = spec.l,
ll = spec.ll,
refs = spec.refs,
}
end
return formatted
end
--[==[
Format one or more gender/number specifications. Each spec is either a string, e.g. {"f-p"}, or a table of the form
{ {spec = "SPEC", qualifiers = {"QUALIFIER", "QUALIFIER", ...}}} where `.spec` is a gender/number spec such as {"f-p"}
and `.qualifiers` is a list of qualifiers to display before the formatted gender/number spec. `.spec` must be present
but `.qualifiers` may be omitted.
The function returns two values:
# the formatted text;
# a list of the categories to add.
If `lang` (which should be a language object) and `pos_for_cat` (which should be a plural part of speech) are given,
gender categories such as `German masculine nouns` or `Russian imperfective verbs` are added to the categories, and
request categories such as `Requests for gender in <var>lang</var> entries` or
`Requests for animacy in <var>lang</var> entries` may also be added. Otherwise, if only `lang` is given, only request
categories may be returned. If both are omitted, the returned list is empty.
]==]
function export.format_genders(specs, lang, pos_for_cat)
local formatted_specs, categories, seen_types = {}
local all_is_nounclass = nil
local full_langname = lang and lang:getFullName() or nil
local function do_gender_spec(spec, parts)
local types = {}
local codes = (gender_and_number_data or get_gender_and_number_data()).codes
for key, code in ipairs(parts) do
-- Is this code valid?
if not codes[code] then
error('The tag "' .. code .. '" in the gender specification "' .. spec.spec .. '" is not valid. See [[Module:gender and number]] for a list of valid tags.')
end
-- Check for multiple genders/numbers/animacies in a single spec.
local typ = codes[code].type
if typ ~= "other" and types[typ] then
error('The gender specification "' .. spec.spec .. '" contains multiple tags of type "' .. typ .. '".')
end
types[typ] = true
parts[key] = autoadd_abbr(codes[code].display)
-- Generate categories if called for.
if lang and pos_for_cat then
local cat = codes[code].cat
if cat then
if not categories then
categories = {}
end
insert(categories, full_langname .. " " .. cat)
end
if not seen_types then
seen_types = {}
elseif seen_types[typ] and seen_types[typ] ~= code then
cat = (gender_and_number_data or get_gender_and_number_data()).multicode_cats[typ]
if cat then
if not categories then
categories = {}
end
insert(categories, full_langname .. " " .. cat)
end
end
seen_types[typ] = code
end
if lang and codes[code].req then
local type_for_req = typ
if code == "?" then
-- Keep in mind `pos_for_cat` may be nil here.
type_for_req = pos_for_cat == "verbs" and "aspect" or "gender"
end
if not categories then
categories = {}
end
insert(categories, "Requests for " .. type_for_req .. " in " .. full_langname .. " entries")
end
end
-- Add the processed codes together with non-breaking spaces
if not parts[2] and parts[1] then
return parts[1]
else
return concat(parts, " ")
end
end
for _, spec in ipairs(specs) do
if type(spec) ~= "table" then
spec = {spec = spec}
end
local spec_spec, is_nounclass = spec.spec
-- If the specification starts with cX, then it is a noun class specification.
if spec_spec:match("^%d") or spec_spec:match("^c[^-]") then
is_nounclass = true
local code = spec_spec:gsub("^c", "")
local text
if code == "?" then
text = '<abbr class="noun-class" title="noun class missing">?</abbr>'
if lang then
if not categories then
categories = {}
end
insert(categories, "Requests for noun class in " .. full_langname .. " entries")
end
else
text = '<abbr class="noun-class" title="noun class ' .. code .. '">' .. code .. "</abbr>"
if lang and pos_for_cat then
if not categories then
categories = {}
end
insert(categories, full_langname .. " class " .. code .. " POS")
end
end
local text_with_qual = add_qualifiers_and_refs(text, spec, lang)
insert(formatted_specs, text_with_qual)
else
-- Split the parts and iterate over each part, converting it into its display form
local parts = split(spec.spec, "-", true, true)
local combined_codes = (gender_and_number_data or get_gender_and_number_data()).combinations
if lang then
-- Check if the specification is valid
--elseif langinfo.genders then
-- local valid_genders = {}
-- for _, g in ipairs(langinfo.genders) do valid_genders[g] = true end
--
-- if not valid_genders[spec.spec] then
-- local valid_string = {}
-- for i, g in ipairs(langinfo.genders) do valid_string[i] = g end
-- error('The gender specification "' .. spec.spec .. '" is not valid for ' .. langinfo.names[1] .. ". Valid are: " .. concat(valid_string, ", "))
-- end
--end
end
local has_combined = false
for _, code in ipairs(parts) do
if combined_codes[code] then
has_combined = true
break
end
end
if not has_combined then
if formatted_specs[1] then
insert(formatted_specs, "or")
end
insert(formatted_specs, add_qualifiers_and_refs(do_gender_spec(spec, parts), spec, lang))
else
-- This logic is to handle combined gender specs like 'mf' and 'mfbysense'.
local all_parts = {{}}
local extra_displays
local this_formatted_specs = {}
for _, code in ipairs(parts) do
if combined_codes[code] then
local new_all_parts = {}
for _, one_parts in ipairs(all_parts) do
for _, one_code in ipairs(combined_codes[code].codes) do
local new_combined_parts = deep_copy(one_parts)
insert(new_combined_parts, one_code)
insert(new_all_parts, new_combined_parts)
end
end
all_parts = new_all_parts
if lang and pos_for_cat then
local extra_cat = combined_codes[code].cat
if extra_cat then
if not categories then
categories = {}
end
insert(categories, full_langname .. " " .. extra_cat)
end
end
local extra_display = combined_codes[code].display
if extra_display then
if not extra_displays then
extra_displays = {}
end
insert(extra_displays, autoadd_abbr(extra_display))
end
else
for _, one_parts in ipairs(all_parts) do
insert(one_parts, code)
end
end
end
for _, parts in ipairs(all_parts) do
if this_formatted_specs[1] then
insert(this_formatted_specs, "or")
end
insert(this_formatted_specs, do_gender_spec(spec, parts))
end
if extra_displays then
for _, display in ipairs(extra_displays) do
insert(this_formatted_specs, display)
end
end
insert(formatted_specs, add_qualifiers_and_refs(
concat(this_formatted_specs, " "), spec, lang))
end
is_nounclass = false
end
-- Ensure that the specifications are either all noun classes, or none are.
if all_is_nounclass == nil then
all_is_nounclass = is_nounclass
elseif all_is_nounclass ~= is_nounclass then
error("Noun classes and genders cannot be mixed. Please use either one or the other.")
end
end
if categories and lang and pos_for_cat then
for i, cat in ipairs(categories) do
categories[i] = cat:gsub("POS", pos_for_cat)
end
end
if all_is_nounclass then
-- Add the processed codes together with slashes
return '<span class="gender">class ' .. concat(formatted_specs, "/") .. "</span>", categories
else
-- Add the processed codes together with spaces
return '<span class="gender">' .. concat(formatted_specs, " ") .. "</span>", categories
end
end
return export
2m0recg6bd63ggydwpzsqejrsntefgo
Mòideal:gender and number/data
828
16743
86262
2026-07-22T02:04:25Z
Altronic
4137
Copy from English Wiktionary
86262
Scribunto
text/plain
local data = {}
local insert = table.insert
-- A list of all possible "parts" that a specification can be made out of. For each part, we list the class it's in
-- (gender, animacy, etc.), the associated category (if any) and the display form. In a given gender/number spec, only
-- one part of each class is allowed. `display` is how the code is diplayed to the user and should normally be wrapped
-- in <abbr title="tooltip">...</abbr> with an explanatory tooltip. If not, it will automatically be wrapped in this
-- fashion. If `req` is true, a category "Requests for TYPE in LANG entries" will be generated, except for the code "?",
-- which is special-cased; TYPE is "gender" unless the POS is "verb", in which case it is "aspect".
data.codes = {
["?"] = {type = "other", req = true, display = '<abbr title="gender incomplete">?</abbr>'},
-- FIXME: The following should be either eliminated in favor of g! or converted to a general "gender/number unattested".
["?!"] = {type = "other", display = "gender unattested"},
-- Genders
["m"] = {type = "gender", cat = "masculine POS", display = '<abbr title="masculine gender">m</abbr>'},
["f"] = {type = "gender", cat = "feminine POS", display = '<abbr title="feminine gender">f</abbr>'},
["n"] = {type = "gender", cat = "neuter POS", display = '<abbr title="neuter gender">n</abbr>'},
["c"] = {type = "gender", cat = "common-gender POS", display = '<abbr title="common gender">c</abbr>'},
["gneut"] = {type = "gender", cat = "gender-neutral POS", display = "gender-neutral"},
["g!"] = {type = "gender", display = "gender unattested"},
["g?"] = {type = "gender", req = true, display = "gender unspecified"},
-- Animacy
-- Animate = either animal or personal (for Russian, etc.)
["an"] = {type = "animacy", cat = "animate POS", display = '<abbr title="animate">anim</abbr>'},
["in"] = {type = "animacy", cat = "inanimate POS", display = '<abbr title="inanimate">inan</abbr>'},
-- Animal (for Ukrainian, Belarusian, Polish, etc.)
["anml"] = {type = "animacy", cat = "animal POS", display = "animal"},
-- Personal (for Ukrainian, Belarusian, Polish, etc.)
["pr"] = {type = "animacy", cat = "personal POS", display = '<abbr title="personal">pers</abbr>'},
["np"] = {type = "animacy", cat = "nonpersonal POS", display = '<abbr title="nonpersonal">npers</abbr>'},
["an!"] = {type = "animacy", display = "animacy unattested"},
["an?"] = {type = "animacy", req = true, display = "animacy unspecified"},
-- Definiteness
["def"] = {type = "definiteness", cat = "definite POS", display = '<abbr title="definite">def</abbr>'},
["indef"] = {type = "definiteness", cat = "indefinite POS", display = '<abbr title="indefinite">indef</abbr>'},
-- Virility (for Polish)
["vr"] = {type = "virility", cat = "virile POS", display = '<abbr title="virile (= masculine personal)">vir</abbr>'},
["nv"] = {type = "virility", cat = "nonvirile POS", display = '<abbr title="nonvirile (= other than masculine personal)">nvir</abbr>'},
-- Numbers
["s"] = {type = "number", display = '<abbr title="singular number">sg</abbr>'},
["d"] = {type = "number", cat = "dualia tantum", display = '<abbr title="dual number">du</abbr>'},
["p"] = {type = "number", cat = "pluralia tantum", display = '<abbr title="plural number">pl</abbr>'},
["num!"] = {type = "number", display = "number unattested"},
["num?"] = {type = "number", req = true, display = "number unspecified"},
-- Verb qualifiers
["impf"] = {type = "aspect", cat = "imperfective POS", display = '<abbr title="imperfective aspect">impf</abbr>'},
["pf"] = {type = "aspect", cat = "perfective POS", display = '<abbr title="perfective aspect">pf</abbr>'},
["asp!"] = {type = "aspect", display = "aspect unattested"},
["asp?"] = {type = "aspect", req = true, display = "aspect unspecified"},
}
-- Combined codes that are equivalent to giving multiple specs. `mf` is the same as specifying two separate specs,
-- one with `m` in it and the other with `f`. `mfbysense` is similar but is used for nouns that can be either masculine
-- or feminine according as to whether they refer to masculine or feminine beings.
local combinations = {
["biasp"] = {codes = {"impf", "pf"}},
["anin"] = {codes = {"an", "in"}}, -- "bianimate" doesn't exist as a linguistic term
}
for _, comb in ipairs{"mf", "mn", "fm", "fn", "cn", "nm", "nf", "nc", "mfn", "mnf", "fmn", "fnm", "nmf", "nfm"} do
local codes = {}
for ch in comb:gmatch(".") do
insert(codes, ch)
end
combinations[comb] = {codes = codes}
combinations[comb .. "equiv"] = {codes = codes, display = '<abbr title="different genders do not affect the meaning">same meaning</abbr>'}
if comb == "mf" or comb == "fm" then
combinations[comb .. "bysense"] = {codes = codes, cat = "masculine and feminine POS by sense",
display = '<abbr title="according to the gender of the referent">by sense</abbr>'}
end
end
data.combinations = combinations
-- Categories when multiple gender/number codes of a given type occur in different specs (two or more of the same type
-- cannot occur in a single spec).
data.multicode_cats = {
["gender"] = "POS with multiple genders",
["animacy"] = "POS with multiple animacies",
["aspect"] = "biaspectual POS",
}
return data
ez8li72lhxsz7uadcg8lztfyl3hm08a
Mòideal:gender and number/basic
828
16744
86263
2026-07-22T02:04:59Z
Altronic
4137
Copy from English Wiktionary
86263
Scribunto
text/plain
local export = {}
--[=[
This is a simplified version of [[Module:gender and number]] that handles the most common
cases without loading the full module.
]=]--
function export.format_list(specs, lang, pos_for_cat, sort_key)
local gender, spec
if not pos_for_cat and not sort_key and #specs == 1 and type(specs[1]) == "string" then
spec = specs[1]
if spec == "m" then
gender = "masculine"
elseif spec == "f" then
gender = "feminine"
elseif spec == "n" then
gender = "neuter"
elseif spec == "c" then
gender = "common"
end
end
if gender then
return '<span class="gender"><abbr title="' .. gender .. ' gender">' .. spec .. '</abbr></span>'
end
return require("Module:gender and number").format_list(specs, lang, pos_for_cat, sort_key)
end
return export
elykcmkysm7trjona9i2cwu4hpx15zy
Mòideal:languages/data/3/u
828
16745
86264
2026-07-22T02:09:55Z
Altronic
4137
Copy from English Wiktionary
86264
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["uam"] = {
"Uamué",
3441418,
}
m["uan"] = {
"Kuan",
6441085,
}
m["uar"] = {
"Tairuma",
7676386,
"paa-eel",
"Latn",
}
m["uba"] = {
"Ubang",
3914467,
"nic-ben",
"Latn",
}
m["ubi"] = {
"Ubi",
56264,
}
m["ubl"] = {
"Buhi'non Bikol",
18664494,
"phi",
"Latn",
}
m["ubr"] = {
"Ubir",
3547642,
"poz-ocw",
"Latn",
}
m["ubu"] = {
"Umbu-Ungu",
12953245,
"ngf-hag",
"Latn",
}
m["uby"] = {
"Ubykh",
36931,
"cau-nwc",
"Cyrl, Latn",
translit = "uby-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = "uby-sortkey",
}
m["uda"] = {
"Uda",
11011951,
"nic-lcr",
}
m["ude"] = {
"Udihe",
13235,
"tuw-udg",
"Cyrl",
}
m["udg"] = {
"Muduga",
16886762,
"dra-imd",
"Mlym",
-- Mlym translit in [[Module:scripts/data]]
}
m["udi"] = {
"Udi",
36867,
"cau-esm",
"Cyrl, Latn, Armn, Geor",
ancestors = "xag",
translit = {
Cyrl = "udi-translit",
-- Geor, Armn translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
}
m["udj"] = {
"Ujir",
14916906,
"poz-cet",
"Latn",
}
m["udl"] = {
"Uldeme",
3515078,
"cdc-cbm",
"Latn",
}
m["udm"] = {
"Udmurt",
13238,
"urj-prm",
"Cyrl",
translit = "udm-translit",
override_translit = true,
sort_key = "udm-sortkey",
}
m["udu"] = {
"Uduk",
3182573,
"ssa-kom",
}
m["ues"] = {
"Kioko",
18343036,
}
m["ufi"] = {
"Ufim",
7877531,
"ngf-gmo",
"Latn",
}
m["uga"] = {
"Ugaritic",
36928,
"sem-nwe",
"Ugar",
translit = {
Ugar = "uga-translit",
}
}
m["ugb"] = {
"Kuku-Ugbanh",
10549854,
}
m["uge"] = {
"Ughele",
966303,
"poz-ocw",
}
m["ugn"] = {
"Ugandan Sign Language",
7877677,
"sgn-asl",
}
m["ugo"] = {
"Gong",
3448919,
"tbq-lob",
"Thai",
sort_key = "Thai-sortkey",
}
m["ugy"] = {
"Uruguayan Sign Language",
7901470,
"sgn",
}
m["uha"] = {
"Uhami",
3913328,
"alv-nwd",
"Latn",
}
m["uhn"] = {
"Damal",
4748974,
"qfa-dis", -- ngf? or uncertain
"Latn",
}
m["uis"] = {
"Uisai",
7878123,
"paa-sbo",
"Latn",
}
m["uiv"] = {
"Iyive",
11128658,
"nic-tvc",
"Latn",
}
m["uji"] = {
"Tanjijili",
3914939,
"nic-pls",
"Latn",
}
m["uka"] = {
"Kaburi",
6344482,
"ngf-sbh",
"Latn",
}
m["ukg"] = {
"Ukuriguma",
7878623,
"ngf-num",
"Latn",
}
m["ukh"] = {
"Ukhwejo",
36623,
"bnt-bek",
"Latn",
}
m["ukk"] = {
"Muak Sa-aak",
23807993,
"mkh-pal",
"Latn",
}
m["ukl"] = {
"Ukrainian Sign Language",
10322106,
"sgn",
}
m["ukp"] = {
"Ukpe-Bayobiri",
3914470,
"nic-ben",
"Latn",
}
m["ukq"] = {
"Ukwa",
7878635,
"nic-ief",
"Latn",
}
m["uks"] = {
"Kaapor Sign Language",
3322101,
"sgn",
}
m["uku"] = {
"Ukue",
3913387,
"alv-nwd",
"Latn",
}
m["ukw"] = {
"Ukwuani-Aboh-Ndoni",
36636,
"alv",
"Latn",
}
m["uky"] = {
"Kuuk Yak",
6448719,
"aus-psw",
"Latn",
}
m["ula"] = {
"Fungwa",
5509187,
"nic-shi",
"Latn",
}
m["ulb"] = {
"Olukumi",
36722,
"alv-yor",
"Latn",
strip_diacritics = {Latn = {remove_diacritics = c.grave .. c.acute .. c.macron}},
sort_key = {
from = {"ch", "ẹ", "gb", "gh", "gw", "kp", "kw", "ọ", "ṣ"},
to = {"c" .. p[1], "e" .. p[1], "g" .. p[1], "g" .. p[2], "g" .. p[3], "k" .. p[1], "k" .. p[2], "o" .. p[1], "s" .. p[1]}
},
}
m["ulc"] = {
"Ulch",
13239,
"tuw-nan",
"Cyrl, Latn",
strip_diacritics = {
from = {"['’]"},
to = {"ʼ"}
},
sort_key = "ulc-sortkey",
}
m["ule"] = {
"Lule",
12635889,
nil,
"Latn",
}
m["ulf"] = {
"Afra",
4477735,
"qfa-dis", -- Papuan; extinct and poorly documented; per Wurm (1975), an independent branch of TNG; per Ross (2005),
-- unclassifiable; per Usher (2020), West Pauwasi, though divergent; per Foley (2018), isolate.
"Latn",
}
m["uli"] = {
"Ulithian",
36842,
"poz-mic",
"Latn",
}
m["ulk"] = {
"Meriam",
788174,
"paa-etf",
"Latn",
}
m["ull"] = {
"Ullatan",
8761579,
"dra-mal",
}
m["ulm"] = {
"Ulumanda'",
3501892,
"poz-ssw",
"Latn",
}
m["uln"] = {
"Unserdeutsch",
13244,
"crp",
"Latn",
ancestors = "de",
}
m["ulu"] = {
"Uma' Lung",
3548186,
"poz-swa",
}
m["ulw"] = {
"Ulwa (Nicaragua)",
2405552,
"nai-min",
"Latn",
}
m["uma"] = {
"Umatilla",
12953952,
"nai-shp",
"Latn",
ancestors = "nai-spt",
}
m["umb"] = {
"Umbundu",
36983,
"bnt",
"Latn",
}
m["umc"] = {
"Marrucinian",
36110,
"itc-sbl",
"Ital, Latn",
-- Ital translit in [[Module:scripts/data]]
display_text = {
Latn = s["itc-Latn-displaytext"]
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"]
},
sort_key = {
Latn = s["itc-Latn-sortkey"]
},
}
m["umd"] = {
"Umbindhamu",
7881346,
"aus-pmn",
"Latn",
}
m["umg"] = {
"Umbuygamu",
3915677,
"aus-pmn",
"Latn",
}
m["umi"] = {
"Ukit",
7878321,
nil,
"Latn",
}
m["umm"] = {
"Umon",
3915448,
"nic-ucn",
"Latn",
}
m["umn"] = {
"Makyan Naga",
6740516,
"sit-kch",
}
m["umo"] = {
"Umotína",
7881740,
"sai-mje",
}
m["ump"] = {
"Umpila",
12953954,
"aus-pmn",
"Latn",
}
m["umr"] = {
"Umbugarla",
2980392,
}
m["ums"] = {
"Pendau",
7162371,
"poz-tot",
"Latn",
}
m["umu"] = {
"Munsee",
56547,
"del",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.breve},
}
m["una"] = {
"North Watut",
15887898,
"poz-ocw",
"Latn",
}
m["und"] = {
"Undetermined",
22282914,
"qfa-not",
"All",
}
m["une"] = {
"Uneme",
3913357,
"alv-yek",
"Latn",
}
m["ung"] = {
"Ngarinyin",
1284885,
"aus-wor",
"Latn",
}
m["uni"] = {
"Uni",
65043886,
"paa-pio",
"Latn",
}
m["unk"] = {
"Enawené-Nawé",
3307184,
"awd",
"Latn",
}
m["unm"] = {
"Unami",
3549180,
"del",
"Latn",
--[===[Don't strip diacritics from display text, per [[WT:Grease pit/2020/May]].
strip_diacritics = {remove_diacritics = c.grave .. c.diaer},]===]
}
m["unn"] = {
"Kurnai",
61676882,
"aus-pam",
"Latn",
}
m["unr"] = {
"Mundari",
3327828,
"mun",
"Nagm, Deva, Onao", -- Onao is used by Bhumij, which may be a separate language; remove if it gets split out
translit = "hi-translit", -- for now
}
m["unu"] = {
"Unubahe",
7897776,
}
m["unx"] = {
"Munda",
36264959,
"mun",
"Latn",
}
m["unz"] = {
"Unde Kaili",
12953596,
"poz-kal",
"Latn",
}
m["uok"] = {
"Uokha",
3441216,
"alv-edo",
"Latn",
}
m["uon"] = {
"Kulon",
11182000,
"map",
"Latn",
}
m["upi"] = {
"Umeda",
7881465,
"paa-war",
"Latn",
}
m["upv"] = {
"Northeast Malakula",
13249,
"poz-vnc",
"Latn",
}
m["ura"] = {
"Urarina",
1579560,
}
m["urb"] = {
"Urubú-Kaapor",
13893353,
"tup-gua",
"Latn",
}
m["urc"] = {
"Urningangg",
10710522,
}
m["ure"] = {
"Uru",
2992892,
}
m["urf"] = {
"Uradhi",
3915680,
"aus-pam",
"Latn",
}
m["urg"] = {
"Urigina",
7900603,
"ngf-pek",
"Latn",
}
m["urh"] = {
"Urhobo",
36663,
"alv-swd",
"Latn",
}
m["uri"] = {
"Urim",
7900609,
"paa-trr",
"Latn",
}
m["urk"] = {
"Urak Lawoi'",
7899573,
"poz-mly",
"Thai",
sort_key = "Thai-sortkey",
}
m["url"] = {
"Urali",
7899602,
"dra-kod",
"Knda",
-- Knda translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["urm"] = {
"Urapmin",
7899769,
"ngf-mok",
"Latn",
}
m["urn"] = {
"Uruangnirin",
7901389,
"poz-cet",
"Latn",
}
m["uro"] = {
"Ura (New Guinea)",
3121049,
"paa-bai",
"Latn",
}
m["urp"] = {
"Uru-Pa-In",
7901376,
"tup-gua",
"Latn",
}
m["urr"] = {
"Löyöp",
3272124,
"poz-vnn",
"Latn",
}
m["urt"] = {
"Urat",
3502084,
"paa-trr",
"Latn",
}
m["uru"] = {
"Urumi",
7901530,
"tup",
"Latn",
}
m["urv"] = {
"Uruava",
36875,
"poz-ocw",
"Latn",
}
m["urw"] = {
"Sop",
7562808,
"ngf-pek",
"Latn",
}
m["urx"] = {
"Urimo",
7900611,
"paa-mar",
"Latn",
}
m["ury"] = {
"Orya",
7105295,
"paa-too",
"Latn",
}
m["urz"] = {
"Uru-Eu-Wau-Wau",
10266012,
"tup-gua",
"Latn",
}
m["usa"] = {
"Usarufa",
7901714,
"ngf-gau",
"Latn",
}
m["ush"] = {
"Ushojo",
3540446,
"inc-shn",
"ur-Arab",
}
m["usi"] = {
"Usui",
12644231,
}
m["usk"] = {
"Usaghade",
3914048,
"nic-lcr",
"Latn",
}
m["usp"] = {
"Uspanteco",
36728,
"myn",
"Latn",
}
m["uss"] = {
"Saare",
63313662,
"nic-knn",
"Latn",
}
m["usu"] = {
"Uya",
7904082,
"ngf-nur",
"Latn",
}
m["uta"] = {
"Otank",
3913990,
"nic-tvc",
"Latn",
}
m["ute"] = {
"Ute",
13260,
"azc-num",
"Latn",
}
m["uth"] = {
"Hun",
63313668,
"nic-knn",
"Latn",
}
m["utp"] = {
"Aba",
2841465,
"poz-tem",
"Latn",
}
m["utr"] = {
"Etulo",
35262,
"alv-ido",
"Latn",
}
m["utu"] = {
"Utu",
7903469,
"ngf-usi",
"Latn",
}
m["uum"] = {
"Urum",
13257,
"trk-kcu",
"Cyrl",
translit = "uum-translit",
}
m["uur"] = {
"Ura (Vanuatu)",
7899531,
"poz-vns",
"Latn",
}
m["uuu"] = {
"U",
953082,
"mkh-pal",
}
m["uve"] = {
"West Uvean",
36837,
"poz-pnp",
"Latn",
}
m["uvh"] = {
"Uri",
7900540,
"ngf-era",
"Latn",
}
m["uvl"] = {
"Lote",
3259972,
"poz-ocw",
"Latn",
}
m["uwa"] = {
"Kuku-Uwanh",
3915687,
"aus-pmn",
"Latn",
}
m["uya"] = {
"Doko-Uyanga",
7904095,
"nic-ucr",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
3oda5x9aa99bfo2zgt1m3fng4tu86ux
Mòideal:languages/data/3/e
828
16746
86265
2026-07-22T02:11:12Z
Altronic
4137
Copy from English Wiktionary
86265
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["ebg"] = {
"Ebughu",
35294,
"nic-lcr",
"Latn",
}
m["ebk"] = {
"Eastern Bontoc",
62664215,
"phi",
"Latn",
}
m["ebr"] = {
"Ebrié",
36644,
"alv-ptn",
"Latn",
}
m["ebu"] = {
"Embu",
35318,
"bnt-kka",
"Latn",
}
m["ecr"] = {
"Eteocretan",
35461,
"qfa-unc",
"Polyt",
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ecs"] = {
"Ecuadorian Sign Language",
3436769,
"sgn",
"Latn", -- when documented
}
m["ecy"] = {
"Eteocypriot",
35309,
"qfa-unc",
"Cprt",
}
m["eee"] = {
"E",
35386,
"qfa-mix",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["efa"] = {
"Efai",
3813297,
"nic-ief",
"Latn",
}
m["efe"] = {
"Efe",
56354,
"csu-mle",
"Latn",
}
m["efi"] = {
"Efik",
35377,
"nic-ief",
"Latn",
}
m["ega"] = {
"Ega",
3914927,
"alv",
"Latn",
}
m["egl"] = {
"Emilian",
1057898,
"roa-emr",
ancestors = "egl-old",
"Latn",
wikimedia_codes = "eml",
}
m["ego"] = {
"Eggon",
35300,
"nic-pls",
"Latn",
}
m["egy"] = {
"Egyptian",
50868,
"egx",
"Latn, Egyp, Egyh",
sort_key = {
remove_diacritics = "'%-%s",
from = {"ꜣ", "j", "y", "ꜥ", "w", "b", "p", "f", "m", "n", "r", "ḥ", "ḫ", "ẖ", "h", "z", "š", "s", "q", "k", "g", "ṯ", "t", "ḏ", "d", "%."},
to = {p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[13], p[14], p[15], p[12], p[16], p[18], p[17], p[19], p[20], p[21], p[23], p[22], p[25], p[24], p[26]}
},
}
m["ehu"] = {
"Ehueun",
3441392,
"alv-nwd",
"Latn",
}
m["eip"] = {
"Eipomek",
5349839,
"ngf-mek",
"Latn",
}
m["eit"] = {
"Eitiep",
5350030,
"paa-kom",
"Latn",
}
m["eiv"] = {
"Askopan",
56324,
"paa-nbo",
"Latn",
}
m["eja"] = {
"Ejamat",
6269820,
"alv-jfe",
"Latn",
}
m["eka"] = {
"Ekajuk",
35250,
"nic-eko",
"Latn",
}
m["eke"] = {
"Ekit",
3509628,
"nic-ief",
"Latn",
}
m["ekg"] = {
"Ekari",
5350305,
"ngf-pan",
"Latn",
}
m["eki"] = {
"Eki",
5350418,
"nic-ief",
"Latn",
}
m["ekl"] = {
"Kolhe",
6426945,
"mun",
"Latn",
}
m["ekm"] = {
"Elip",
12952414,
"nic-ymb",
"Latn",
}
m["eko"] = {
"Koti",
29930,
"bnt-mak",
"Latn",
}
m["ekp"] = {
"Ekpeye",
35254,
"alv-igb",
"Latn",
}
m["ekr"] = {
"Yace",
36901,
"alv-ido",
"Latn",
}
m["eky"] = {
"Eastern Kayah",
25559417,
"kar",
"Kali",
}
m["ele"] = {
"Elepi",
5359444,
"paa-mar",
"Latn",
}
m["elh"] = {
"El Hugeirat",
5351410,
"nub-hil",
"Latn",
}
m["eli"] = {
"Nding",
36176,
"alv-tal",
"Latn",
}
m["elk"] = {
"Elkei",
5364210,
"paa-wap",
"Latn",
}
m["elm"] = {
"Eleme",
3914427,
"nic-ogo",
"Latn",
}
m["elo"] = {
"El Molo",
56719,
"cus-eas",
"Latn",
}
m["elu"] = {
"Elu",
3364594,
"poz-aay",
"Latn",
}
m["elx"] = {
"Elamite",
35470,
"qfa-iso", --ancient language of Iran
"Xsux",
}
m["ema"] = {
"Emai",
35428,
"alv-eeo",
"Latn",
}
m["emb"] = {
"Embaloh",
5369424,
"poz",
"Latn",
}
m["eme"] = {
"Emerillon",
3588942,
"tup-gua",
"Latn",
}
m["emg"] = {
"Eastern Meohang",
12952840,
"sit-kie",
"Deva",
}
m["emi"] = {
"Mussau-Emira",
6943093,
"poz-stm",
"Latn",
}
m["emk"] = {
"Eastern Maninkakan",
11002130,
"dmn-mnk",
"Latn, Arab, Nkoo",
}
m["emm"] = {
"Mamulique",
3285082,
"nai-pak",
"Latn",
}
m["emn"] = {
"Eman",
5368975,
"nic-tvc",
"Latn",
}
m["emp"] = {
"Northern Emberá",
2391297,
"sai-chc",
"Latn",
}
m["ems"] = {
"Alutiiq",
27992,
"ypk",
"Latn",
}
m["emu"] = {
"Eastern Muria",
12952883,
"dra-mur",
"Deva",
}
m["emw"] = {
"Emplawas",
5374265,
"poz-tim",
"Latn",
}
m["emx"] = {
"Erromintxela",
1122188,
"qfa-mix",
"Latn",
ancestors = "rom, eu",
}
m["emy"] = {
"Epigraphic Mayan",
301355,
"myn",
"Latn, Maya",
}
m["ena"] = {
"Apali",
3504201,
"ngf-sog",
"Latn",
}
m["enb"] = {
"Markweeta",
56874,
"sdv-nma",
"Latn",
}
m["enc"] = {
"En",
3504110,
"qfa-buy",
"Latn",
}
m["end"] = {
"Ende",
2067656,
"poz-cet",
"Latn",
}
m["enf"] = {
"Forest Enets",
30249597,
"syd-ene",
"Cyrl",
}
m["enh"] = {
"Tundra Enets",
25559411,
"syd-ene",
"Cyrl",
}
m["enl"] = {
"Enlhet",
15462671,
"sai-mas",
"Latn",
}
m["enm"] = {
"Middle English",
36395,
"gmw-ang",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.breve .. c.dotabove .. c.diaer .. c.dacute .. c.dotbelow .. c.tacute},
sort_key = {
remove_diacritics = c.acute .. c.circ .. c.macron .. c.breve .. c.dotabove .. c.diaer .. c.dacute .. c.dotbelow .. c.tacute,
from = {"[ꟓꟕ]", "[æðᵹꟑȝœẜþꟃƿ]"},
to = {
{
["ꟓ"] = "þþ", ["ꟕ"] = "ƿƿ", -- finalized by the next substitution
},
{
["æ"] = "ae", ["ð"] = "d" .. p[1], ["ᵹ"] = "g", ["ꟑ"] = "g", ["ȝ"] = "g" .. p[1],
["œ"] = "oe", ["ẜ"] = "s", ["þ"] = "t" .. p[1], ["ꟃ"] = "w", ["ƿ"] = "w",
},
},
},
standard_chars = {
Latn = "AaÆæBbCcDdÐðEeFfGgȜȝHhIiJjKkLlMmNnOoPpQqRrSsTtÞþUuVvWwXxYyZz",
c.punc,
},
}
m["enn"] = {
"Engenni",
3915365,
"alv-dlt",
"Latn",
}
m["eno"] = {
"Enggano",
2669164,
"poz",
"Latn",
}
m["enq"] = {
"Enga",
1143040,
"ngf-enc",
"Latn",
}
m["enr"] = {
"Emem",
5370369,
"paa-epw",
"Latn",
}
m["enu"] = {
"Enu",
5380858,
"tbq-bka",
}
m["env"] = {
"Enwan",
3438334,
"alv-yek",
"Latn",
}
m["enw"] = {
"Enwang",
11134434,
"nic-lcr",
"Latn",
}
m["enx"] = {
"Enxet",
15462609,
"sai-mas",
"Latn",
}
m["eot"] = {
"Eotile",
3915347,
"alv-ptn",
"Latn",
}
m["epi"] = {
"Epie",
35291,
"alv-dlt",
"Latn",
}
m["era"] = {
"Eravallan",
5385061,
"dra-tam",
"Taml",
}
m["erg"] = {
"Sie",
426254,
"poz-vns",
"Latn",
}
m["erh"] = {
"Eruwa",
3441244,
"alv-swd",
"Latn",
}
m["eri"] = {
"Ogea",
7079984,
"ngf-nur",
"Latn",
}
m["erk"] = {
"South Efate",
3449070,
"poz-vnc",
"Latn",
}
m["err"] = {
"Erre",
10488401,
"qfa-iso", -- Evans (1997) put it in an Arnhem Land family
"Latn",
}
m["ers"] = {
"Ersu",
12952417,
"sit-ers",
"Latn", -- also Ersu Shaba
}
m["ert"] = {
"Eritai",
56376,
"paa-clp",
"Latn",
}
m["erw"] = {
"Erokwanas",
5395296,
"poz-hce",
"Latn",
}
m["ese"] = {
"Ese Ejja",
2980381,
"sai-tac",
"Latn",
}
m["esh"] = {
"Eshtehardi",
12952418,
"xme-ttc",
"fa-Arab, Latn",
ancestors = "xme-ttc-sou",
}
-- "esi" and "esk" moved to etymology-only per [[WT:LT]] and [[Wiktionary:Beer_parlour/2023/August#Issues_regarding_the_Inuit_languages]]
m["esl"] = {
"Egyptian Sign Language",
5348443,
"sgn",
}
m["esm"] = {
"Esuma",
16927555,
"alv-kwa",
"Latn",
}
m["esn"] = {
"Salvadoran Sign Language",
7406492,
"sgn",
"Latn", -- when documented
}
m["eso"] = {
"Estonian Sign Language",
3196221,
"sgn",
"Latn", -- when documented
}
m["esq"] = {
"Esselen",
1294243,
"qfa-dis", -- isolate or Hokan
"Latn",
}
m["ess"] = {
"Central Siberian Yupik",
27993,
"ypk",
"Cyrl, Latn",
}
m["esu"] = {
"Yup'ik",
21117,
"ypk",
"Latn",
}
m["esy"] = {
"Eskayan",
867086,
"art",
"Latn", -- also its own native script
}
m["etb"] = {
"Etebi",
11002851,
"nic-ief",
"Latn",
}
m["etc"] = {
"Etchemin",
5402493,
"alg-eas",
"Latn",
}
m["eth"] = {
"Ethiopian Sign Language",
3501903,
"sgn-asl",
}
m["etn"] = {
"Eton (Vanuatu)",
3059362,
"poz-vnc",
"Latn",
}
m["eto"] = {
"Eton (Cameroon)",
35317,
"bnt-btb",
"Latn",
}
m["etr"] = {
"Edolo",
5340184,
"ngf-bos",
"Latn",
}
m["ets"] = {
"Yekhee",
3915848,
"alv-yek",
"Latn",
}
m["ett"] = {
"Etruscan",
35726,
"qfa-tyn",
"Ital",
-- Ital translit in [[Module:scripts/data]]
}
m["etu"] = {
"Ejagham",
35296,
"nic-eko",
"Latn",
}
m["etx"] = {
"Eten",
3915392,
"nic-beo",
"Latn",
}
m["etz"] = {
"Semimi",
10950308,
"paa-mai",
"Latn",
}
m["eve"] = {
"Even",
29960,
"tuw-ewe",
"Cyrl, Latn",
translit = {Cyrl = "eve-translit"},
strip_diacritics = {remove_diacritics = c.macron .. c.dotabove .. c.dotbelow},
sort_key = {
Cyrl = {
from = {
"ӫ", -- 2 chars
"ё", "ӈ", "ө" -- 1 char
},
to = {
"о" .. p[2],
"е" .. p[1], "н" .. p[1], "о" .. p[1]
},
},
},
}
m["evh"] = {
"Uvbie",
3441344,
"alv-swd",
"Latn",
}
m["evn"] = {
"Evenki",
30004,
"tuw-ewe",
"Cyrl, Latn",
translit = "evn-translit",
strip_diacritics = {remove_diacritics = c.macron .. c.dotabove .. c.dotbelow},
sort_key = {
from = {"ё", "ӈ"},
to = {"е" .. p[1], "н" .. p[1]}
},
}
m["ewo"] = {
"Ewondo",
35459,
"bnt-btb",
"Latn",
}
m["ext"] = {
"Extremaduran",
30007,
"roa-asl",
"Latn",
}
m["eya"] = {
"Eyak",
27480,
"xnd",
"Latn",
}
m["eyo"] = {
"Keiyo",
56856,
"sdv-nma",
"Latn",
}
m["eza"] = {
"Ezaa",
11921436,
"alv-igb",
"Latn",
ancestors = "izi",
}
m["eze"] = {
"Uzekwe",
3502244,
"nic-ucn",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
feiu1t2rw1i1c85mkvycmqbvennzxmg
Mòideal:languages/data/3/k
828
16747
86266
2026-07-22T02:14:02Z
Altronic
4137
Copy from English Wiktionary
86266
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["kaa"] = {
"Karakalpak",
33541,
"trk-kno",
"Latn, Cyrl, fa-Arab",
dotted_dotless_i = true,
strip_diacritics = {
from = {"['’]"},
to = {"ʼ"}
},
sort_key = {
Latn = {
from = {
-- Sort the old orthography (using the apostrophe) after the new orthography (using the acute accent).
"í", "iʼ", "i", -- Ensure "i" comes after "í", "iʼ", "ı".
"sh", "ch",
"á", "aʼ", "ǵ", "gʼ", "x", p[4], p[5], "ı", "q", "ń", "nʼ", "ó", "oʼ", "ú", "uʼ", "c"
},
to = {
p[4], p[5], "i" .. p[3],
"z" .. p[1], "z" .. p[3],
"a" .. p[1], "a" .. p[2], "g" .. p[1], "g" .. p[2], "h" .. p[1], "i", "i" .. p[1], "i" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1], "u" .. p[2], "z" .. p[2]
}
},
Cyrl = {
from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ү", "ў", "ҳ"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1]}
},
},
}
m["kab"] = {
"Kabyle",
35853,
"ber",
"Latn, Arab, Tfng",
}
m["kac"] = {
"Jingpho",
33332,
"sit-jnp",
"Latn, Mymr",
}
m["kad"] = {
"Kadara",
3914011,
"nic-plc",
"Latn",
}
m["kae"] = {
"Ketangalan",
2779411,
"map",
}
m["kaf"] = {
"Katso",
246122,
"tbq-kzh",
}
m["kag"] = {
"Kajaman",
6348863,
"poz",
"Latn",
}
m["kah"] = {
"Fer",
5443742,
"csu-bgr",
"Latn",
}
m["kai"] = {
"Karekare",
3438770,
"cdc-wst",
"Latn",
}
m["kaj"] = {
"Jju",
35401,
"nic-plc",
"Latn",
}
m["kak"] = {
"Kayapa Kallahan",
3192220,
"phi",
"Latn",
}
m["kam"] = {
"Kamba",
2574767,
"bnt-kka",
"Latn",
}
m["kao"] = {
"Kassonke",
36905,
"dmn-wmn",
"Latn",
}
m["kap"] = {
"Bezhta",
33054,
"cau-ets",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["kaq"] = {
"Capanahua",
2937196,
"sai-pan",
"Latn",
}
m["kaw"] = {
"Old Javanese",
49341,
"poz",
"Latn, Java, Kawi",
translit = "jv-translit", --same as jv
}
m["kax"] = {
"Kao",
3192799,
"paa-gto",
"Latn",
}
m["kay"] = {
"Kamayurá",
3192336,
"tup-gua",
"Latn",
}
m["kba"] = {
"Kalarko",
5517764,
"aus-pam",
"Latn",
}
m["kbb"] = {
"Kaxuyana",
12953626,
"sai-prk",
"Latn",
}
m["kbc"] = {
"Kadiwéu",
18168288,
"sai-guc",
"Latn",
}
m["kbd"] = {
"East Circassian",
33522,
"cau-cir",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "cau-cir-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"кхъу", "къӏу", -- 4 chars
"гъу", "джу", "дзу", "жъу", "къу", "кхъ", "къӏ", "кӏу", "кӏь", "лъу", "лӏу", "пӏу", "сӏу", "тӏу", "фӏу", "хъу", "цӏу", "чъу", "чӏу", "шъу", "шӏу", "щӏу", -- 3 chars
"гу", "гъ", "гь", "дж", "дз", "ё", "жъ", "жь", "ку", "къ", "кь", "кӏ", "лъ", "ль", "лӏ", "пӏ", "сӏ", "тӏ", "фӏ", "ху", "хъ", "хь", "цу", "цӏ", "чу", "чъ", "чӏ", "шъ", "шӏ", "щӏ", "ӏу", "ӏь", -- 2 chars
"э" -- 1 char
},
to = {
"к" .. p[5], "к" .. p[7],
"г" .. p[3], "д" .. p[2], "д" .. p[4], "ж" .. p[2], "к" .. p[3], "к" .. p[4], "к" .. p[6], "к" .. p[10], "к" .. p[11], "л" .. p[2], "л" .. p[5], "п" .. p[2], "с" .. p[2], "т" .. p[2], "ф" .. p[2], "х" .. p[3], "ц" .. p[3], "ч" .. p[3], "ч" .. p[5], "ш" .. p[2], "ш" .. p[4], "щ" .. p[2],
"г" .. p[1], "г" .. p[2], "г" .. p[4], "д" .. p[1], "д" .. p[3], "е" .. p[1], "ж" .. p[1], "ж" .. p[3], "к" .. p[1], "к" .. p[2], "к" .. p[8], "к" .. p[9], "л" .. p[1], "л" .. p[3], "л" .. p[4], "п" .. p[1], "с" .. p[1], "т" .. p[1], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[4], "ц" .. p[1], "ц" .. p[2], "ч" .. p[1], "ч" .. p[2], "ч" .. p[4], "ш" .. p[1], "ш" .. p[3], "щ" .. p[1], "ӏ" .. p[1], "ӏ" .. p[2],
"а" .. p[1]
}
},
},
}
m["kbe"] = {
"Kanju",
10543322,
"aus-pam",
"Latn",
}
m["kbh"] = {
"Camsá",
2842667,
"qfa-iso",
"Latn",
}
m["kbi"] = {
"Kaptiau",
6367294,
"poz-oce",
"Latn",
}
m["kbj"] = {
"Kari",
6370438,
"bnt-boa",
"Latn",
}
m["kbk"] = {
"Grass Koiari",
12952642,
"ngf-koi",
"Latn",
}
m["kbm"] = {
"Iwal",
3156391,
"poz-ocw",
"Latn",
}
m["kbn"] = {
"Kare (Central Africa)",
35554,
"alv-mbm",
"Latn",
}
m["kbo"] = {
"Keliko",
11275553,
"csu-mma",
"Latn",
}
m["kbp"] = {
"Kabiye",
35475,
"nic-gne",
"Latn",
}
m["kbq"] = {
"Kamano",
11732272,
"ngf-kya",
"Latn",
}
m["kbr"] = {
"Kafa",
35481,
"omv-gon",
"Ethi, Latn",
}
m["kbs"] = {
"Kande",
35556,
"bnt-tso",
"Latn",
}
m["kbt"] = {
"Gabadi",
3291159,
"poz-ocw",
"Latn",
}
m["kbu"] = {
"Kabutra",
10966761,
"raj",
}
m["kbv"] = {
"Kamberataro",
5261289,
"paa-sng",
"Latn",
}
m["kbw"] = {
"Kaiep",
6347632,
"poz-ocw",
"Latn",
}
m["kbx"] = {
"Ap Ma",
56298,
"paa-eke",
"Latn",
}
m["kbz"] = {
"Duhwa",
56295,
"cdc-wst",
"Latn",
}
m["kcb"] = {
"Kawacha",
11732302,
"ngf-woj",
"Latn",
}
m["kcc"] = {
"Lubila",
3914381,
"nic-uce",
"Latn",
}
m["kcd"] = {
"Ngkâlmpw Kanum",
12952566,
"paa-ngk",
"Latn",
}
m["kce"] = {
"Kaivi",
6348685,
"nic-kau",
"Latn",
}
m["kcf"] = {
"Ukaan",
36651,
"nic-bco",
"Latn",
}
m["kcg"] = {
"Tyap",
3912765,
"nic-plc",
"Latn",
}
m["kch"] = {
"Vono",
3913920,
"nic-kau",
"Latn",
}
m["kci"] = {
"Kamantan",
3914019,
"nic-plc",
}
m["kcj"] = {
"Kobiana",
35609,
"alv-nyn",
"Latn",
}
m["kck"] = {
"Kalanga",
33672,
"bnt-sho",
"Latn",
}
m["kcl"] = {
"Kala",
6349982,
"poz-ocw",
"Latn",
}
m["kcm"] = {
"Tar Gula",
277963,
"csu-bba",
}
m["kcn"] = {
"Nubi",
36388,
"crp",
"Latn, Arab",
ancestors = "apd",
strip_diacritics = {remove_diacritics = c.acute},
}
m["kco"] = {
"Kinalakna",
11732320,
"ngf-dal",
"Latn",
}
m["kcp"] = {
"Kanga",
6362384,
"qfa-kad",
"Latn",
}
m["kcq"] = {
"Kamo",
3914879,
"alv-wjk",
}
m["kcr"] = {
"Katla",
35688,
"nic-ktl",
"Latn",
}
m["kcs"] = {
"Koenoem",
3438755,
"cdc-wst",
}
m["kct"] = {
"Kaian",
6347538,
"paa-ott",
"Latn",
}
m["kcu"] = {
"Kikami",
3915212,
"bnt-ruv",
"Latn",
}
m["kcv"] = {
"Kete",
3195598,
"bnt-lub",
"Latn",
}
m["kcw"] = {
"Kabwari",
6344539,
"bnt-glb",
"Latn",
}
m["kcx"] = {
"Kachama-Ganjule",
12634070,
"omv-eom",
}
m["kcy"] = {
"Korandje",
33427,
"son",
}
m["kcz"] = {
"Konongo",
11732345,
"bnt-tkm",
"Latn",
}
m["kda"] = {
"Worimi",
3914062,
"aus-pam",
"Latn",
}
m["kdc"] = {
"Kutu",
6448634,
"bnt-ruv",
}
m["kdd"] = {
"Yankunytjatjara",
34207,
"aus-pam",
"Latn",
}
m["kde"] = {
"Makonde",
35172,
"bnt-rvm",
"Latn",
}
m["kdf"] = {
"Mamusi",
6746036,
"poz-ocw",
"Latn",
}
m["kdg"] = {
"Seba",
7442316,
"bnt-sbi",
"Latn",
}
m["kdh"] = {
"Tem",
36531,
"nic-gne",
"Latn",
}
m["kdi"] = {
"Kumam",
6443410,
"sdv-los",
}
m["kdj"] = {
"Karamojong",
56326,
"sdv-ttu",
"Latn",
}
m["kdk"] = {
"Numèè",
3346774,
"poz-cln",
"Latn",
}
m["kdl"] = {
"Tsikimba",
3914404,
"nic-kam",
}
m["kdm"] = {
"Kagoma",
3914420,
"nic-plc",
}
m["kdn"] = {
"Kunda",
4121130,
"bnt-sna",
"Latn",
}
m["kdp"] = {
"Kaningdon-Nindem",
3914956,
"nic-nin",
}
m["kdq"] = {
"Koch",
56431,
"tbq-bdg",
}
m["kdr"] = {
"Karaim",
33725,
"trk-kcu",
"Cyrl, Latn, Hebr",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["kdt"] = {
"Kuy",
56310,
"mkh-kat",
"Thai, Khmr, Laoo",
}
m["kdu"] = {
"Kadaru",
35441,
"nub-hil",
"Latn",
}
m["kdv"] = {
"Kado",
7402721,
"sit-luu",
}
m["kdw"] = {
"Koneraw",
11732341,
"ngf-mom",
"Latn",
}
m["kdx"] = {
"Kam",
36753,
"alv-wjk",
}
m["kdy"] = {
"Keder",
6383641,
"paa-tor",
"Latn",
}
m["kdz"] = {
"Kwaja",
11128866,
"nic-nka",
"Latn",
}
m["kea"] = {
"Kabuverdianu",
35963,
"crp",
"Latn",
ancestors = "pt",
}
m["keb"] = {
"Kélé",
35559,
"bnt-kel",
}
m["kec"] = {
"Keiga",
3409311,
"qfa-kad",
"Latn",
}
m["ked"] = {
"Kerewe",
6393846,
"bnt-haj",
}
m["kee"] = {
"Eastern Keres",
15649021,
"nai-ker",
"Latn",
}
m["kef"] = {
"Kpessi",
35748,
"alv-gbe",
}
m["keg"] = {
"Tese",
16887296,
"sdv",
}
m["keh"] = {
"Keak",
6382110,
"paa-nnd",
"Latn",
}
m["kei"] = {
"Kei",
2410352,
"poz-cet",
"Latn",
}
m["kej"] = {
"Kadar",
6345179,
"dra-mal",
}
m["kek"] = {
"Q'eqchi",
35536,
"myn",
"Latn",
}
m["kel"] = {
"Kela-Yela",
6385426,
"bnt-mon",
"Latn",
}
m["kem"] = {
"Kemak",
35549,
"poz-tim",
"Latn",
}
m["ken"] = {
"Kenyang",
35650,
"nic-mam",
"Latn",
}
m["keo"] = {
"Kakwa",
3033547,
"sdv-bri",
"Latn",
}
m["kep"] = {
"Kaikadi",
6347757,
"dra-tam",
}
m["keq"] = {
"Kamar",
14916877,
"inc-hal",
}
m["ker"] = {
"Kera",
56251,
"cdc-est",
"Latn",
}
m["kes"] = {
"Kugbo",
3813394,
"nic-cde",
"Latn",
}
m["ket"] = {
"Ket",
33485,
"qfa-yke",
"Cyrl",
strip_diacritics = {
from = {"['’]"},
to = {"ʼ"}
},
sort_key = {
from = {"ӷ", "ё", "ӄ", "ӈ", "ө", "ә", "ʼ"},
to = {"г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "ъ" .. p[1], "ь" .. p[1]}
},
}
m["keu"] = {
"Akebu",
35026,
"alv-ktg",
"Latn",
}
m["kev"] = {
"Kanikkaran",
6363201,
"dra-mal",
"Taml, Mlym",
-- Mlym translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["kew"] = {
"Kewa",
12952619,
"ngf-ank",
"Latn",
}
m["kex"] = {
"Kukna",
5031131,
"inc-bhi",
wikipedia_article = "Dhodia–Kukna language",
}
m["key"] = {
"Kupia",
6445354,
"inc-eas",
}
m["kez"] = {
"Kukele",
3915391,
"nic-ucn",
"Latn",
}
m["kfa"] = {
"Kodava",
33531,
"dra-kod",
"Knda, Mlym",
-- Knda translit in [[Module:scripts/data]]
-- Mlym translit in [[Module:scripts/data]]
}
m["kfb"] = {
"Kolami",
33479,
"dra-knk",
"Deva, Telu",
translit = {
Telu = "te-translit",
},
}
m["kfc"] = {
"Konda-Dora",
35679,
"dra-kki",
"Orya, Telu",
translit = {
Orya = "gon-Orya-translit",
Telu = "te-translit",
},
}
m["kfd"] = {
"Korra Koraga",
12952655,
"dra-kor",
"Knda",
-- Knda translit in [[Module:scripts/data]]
}
m["kfe"] = {
"Kota (India)",
33483,
"dra-tkt",
"Taml",
translit = "ta-translit",
}
m["kff"] = {
"Koya",
33471,
"dra-gon",
"Telu, Orya, Deva, Latn",
}
m["kfg"] = {
"Kudiya",
12952667,
"dra-tlk",
}
m["kfh"] = {
"Kurichiya",
12952676,
"dra-mal",
"Mlym",
-- Mlym translit in [[Module:scripts/data]]
}
m["kfi"] = {
"Kannada Kurumba",
56589,
"dra-sdo",
}
m["kfj"] = {
"Kemiehua",
27144776,
"mkh-pal",
}
m["kfk"] = {
"Kinnauri",
2383208,
"sit-kin",
"Takr, Deva, Latn",
}
m["kfl"] = {
"Kung",
6444510,
"nic-rnc",
"Latn",
}
m["kfn"] = {
"Kuk",
6442398,
"nic-rnc",
"Latn",
}
m["kfo"] = {
"Koro (West Africa)",
11160588,
"dmn-mnk",
"Latn, Nkoo",
}
m["kfp"] = {
"Korwa",
6432786,
"mun",
}
m["kfq"] = {
"Korku",
33715,
"mun",
"Deva",
}
m["kfr"] = {
"Kachchi",
56487,
"inc-snd",
"Gujr, sd-Arab, Sind, Khoj",
translit = {
Gujr = "gu-translit",
Sind = "Sind-translit",
["sd-Arab"] = "sd-Arab-translit",
},
strip_diacritics = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {u(0x0671)},
to = {u(0x0627)}
},
}
m["kfs"] = {
"Bilaspuri",
12953397,
"him",
"Deva, Takr",
translit = "hi-translit",
}
m["kft"] = {
"Kanjari",
12953610,
"inc-pan",
ancestors = "pa",
}
m["kfu"] = {
"Katkari",
6377671,
"inc-sou",
}
m["kfv"] = {
"Kurmukar",
6446193,
"inc-eas",
}
m["kfw"] = {
"Kharam Naga",
12952906,
"tbq-kuk",
}
m["kfx"] = {
"Kullu Pahari",
6443148,
"him",
"Deva",
translit = "hi-translit",
}
m["kfy"] = {
"Kumaoni",
33529,
"inc-pah",
"Deva, Shrd, Takr",
-- Shrd translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["kfz"] = {
"Koromfé",
35701,
"nic-gur",
"Latn",
}
m["kga"] = {
"Koyaga",
11155632,
"dmn-mnk",
}
m["kgb"] = {
"Kawe",
12952750,
"poz-hce",
"Latn",
}
m["kgd"] = {
"Kataang",
12953622,
"mkh",
}
m["kge"] = {
"Komering",
49224,
"poz-lgx",
"Latn, Arab",
}
m["kgf"] = {
"Kube",
11732359,
"ngf-kto",
"Latn",
}
m["kgg"] = {
"Kusunda",
33630,
"qfa-iso", -- central Nepal
"Latn",
}
m["kgi"] = {
"Selangor Sign Language",
33731,
"sgn-asl",
}
m["kgj"] = {
"Gamale Kham",
22236996,
"sit-kha",
"Deva",
}
m["kgk"] = {
"Kaiwá",
3111883,
"gn",
"Latn",
}
m["kgl"] = {
"Kunggari",
10550184,
"aus-pam",
"Latn",
}
m["kgn"] = {
"Karingani",
6371041,
"xme-ttc",
"fa-Arab, Latn",
ancestors = "xme-ttc-nor",
}
m["kgo"] = {
"Krongo",
6438927,
"qfa-kad",
"Latn",
}
m["kgp"] = {
"Kaingang",
2665734,
"sai-sje",
"Latn",
}
m["kgq"] = {
"Kamoro",
6359001,
"ngf-ask",
"Latn",
}
m["kgr"] = {
"Abun",
56657,
"qfa-iso", -- Papuan; isolate in Ethnologue, Glottolog and Palmer (2018); grouped with West Papuan by Ross (2005)
"Latn",
}
m["kgs"] = {
"Kumbainggar",
3915412,
"aus-pam",
"Latn",
}
m["kgt"] = {
"Somyev",
3913354,
"nic-mmb",
"Latn",
}
m["kgu"] = {
"Kobol",
11732325,
"ngf-omo",
"Latn",
}
m["kgv"] = {
"Karas",
6368621,
"qfa-dis", -- Divergent Papuan language; grouped with Mbaham-Iha by Glottolog to form a (mainland) West Bomberai
-- family, but with Mbaham-Iha and Timor-Alor-Pantar by Wikipedia (following Usher and Schapper 2022)
-- into a (Greater) West Bomberai family.
"Latn",
}
m["kgw"] = {
"Karon Dori",
56817,
"paa-may",
"Latn",
}
m["kgx"] = {
"Kamaru",
12953604,
"poz-wot",
"Latn",
}
m["kgy"] = {
"Kyerung",
12952691,
"sit-kyk",
}
m["kha"] = {
"Khasi",
33584,
"aav-pkl",
"Latn, as-Beng",
}
m["khb"] = {
"Lü",
36948,
"tai-swe",
"Talu, Lana",
translit = {Talu = "Talu-translit"},
strip_diacritics = {remove_diacritics = c.ZWNJ},
sort_key = {
Talu = "Talu-sortkey",
Lana = "Lana-sortkey",
},
}
m["khc"] = {
"North Tukang Besi",
18611555,
"poz",
}
m["khd"] = {
"Bädi Kanum",
20888004,
"paa-ngk",
"Latn",
}
m["khe"] = {
"Korowai",
6432598,
"ngf-bda",
"Latn",
}
m["khf"] = {
"Khuen",
27144893,
"mkh",
}
m["khh"] = {
"Kehu",
10994953,
}
m["khj"] = {
"Kuturmi",
3914490,
"nic-plc",
"Latn",
}
m["khl"] = {
"Lusi",
3267788,
"poz-ocw",
"Latn",
}
m["khn"] = {
"Khandeshi",
33726,
"inc-sou",
}
m["kho"] = {
"Khotanese",
6583551,
"xsc-sak",
"Brah, Khar",
-- Brah translit in [[Module:scripts/data]]
}
m["khp"] = {
"Kapauri",
3502575,
"qfa-dis", -- isolate per Glottolog, possibly Greater Kwerba per Wikipedia in Kapauri-Sause family
"Latn",
}
m["khq"] = {
"Koyra Chiini",
33600,
"son",
"Latn, Arab",
}
m["khr"] = {
"Kharia",
3915562,
"mun",
}
m["khs"] = {
"Kasua",
6374863,
"ngf-bos",
"Latn",
}
m["kht"] = {
"Khamti",
3915502,
"tai-swe",
"Mymr",
display_text = s["kht-displaytext"],
strip_diacritics = s["kht-stripdiacritics"],
}
m["khu"] = {
"Nkhumbi",
11019169,
"bnt-swb",
}
m["khv"] = {
"Khvarshi",
56425,
"cau-wts",
"Cyrl",
translit = "khv-translit",
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["khw"] = {
"Khowar",
938216,
"inc-chi",
"Arab",
strip_diacritics = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
}
m["khx"] = {
"Kanu",
12952571,
"bnt-lgb",
}
m["khy"] = {
"Ekele",
6385549,
"bnt-ske",
"Latn",
}
m["khz"] = {
"Keapara",
12952603,
"poz-ocw",
"Latn",
}
m["kia"] = {
"Kim",
35685,
"alv-kim",
}
m["kib"] = {
"Koalib",
35859,
"alv-hei",
}
m["kic"] = {
"Kickapoo",
20162127,
"alg-sfk",
"Latn",
}
m["kid"] = {
"Koshin",
35632,
"nic-beb",
"Latn",
}
m["kie"] = {
"Kibet",
56893,
}
m["kif"] = {
"Eastern Parbate Kham",
12953022,
"sit-kha",
"Deva",
}
m["kig"] = {
"Kimaama",
11732321,
"paa-kol",
"Latn",
}
m["kih"] = {
"Kilmeri",
6408020,
"paa-bew",
"Latn",
}
m["kii"] = {
"Kitsai",
56627,
"cdd",
"Latn",
}
m["kij"] = {
"Kilivila",
3196601,
"poz-ocw",
"Latn",
}
m["kil"] = {
"Kariya",
3438708,
"cdc-wst",
}
m["kim"] = {
"Tofa",
36848,
"trk-ssb",
"Cyrl",
}
m["kio"] = {
"Kiowa",
56631,
"nai-kta",
"Latn",
}
m["kip"] = {
"Sheshi Kham",
12952622,
"sit-kha",
"Deva",
}
m["kiq"] = {
"Kosadle",
6432994,
"paa-kko",
"Latn",
}
m["kis"] = {
"Kis",
6416362,
"poz-ocw",
"Latn",
}
m["kit"] = {
"Agob",
3332143,
"paa-pah",
"Latn",
}
m["kiv"] = {
"Kimbu",
10997740,
"bnt-tkm",
}
m["kiw"] = {
"Northeast Kiwai",
11732324,
"paa-kiw",
"Latn",
}
m["kix"] = {
"Khiamniungan Naga",
6401546,
"sit-kch",
"Latn",
}
m["kiy"] = {
"Kirikiri",
6415159,
"paa-wlp",
"Latn",
}
m["kiz"] = {
"Kisi",
3912772,
"bnt-bki",
}
m["kja"] = {
"Mlap",
6885683,
"paa-nim",
"Latn",
}
m["kjb"] = {
"Q'anjob'al",
35551,
"myn",
"Latn",
}
m["kjc"] = {
"Coastal Konjo",
3198689,
"poz",
"Latn",
}
m["kjd"] = {
"Southern Kiwai",
11732322,
"paa-kiw",
"Latn",
}
m["kje"] = {
"Kisar",
3197441,
"poz",
"Latn",
}
m["kjg"] = {
"Khmu",
33335,
"mkh",
"Laoo",
ancestors = "mkh-khm-pro",
sort_key = "Laoo-sortkey",
}
m["kjh"] = {
"Khakas",
33575,
"trk-ssb",
"Cyrl",
translit = "kjh-translit",
override_translit = true,
}
m["kji"] = {
"Zabana",
379130,
"poz-ocw",
"Latn",
}
m["kjj"] = {
"Khinalug",
35278,
"cau-nec",
"Cyrl, Latn",
translit = "kjj-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
}
m["kjk"] = {
"Highland Konjo",
3198688,
"poz",
}
m["kjl"] = {
"Western Parbate Kham",
22237017,
"sit-kha",
"Deva",
}
m["kjm"] = {
"Kháng",
6403501,
"mkh-pal",
}
m["kjn"] = {
"Kunjen",
3200468,
"aus-pmn",
"Latn",
}
m["kjo"] = {
"Harijan Kinnauri",
5657463,
"him",
"Takr, Deva",
}
m["kjp"] = {
"Eastern Pwo",
5330390,
"kar",
"Mymr, Leke, Thai",
translit = "kjp-translit",
override_translit = true,
}
m["kjq"] = {
"Western Keres",
12645568,
"nai-ker",
"Latn",
}
m["kjr"] = {
"Kurudu",
12952678,
"poz-hce",
"Latn",
}
m["kjs"] = {
"East Kewa",
20050949,
"ngf-ank",
"Latn",
}
m["kjt"] = {
"Phrae Pwo",
7187991,
"kar",
"Thai",
}
m["kju"] = {
"Kashaya",
3193689,
"nai-pom",
"Latn",
}
m["kjx"] = {
"Ramopa",
56830,
"paa-nbo",
"Latn",
}
m["kjy"] = {
"Erave",
12952416,
"ngf-ank",
"Latn",
}
m["kjz"] = {
"Bumthangkha",
2786408,
"sit-ebo",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["kka"] = {
"Kakanda",
3915342,
"alv-ngb",
}
m["kkb"] = {
"Kwerisa",
56881,
"paa-clp",
"Latn",
}
m["kkc"] = {
"Odoodee",
12952987,
"ngf-est",
"Latn",
}
m["kkd"] = {
"Kinuku",
6414422,
"nic-kau",
}
m["kke"] = {
"Kakabe",
3913966,
"dmn-mok",
"Latn",
}
m["kkf"] = {
"Kalaktang Monpa",
63257089,
"sit-tsk",
"Tibt, Latn, Deva",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["kkg"] = {
"Mabaka Valley Kalinga",
18753304,
"phi",
}
m["kkh"] = {
"Khün",
3545044,
"tai-swe",
"Lana, Thai",
sort_key = {
Lana = "Lana-sortkey",
Thai = "Thai-sortkey"
},
}
m["kki"] = {
"Kagulu",
12952537,
"bnt-ruv",
"Latn",
}
m["kkj"] = {
"Kako",
35755,
"bnt-kak",
}
m["kkk"] = {
"Kokota",
3198399,
"poz-ocw",
"Latn",
}
m["kkl"] = {
"Kosarek Yale",
6432995,
"ngf-mek",
"Latn",
}
m["kkm"] = {
"Kiong",
6414512,
"nic-ucr",
"Latn",
}
m["kkn"] = {
"Kon Keu",
6428686,
"mkh-pal",
}
m["kko"] = {
"Karko",
35529,
"nub-hil",
}
m["kkp"] = {
"Koko-Bera",
6426699,
"aus-pmn",
"Latn",
}
m["kkq"] = {
"Kaiku",
6347840,
"bnt-kbi",
"Latn",
}
m["kkr"] = {
"Kir-Balar",
3440527,
"cdc-wst",
"Latn",
}
m["kks"] = {
"Kirfi",
56242,
"cdc-wst",
"Latn",
}
m["kkt"] = {
"Koi",
6426194,
"sit-kiw",
}
m["kku"] = {
"Tumi",
3913934,
"nic-kau",
}
m["kkv"] = {
"Kangean",
2071325,
"poz-msa",
"Latn",
}
m["kkw"] = {
"Teke-Kukuya",
36560,
"bnt-tek",
}
m["kkx"] = {
"Kohin",
6425997,
"poz-brw",
}
m["kky"] = {
"Guugu Yimidhirr",
56543,
"aus-pam",
"Latn",
}
m["kkz"] = {
"Kaska",
20823,
"ath-nor",
"Latn",
}
m["kla"] = {
"Klamath-Modoc",
2669248,
"nai-plp",
"Latn",
}
m["klb"] = {
"Kiliwa",
3182593,
"nai-yuc",
"Latn",
}
m["klc"] = {
"Kolbila",
6427122,
"alv-lek",
}
m["kld"] = {
"Gamilaraay",
3111818,
"aus-cww",
"Latn",
}
m["kle"] = {
"Kulung",
6443304,
"sit-kic",
}
m["klf"] = {
"Kendeje",
56895,
}
m["klg"] = {
"Tagakaulu Kalagan",
18756514,
"phi",
"Latn",
}
m["klh"] = {
"Weliki",
7981017,
"ngf-uru",
"Latn",
}
m["kli"] = {
"Kalumpang",
13561407,
"poz",
}
m["klj"] = {
"Khalaj",
33455,
"trk",
"fa-Arab, Latn",
ancestors = "klj-arg",
strip_diacritics = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun,
}
}
m["klk"] = {
"Kono (Nigeria)",
6429589,
"nic-kau",
"Latn",
}
m["kll"] = {
"Kagan Kalagan",
18748913,
"phi",
}
m["klm"] = {
"Kolom",
6844970,
"ngf-rai",
"Latn",
}
m["kln"] = {
"Kalenjin",
637228,
"sdv-nma",
"Latn",
}
m["klo"] = {
"Kapya",
6367410,
"nic-ykb",
}
m["klp"] = {
"Kamasa",
6356107,
"ngf-woj",
"Latn",
}
m["klq"] = {
"Rumu",
7379420,
"paa-tki",
"Latn",
}
m["klr"] = {
"Khaling",
56381,
"sit-kiw",
"Deva",
}
m["kls"] = {
"Kalasha",
33416,
"inc-chi",
"Latn, ks-Arab",
}
m["klt"] = {
"Nukna",
7068874,
"ngf-uru",
"Latn",
}
m["klu"] = {
"Klao",
3914866,
"kro-wkr",
}
m["klv"] = {
"Maskelynes",
3297282,
"poz-vnc",
"Latn",
}
m["klw"] = {
"Lindu",
18390055,
"poz-kal",
"Latn",
}
m["klx"] = {
"Koluwawa",
6427954,
"poz-ocw",
"Latn",
}
m["kly"] = {
"Kalao",
6350643,
"poz-wot",
"Latn",
}
m["klz"] = {
"Kabola",
11732258,
"paa-alp",
"Latn",
}
m["kma"] = {
"Konni",
35680,
"nic-buk",
}
m["kmb"] = {
"Kimbundu",
35891,
"bnt-kmb",
"Latn",
}
m["kmc"] = {
"Southern Kam",
35379,
"qfa-kms",
"Latn",
}
m["kmd"] = {
"Madukayang Kalinga",
18753305,
"phi",
}
m["kme"] = {
"Bakole",
35068,
"bnt-kpw",
"Latn",
}
m["kmf"] = {
"Kare (New Guinea)",
11732286,
"ngf-mab",
"Latn",
}
m["kmg"] = {
"Kâte",
3201059,
"ngf-kma",
"Latn",
}
m["kmh"] = {
"Kalam",
12952550,
"ngf-kak",
"Latn",
}
m["kmi"] = {
"Kami",
3915372,
"alv-ngb",
"Latn",
}
m["kmj"] = {
"Kumarbhag Paharia",
3130374,
"dra-mlo",
"Beng, Deva",
}
m["kmk"] = {
"Limos Kalinga",
18753303,
"phi",
"Latn",
}
m["kml"] = {
"Tanudan Kalinga",
18753307,
"phi",
"Latn",
}
m["kmm"] = {
"Kom (India)",
12952647,
"tbq-kuk",
}
m["kmn"] = {
"Awtuw",
3504217,
"paa-sep",
"Latn",
}
m["kmo"] = {
"Kwoma",
11732376,
"paa-sep",
"Latn",
}
m["kmp"] = {
"Gimme",
11152236,
"alv-dur",
}
m["kmq"] = {
"Kwama",
2591184,
"ssa-kom",
}
m["kmr"] = {
"Northern Kurdish",
36163,
"ku",
"Latn, Cyrl, Armn, ku-Arab, Yezi",
translit = {
Cyrl = "kmr-translit",
-- Armn translit in [[Module:scripts/data]]
["ku-Arab"] = "ckb-translit",
},
strip_diacritics = {
Latn = {
remove_diacritics = "'’",
from = {"r̄", "R̄", "ẍ", "Ẍ"},
to = {"rr", "Rr", "x", "X"}
},
},
wikimedia_codes = "ku",
}
m["kms"] = {
"Kamasau",
6356117,
"paa-mar",
"Latn",
}
m["kmt"] = {
"Kemtuik",
6387179,
"paa-nim",
"Latn",
}
m["kmu"] = {
"Kanite",
12952567,
"ngf-kya",
"Latn",
}
m["kmv"] = {
"Karipúna Creole French",
2523999,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["kmw"] = {
"Kumu",
6428450,
"bnt-kbi",
"Latn",
}
m["kmx"] = {
"Waboda",
7958705,
"paa-kiw",
"Latn",
}
m["kmy"] = {
"Koma",
35634,
"alv-dur",
}
m["kmz"] = {
"Khorasani Turkish",
35373,
"trk-ogz",
"Arab",
ancestors = "trk-oat",
}
m["kna"] = {
"Kanakuru",
56811,
"cdc-wst",
"Latn",
}
m["knb"] = {
"Lubuagan Kalinga",
12953602,
"phi",
"Latn",
}
m["knd"] = {
"Konda",
11732340,
"ngf-sbh",
"Latn",
}
m["kne"] = {
"Kankanaey",
18753329,
"phi",
"Latn",
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer,
}
},
sort_key = {
Latn = "tl-sortkey",
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy" .. c.punc,
},
}
m["knf"] = {
"Mankanya",
35789,
"alv-pap",
"Latn",
}
m["kni"] = {
"Kanufi",
3913297,
"nic-nin",
"Latn",
}
m["knj"] = {
"Akatek",
34923,
"myn",
"Latn",
}
m["knk"] = {
"Kuranko",
3198896,
"dmn-mok",
"Latn",
}
m["knl"] = {
"Keninjal",
6389309,
"poz-mly",
"Latn",
}
m["knm"] = { -- two unrelated lects have this name; this is the Katukinian one
"Kanamari",
3438373,
"sai-ktk",
"Latn",
}
m["kno"] = {
"Kono (Sierra Leone)",
35675,
"dmn-vak",
"Latn",
}
m["knp"] = {
"Kwanja",
35641,
"nic-mmb",
"Latn",
}
m["knq"] = {
"Kintaq",
6414335,
"mkh-asl",
}
m["knr"] = {
"Kaningra",
6363253,
"paa-sep",
"Latn",
}
m["kns"] = {
"Kensiu",
6391529,
"mkh-asl",
}
m["knt"] = {
"Katukina",
3194265,
"sai-pan",
"Latn",
}
m["knu"] = { -- a dialect of 'kpe'
"Kono (Guinea)",
3198703,
"dmn-msw",
"Latn, Kpel",
ancestors = "kpe",
}
m["knv"] = {
"Tabo",
7959888,
"aav",
}
m["knx"] = {
"Kendayan",
6388963,
"poz-mly",
"Latn",
}
m["kny"] = {
"Kanyok",
11110766,
"bnt-lub",
"Latn",
}
m["knz"] = {
"Kalamsé",
3914000,
"nic-gnn",
"Latn",
}
m["koa"] = {
"Konomala",
3198732,
"poz-ocw",
"Latn",
}
m["koc"] = {
"Kpati",
3913279,
"nic-nge",
"Latn",
}
m["kod"] = {
"Kodi",
4577633,
"poz-cet",
"Latn",
}
m["koe"] = {
"Kacipo-Balesi",
5364424,
"sdv",
}
m["kof"] = {
"Kubi",
3438718,
"cdc-wst",
"Latn",
}
m["kog"] = {
"Cogui",
3198286,
"cba",
"Latn",
}
m["koh"] = {
"Koyo",
35649,
"bnt-mbo",
"Latn",
}
m["koi"] = {
"Komi-Permyak",
56318,
"kv",
"Cyrl",
translit = "kv-translit",
strip_diacritics = {remove_diacritics = c.acute},
override_translit = true,
}
m["kok"] = {
"Konkani",
34239,
"inc-sou",
"Deva, Knda, Mlym, fa-Arab, Latn",
translit = {
Deva = "mr-translit",
},
-- Knda translit in [[Module:scripts/data]]
-- Mlym translit in [[Module:scripts/data]]
strip_diacritics = {
-- FIXME: Separate out the scripts
from = {"च़", "ज़", "झ़", "ಚ಼", "ಜ಼", "ಝ಼"},
to = {"च", "ज", "झ", "ಚ", "ಜ", "ಝ"}
} ,
}
m["kol"] = {
"Kol (New Guinea)",
4227542,
}
m["koo"] = {
"Konzo",
2361829,
"bnt-glb",
"Latn",
}
m["kop"] = {
"Waube",
11732373,
"ngf-nur",
"Latn",
}
m["koq"] = {
"Kota (Gabon)",
35607,
"bnt-kel",
"Latn",
}
m["kos"] = {
"Kosraean",
33464,
"poz-mic",
"Latn",
}
m["kot"] = {
"Lagwan",
3502264,
"cdc-cbm",
"Latn",
}
m["kou"] = {
"Koke",
797249,
"alv-bua",
}
m["kov"] = {
"Kudu-Camo",
3915850,
"nic-jer",
}
m["kow"] = {
"Kugama",
3913307,
"alv-mye",
}
m["koy"] = {
"Koyukon",
28304,
"ath-nor",
"Latn",
}
m["koz"] = {
"Korak",
6431365,
"ngf-kow",
"Latn",
}
m["kpa"] = {
"Kutto",
3437656,
"cdc-wst",
}
m["kpb"] = {
"Mullu Kurumba",
19573111,
"dra-mal",
}
m["kpc"] = {
"Curripaco",
2882543,
"awd-nwk",
"Latn",
}
m["kpd"] = {
"Koba",
6424249,
"poz",
}
m["kpe"] = {
"Kpelle",
35673,
"dmn-msw",
"Latn, Kpel",
}
m["kpf"] = {
"Komba",
6428239,
"ngf-kab",
"Latn",
}
m["kpg"] = {
"Kapingamarangi",
35771,
"poz-pnp",
"Latn",
}
m["kph"] = {
"Kplang",
35628,
"alv-gng",
}
m["kpi"] = {
"Kofei",
6425665,
"paa-egb",
"Latn",
}
m["kpj"] = {
"Karajá",
10322066,
"sai-mje",
"Latn",
}
m["kpk"] = {
"Kpan",
3915380,
"nic-jkn",
"Latn",
}
m["kpl"] = {
"Kpala",
11154769,
"nic-nkk",
"Latn",
}
m["kpm"] = {
"Koho",
3511919,
"mkh-ban",
"Latn",
}
m["kpn"] = {
"Kepkiriwát",
3195366,
"tup",
"Latn",
}
m["kpo"] = {
"Ikposo",
35029,
"alv-ktg",
"Latn",
}
m["kpq"] = {
"Korupun-Sela",
6432769,
"ngf-mek",
"Latn",
}
m["kpr"] = {
"Korafe-Yegha",
11732347,
"ngf-gko",
"Latn",
}
m["kps"] = {
"Tehit",
7694851,
"paa-wbh",
"Latn",
}
m["kpt"] = {
"Karata",
56636,
"cau-and",
"Cyrl",
translit = "kpt-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["kpu"] = {
"Kafoa",
6346151,
"paa-alp",
"Latn",
}
m["kpv"] = {
"Komi-Zyrian",
34114,
"kv",
"Cyrl",
translit = "kv-translit",
override_translit = true,
wikimedia_codes = "kv",
}
m["kpw"] = {
"Kobon",
11732326,
"ngf-kak",
"Latn",
}
m["kpx"] = {
"Mountain Koiari",
6925030,
"ngf-koi",
"Latn",
}
m["kpy"] = {
"Koryak",
36199,
"qfa-ckn",
"Cyrl",
strip_diacritics = {
from = {"['’]"},
to = {"ʼ"}
},
sort_key = {
from = {"вʼ", "гʼ", "ё", "ӄ", "ӈ"},
to = {"в" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1]}
},
translit = "kpy-translit",
}
m["kpz"] = {
"Kupsabiny",
56445,
"sdv-kln",
}
m["kqa"] = {
"Mum",
6935252,
"ngf-nso",
"Latn",
}
m["kqb"] = {
"Kovai",
6434822,
"ngf-ehu",
"Latn",
}
m["kqc"] = {
"Doromu-Koki",
5298175,
"paa-man",
"Latn",
}
m["kqd"] = {
"Koy Sanjaq Surat",
33463,
"sem-nna",
}
m["kqe"] = {
"Kalagan",
18748906,
"phi",
"Latn",
}
m["kqf"] = {
"Kakabai",
6349119,
"poz-ocw",
"Latn",
}
m["kqg"] = {
"Khe",
3914015,
"nic-gur",
}
m["kqh"] = {
"Kisankasa",
6416409,
"sdv",
}
m["kqi"] = {
"Koitabu",
6426363,
"ngf-koi",
"Latn",
}
m["kqj"] = {
"Koromira",
6432520,
"paa-sbo",
"Latn",
}
m["kqk"] = {
"Kotafon Gbe",
12952447,
"alv-pph",
}
m["kql"] = {
"Kyenele",
11732453,
"paa-yua",
"Latn",
}
m["kqm"] = {
"Khisa",
3913955,
"nic-gur",
"Latn",
}
m["kqn"] = {
"Kaonde",
33601,
"bnt-lub",
"Latn",
}
m["kqo"] = {
"Eastern Krahn",
3915374,
"kro-wee",
"Latn",
}
m["kqp"] = {
"Kimré",
3441210,
"cdc-est",
}
m["kqq"] = {
"Krenak",
6436747,
"sai-cer",
}
m["kqr"] = {
"Kimaragang",
3196845,
"poz-san",
"Latn",
}
m["kqs"] = {
"Northern Kissi",
19921576,
"alv-kis",
}
m["kqt"] = {
"Klias River Kadazan",
12953594,
"poz-san",
}
m["kqu"] = {
"Seroa",
33127766,
"khi-tuu",
"Latn",
}
m["kqv"] = {
"Okolod",
7082487,
"poz-san",
}
m["kqw"] = {
"Kandas",
3192590,
"poz-ocw",
"Latn",
}
m["kqx"] = {
"Mser",
3502347,
"cdc-cbm",
}
m["kqy"] = {
"Koorete",
6430753,
"omv-eom",
"Ethi, Latn",
}
m["kqz"] = {
"Korana",
2756709,
"khi-khk",
"Latn",
}
m["kra"] = {
"Kumhali",
13580783,
"inc-bih",
}
m["krb"] = {
"Karkin",
3193345,
"nai-utn",
"Latn",
}
m["krc"] = {
"Karachay-Balkar",
33714,
"trk-kcu",
"Cyrl",
translit = "krc-translit",
sort_key = {
from = {"гъ", "дж", "ё", "къ", "нг"},
to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1]}
},
}
m["krd"] = {
"Kairui-Midiki",
12953277,
"poz-tim",
}
m["kre"] = {
"Panará",
3361895,
"sai-cer",
"Latn",
}
m["krf"] = {
"Koro (Vanuatu)",
3198995,
"poz-vnn",
"Latn",
}
m["krh"] = {
"Kurama",
35593,
"nic-kau",
}
m["kri"] = {
"Krio",
35744,
"crp",
"Latn",
ancestors = "en",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
sort_key = {
from = {"ɛ", "gb", "kp", "ɔ"},
to = {"e" .. p[1], "g" .. p[1], "k" .. p[1], "o" .. p[1]}
},
}
m["krj"] = {
"Kinaray-a",
33720,
"phi",
"Latn",
}
m["krk"] = {
"Kerek",
332792,
"qfa-ckn",
"Cyrl",
}
m["krl"] = {
"Karelian",
33557,
"urj-fin",
"Latn",
sort_key = {
from = {
"č", "š", "ž", "ü", "ä", "ö", -- 2 chars
"z", "'" -- 1 char
},
to = {
"c" .. p[1], "s" .. p[1], "s" .. p[3], "y" .. p[1], "y" .. p[2], "y" .. p[3],
"s" .. p[2], "y" .. p[4],
}
},
}
m["krm"] = {
"Krim",
35713,
"alv",
}
m["krn"] = {
"Sapo",
3915386,
"kro-wee",
}
m["krp"] = {
"Korop",
35626,
"nic-ucr",
"Latn",
}
m["krr"] = {
"Kru'ng",
12953650,
"mkh-ban",
}
m["krs"] = {
"Kresh",
56674,
"csu-bkr",
}
m["kru"] = {
"Kurux",
33492,
"dra-kml",
"Deva, Tols",
translit = {
Deva = "hi-translit",
},
}
m["krv"] = {
"Kavet",
12953649,
"sai-ktk",
"Latn",
}
m["krw"] = {
"Western Krahn",
10975611,
"kro-wee",
"Latn",
}
m["krx"] = {
"Karon",
35704,
"alv-jol",
}
m["kry"] = {
"Kryts",
35861,
"cau-ssm",
"Latn, Cyrl",
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Latn = s["cau-Latn-stripdiacritics"],
Cyrl = s["cau-Cyrl-stripdiacritics"],
},
}
m["krz"] = {
"Sota Kanum",
12952568,
"paa-kan",
"Latn",
}
m["ksa"] = {
"Shuwa-Zamani",
3913929,
"nic-kau",
}
m["ksb"] = {
"Shambala",
3788739,
"bnt-seu",
"Latn",
}
m["ksc"] = {
"Southern Kalinga",
18753301,
"phi",
}
m["ksd"] = {
"Tolai",
35870,
"poz-ocw",
"Latn",
}
m["kse"] = {
"Kuni",
6444619,
"poz-ocw",
"Latn",
}
m["ksf"] = {
"Bafia",
34930,
"bnt-baf",
"Latn",
}
m["ksg"] = {
"Kusaghe",
3200638,
"poz-ocw",
"Latn",
}
m["ksi"] = {
"Krisa",
841704,
"paa-sko",
"Latn",
}
m["ksj"] = {
"Uare",
6450052,
"paa-kwa",
"Latn",
}
m["ksk"] = {
"Kansa",
3192772,
"sio-dhe",
"Latn",
}
m["ksl"] = {
"Kumalu",
17584381,
"poz-ocw",
"Latn",
}
m["ksm"] = {
"Kumba",
3913972,
"alv-mye",
}
m["ksn"] = {
"Kasiguranin",
6374525,
"phi",
}
m["kso"] = {
"Kofa",
56278,
"cdc-cbm",
}
m["ksp"] = {
"Kaba",
3915316,
"csu-sar",
}
m["ksq"] = {
"Kwaami",
3440525,
"cdc-wst",
}
m["ksr"] = {
"Borong",
4946263,
"ngf-kbm",
"Latn",
}
m["kss"] = {
"Southern Kissi",
11028974,
"alv-kis",
}
m["kst"] = {
"Winyé",
3913360,
"nic-gnw",
}
m["ksu"] = {
"Khamyang",
6583541,
"tai-swe",
}
m["ksv"] = {
"Kusu",
6448199,
"bnt-tet",
}
m["ksw"] = {
"S'gaw Karen",
56410,
"kar",
"Mymr",
translit = "ksw-translit",
}
m["ksx"] = {
"Kedang",
6382520,
"poz",
"Latn",
}
m["ksy"] = {
"Kharia Thar",
6400661,
"inc-eas",
}
m["ksz"] = {
"Kodaku",
21179986,
"mun",
}
m["kta"] = {
"Katua",
6378404,
"mkh-ban",
}
m["ktb"] = {
"Kambaata",
35664,
"cus-hec",
"Latn",
}
m["ktc"] = {
"Kholok",
3440464,
"cdc-wst",
}
m["ktd"] = {
"Kokata",
10547021,
"aus-pam",
"Latn",
}
m["ktf"] = {
"Kwami",
12952687,
"bnt-lgb",
}
m["ktg"] = {
"Kalkatungu",
3914057,
"aus-pam",
"Latn",
}
m["kth"] = {
"Karanga",
713643,
}
m["kti"] = {
"North Muyu",
20857698,
"ngf-lok",
"Latn",
}
m["ktj"] = {
"Plapo Krumen",
10975356,
"kro-grb",
}
m["ktk"] = {
"Kaniet",
3399050,
"poz-aay",
"Latn",
}
m["ktl"] = {
"Koroshi",
3775265,
"ira-nwi",
ancestors = "bal",
}
m["ktm"] = {
"Kurti",
3200615,
"poz-aay",
"Latn",
}
m["ktn"] = {
"Karitiâna",
3112184,
"tup",
"Latn",
}
m["kto"] = {
"Kuot",
56537,
}
m["ktp"] = {
"Kaduo",
769809,
"tbq-bka",
}
m["ktq"] = {
"Katabaga",
3193895,
}
m["kts"] = {
"South Muyu",
42308820,
"ngf-lok",
"Latn",
}
m["ktt"] = {
"Ketum",
12952616,
"ngf-dum",
"Latn",
}
m["ktu"] = {
"Kituba",
35746,
"crp",
"Latn",
ancestors = "kg",
}
m["ktv"] = {
"Eastern Katu",
22808951,
"mkh-kat",
"Latn",
}
m["ktw"] = {
"Kato",
20831,
"ath-pco",
"Latn",
}
m["ktx"] = {
"Kaxararí",
6380124,
"sai-pan",
"Latn",
}
m["kty"] = {
"Kango",
6362818,
"bnt-bta",
"Latn",
}
m["ktz"] = {
"Juǀ'hoan",
1192295,
"khi-kxa",
"Latn",
}
m["kub"] = {
"Kutep",
35645,
"nic-jkn",
}
m["kuc"] = {
"Kwinsu",
6450460,
"paa-tor",
"Latn",
}
m["kud"] = {
"Auhelawa",
5166,
"poz-ocw",
"Latn",
}
m["kue"] = {
"Kuman",
137525,
"ngf-sim",
"Latn",
}
m["kuf"] = {
"Western Katu",
6378400,
"mkh-kat",
"Laoo, Tale, Latn",
}
m["kug"] = {
"Kupa",
3915336,
"alv-ngb",
}
m["kuh"] = {
"Kushi",
3438747,
"cdc-wst",
}
m["kui"] = {
"Kuikúro",
3915522,
"sai-kui",
"Latn",
}
m["kuj"] = {
"Kuria",
6445968,
"bnt-lok",
"Latn",
}
m["kuk"] = {
"Kepo'",
6393217,
"poz",
}
m["kul"] = {
"Kulere",
3440506,
"cdc-wst",
}
m["kum"] = {
"Kumyk",
36209,
"trk-kcu",
"Cyrl",
translit = "kum-translit",
sort_key = {
from = {"гъ", "гь", "ё", "къ", "нг", "оь", "уь"},
to = {"г" .. p[1], "г" .. p[2], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
},
}
m["kun"] = {
"Kunama",
36041,
}
m["kuo"] = {
"Kumukio",
11732362,
"ngf-dal",
"Latn",
}
m["kup"] = {
"Kunimaipa",
6444696,
"paa-kun",
"Latn",
}
m["kuq"] = {
"Karipuna",
6371071,
"tup-gua",
"Latn",
}
m["kus"] = {
"Kusaal",
35708,
"nic-dag",
"Latn",
}
m["kut"] = {
"Ktunaxa",
33434,
"qfa-iso",
"Latn",
}
m["kuu"] = {
"Upper Kuskokwim",
28062,
"ath-nor",
"Latn",
}
m["kuv"] = {
"Kur",
12635082,
"poz-cma",
"Latn",
}
m["kuw"] = {
"Kpagua",
11137573,
"bad-cnt",
}
m["kux"] = {
"Kukatja",
10549839,
"aus-pam",
"Latn",
}
m["kuy"] = {
"Kuuku-Ya'u",
10550697,
"aus-pmn",
"Latn",
}
m["kuz"] = {
"Kunza",
2669181,
"qfa-iso",
"Latn",
}
m["kva"] = {
"Bagvalal",
56638,
"cau-and",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["kvb"] = {
"Kubu",
6441341,
"poz-mly",
}
m["kvc"] = {
"Kove",
3199402,
"poz-ocw",
"Latn",
}
m["kvd"] = {
"Kui (Indonesia)",
6442230,
"paa-alp",
"Latn",
}
m["kve"] = {
"Kalabakan",
6350003,
"poz-san",
"Latn",
}
m["kvf"] = {
"Kabalai",
3440427,
"cdc-est",
}
m["kvg"] = {
"Kuni-Boazi",
2907551,
"paa-boa",
"Latn",
}
m["kvh"] = {
"Komodo",
3198565,
"poz-cet",
"Latn",
}
m["kvi"] = {
"Kwang",
3440398,
"cdc-est",
"Latn",
}
m["kvj"] = {
"Psikye",
56304,
"cdc-cbm",
}
m["kvk"] = {
"Korean Sign Language",
3073428,
"sgn-jsl",
}
m["kvl"] = {
"Brek Karen",
12952577,
"kar",
}
m["kvm"] = {
"Kendem",
35751,
"nic-mam",
"Latn",
}
m["kvn"] = {
"Border Kuna",
31777873,
"cba",
}
m["kvo"] = {
"Dobel",
5286559,
"poz",
"Latn",
}
m["kvp"] = {
"Kompane",
18343041,
"poz",
}
m["kvq"] = {
"Geba Karen",
12952581,
"kar",
"Latn, Mymr",
}
m["kvr"] = {
"Kerinci",
3195442,
"poz-mly",
"Latn, Arab", -- Also Incung, which we don't have
}
m["kvt"] = {
"Lahta Karen",
12952582,
"kar",
}
m["kvu"] = {
"Yinbaw Karen",
14426328,
"kar",
}
m["kvv"] = {
"Kola",
6426967,
"poz",
"Latn",
}
m["kvw"] = {
"Wersing",
7983599,
"paa-alp",
"Latn",
}
m["kvx"] = {
"Parkari Koli",
3244176,
"inc-wes",
}
m["kvy"] = {
"Yintale Karen",
14426329,
"kar",
}
m["kvz"] = {
"Tsakwambo",
7849438,
"ngf-kts",
"Latn",
}
m["kwa"] = {
"Dâw",
3042278,
"sai-nad",
"Latn",
}
m["kwb"] = {
"Baa",
34842,
"alv-ada",
}
m["kwc"] = {
"Likwala",
35597,
"bnt-mbo",
}
m["kwd"] = {
"Kwaio",
3200796,
"poz-sls",
"Latn",
}
m["kwe"] = {
"Kwerba",
6450328,
"paa-kwe",
"Latn",
}
m["kwf"] = {
"Kwara'ae",
3200829,
"poz-sls",
"Latn",
}
m["kwg"] = {
"Sara Kaba Deme",
3915384,
"csu-kab",
}
m["kwh"] = {
"Kowiai",
6435028,
"poz",
"Latn",
}
m["kwi"] = {
"Awa-Cuaiquer",
2603103,
"sai-bar",
"Latn",
}
m["kwj"] = {
"Kwanga",
3438383,
"paa-sep",
"Latn",
}
m["kwk"] = {
"Kwak'wala",
2640628,
"wak",
"Latn",
}
m["kwl"] = {
"Kofyar",
3441382,
"cdc-wst",
"Latn",
}
m["kwm"] = {
"Kwambi",
3487165,
"bnt-ova",
}
m["kwn"] = {
"Kwangali",
36334,
"bnt-kav",
"Latn",
}
m["kwo"] = {
"Kwomtari",
3508116,
"paa-kwo",
"Latn",
}
m["kwp"] = {
"Kodia",
3914867,
"kro-ekr",
}
m["kwq"] = {
"Kwak",
11014183,
"nic-nka",
ancestors = "yam",
}
m["kwr"] = {
"Kwer",
12635137,
"ngf-wok",
"Latn",
}
m["kws"] = {
"Kwese",
3200846,
"bnt-pen",
}
m["kwt"] = {
"Kwesten",
6450354,
"paa-tor",
"Latn",
}
m["kwu"] = {
"Kwakum",
35624,
"bnt-kak",
}
m["kwv"] = {
"Sara Kaba Náà",
3915361,
"csu-kab",
"Latn",
}
m["kww"] = {
"Kwinti",
721182,
"crp",
"Latn",
ancestors = "en"
}
m["kwx"] = {
"Khirwar",
12976968,
"dra",
}
m["kwz"] = {
"Kwadi",
2364661,
"khi-kkw",
"Latn",
}
m["kxa"] = {
"Kairiru",
3398785,
"poz-ocw",
"Latn",
}
m["kxb"] = {
"Krobu",
35586,
"alv-ptn",
"Latn",
}
m["kxc"] = {
"Konso",
56624,
"cus-eas",
"Ethi, Latn",
}
m["kxd"] = {
"Brunei Malay",
3182878,
"poz-mly",
"Latn, ms-Arab",
}
m["kxe"] = {
"Kakihum",
3914433,
"nic-kam",
ancestors = "tvd",
}
m["kxf"] = {
"Manumanaw Karen",
12952592,
"kar",
"Mymr, Latn",
}
m["kxh"] = {
"Karo",
3447116,
"omv-aro",
}
m["kxi"] = {
"Keningau Murut",
6389308,
"poz-san",
"Latn",
}
m["kxj"] = {
"Kulfa",
713654,
"csu-kab",
}
m["kxk"] = {
"Zayein Karen",
14352960,
"kar",
}
-- Nepali Kurux [kxl] treated as part of Kurux [kru], consistent with ISO merger in 2020
m["kxm"] = {
"Northern Khmer",
3502234,
"mkh-kmr",
"Thai, Khmr",
ancestors = "xhm",
sort_key = {
from = {"[%pๆ]", "[็-๎]", "([เแโใไ])([ก-ฮ])"},
to = {"", "", "%2%1"}
},
}
m["kxn"] = {
"Kanowit",
6364300,
"poz-bnn",
"Latn",
}
m["kxo"] = {
"Kanoé",
4356223,
"qfa-iso",
"Latn",
}
m["kxp"] = {
"Wadiyara Koli",
12953645,
"inc-wes",
}
m["kxq"] = {
"Smärky Kanum",
12952569,
"paa-kan",
"Latn",
}
m["kxr"] = {
"Manus Koro",
3198994,
"poz-aay",
"Latn",
}
m["kxs"] = {
"Kangjia",
3182570,
"xgn-shr",
"Latn",
}
m["kxt"] = {
"Koiwat",
6426388,
"paa-nnd",
"Latn",
}
m["kxu"] = {
"Kui (India)",
33919,
"dra-kki",
"Orya",
translit = "kxv-translit",
strip_diacritics = {
remove_diacritics = "୕",
from = {"ଆଆ", "ଇଇ", "ଉଉ", "ଏଏ", "ଓଓ", "ିଇ", "ୁଉ", "େଏ", "ୋଓ"},
to = {"ଆ", "ଈ", "ଊ", "ଏ", "ଓ", "ୀ", "ୂ", "େ", "ୋ"},
},
}
m["kxv"] = {
"Kuvi",
3200721,
"dra-kki",
"Orya",
translit = "kxv-translit",
strip_diacritics = {
remove_diacritics = "୕",
from = {"ଆଆ", "ଇଇ", "ଉଉ", "ଏଏ", "ଓଓ", "([କ-ହ])ଆ", "ିଇ", "ୁଉ", "େଏ", "ୋଓ"},
to = {"ଆ", "ଈ", "ଊ", "ଏ", "ଓ", "%1ା", "ୀ", "ୂ", "େ", "ୋ"},
},
}
m["kxw"] = {
"Konai",
11732339,
"ngf-est",
"Latn",
}
m["kxx"] = {
"Likuba",
35646,
"bnt-bmo",
}
m["kxy"] = {
"Kayong",
6380673,
"mkh",
}
m["kxz"] = {
"Kerewo",
6393847,
"paa-kiw",
"Latn",
}
m["kya"] = {
"Kwaya",
6450276,
"bnt-haj",
"Latn",
}
m["kyb"] = {
"Butbut Kalinga",
18753300,
"phi",
"Latn",
}
m["kyc"] = {
"Kyaka",
12952690,
"ngf-enc",
"Latn",
}
m["kyd"] = {
"Karey",
6370196,
"poz",
}
m["kye"] = {
"Krache",
35658,
"alv-gng",
}
m["kyf"] = {
"Kouya",
35595,
"kro-bet",
}
m["kyg"] = {
"Keyagana",
6398208,
"ngf-kya",
"Latn",
}
m["kyh"] = {
"Karok",
1288440,
"qfa-iso", -- or Hokan?
"Latn",
}
m["kyi"] = {
"Kiput",
3038653,
"poz-swa",
"Latn",
}
m["kyj"] = {
"Karao",
3192950,
"phi",
"Latn",
}
m["kyk"] = {
"Kamayo",
3192339,
"phi",
"Latn",
}
m["kyl"] = {
"Kalapuya",
3192120,
"nai-klp",
}
m["kym"] = {
"Kpatili",
3913982,
"znd",
}
m["kyn"] = {
"Karolanos",
6373093,
"phi",
}
m["kyo"] = {
"Kelon",
6386414,
"paa-alp",
"Latn",
}
m["kyp"] = {
"Kang",
25559558,
"tai",
}
m["kyq"] = {
"Kenga",
35707,
"csu-bgr",
}
m["kyr"] = {
"Kuruáya",
3200633,
"tup",
"Latn",
}
m["kys"] = {
"Baram Kayan",
2883794,
"poz",
"Latn",
}
m["kyt"] = {
"Kayagar",
6380394,
"paa-kay",
"Latn",
}
m["kyu"] = {
"Western Kayah",
12952596,
"kar",
"Kali, Mymr, Latn",
translit = {Kali = "Kali-translit"},
}
m["kyv"] = {
"Kayort",
6380675,
"inc-krd",
"Deva",
}
m["kyw"] = {
"Kudmali",
6446173,
"inc-bih",
"Deva, as-Beng, Orya, Chis",
}
m["kyx"] = {
"Rapoisi",
7294279,
"paa-nbo",
"Latn",
}
m["kyy"] = {
"Kambaira",
6356254,
"ngf-kai",
"Latn",
}
m["kyz"] = {
"Kayabí",
6380372,
"tup-gua",
"Latn",
}
m["kza"] = {
"Western Karaboro",
36601,
"alv-krb",
}
m["kzb"] = {
"Kaibobo",
6347565,
"poz-cma",
}
m["kzc"] = {
"Bondoukou Kulango",
11031321,
"alv-kul",
"Latn",
}
m["kzd"] = {
"Kadai",
7679471,
"poz-cma",
"Latn",
}
--kze (Kosena) made an etym-only child of auy (Auyana) per [[Wiktionary:Language_treatment_requests#merge_Kosena_[kze]_into_Auyana_[auy]]]
m["kzf"] = {
"Da'a Kaili",
33103997,
"poz-kal",
"Latn",
}
m["kzg"] = {
"Kikai",
3196527,
"jpx-nry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["kzh"] = {
"Dongolawi",
5295991,
"nub",
"Latn",
}
m["kzi"] = {
"Kelabit",
6385445,
"poz-swa",
"Latn",
}
m["kzj"] = {
"Coastal Kadazan",
3307195,
"poz-san",
"Latn",
}
m["kzk"] = {
"Kazukuru",
1089069,
"poz-ocw",
}
m["kzl"] = {
"Kayeli",
4207444,
"poz-cma",
"Latn",
}
m["kzm"] = {
"Kais",
6348319,
"ngf-sbh",
"Latn",
}
m["kzn"] = {
"Kokola",
11128329,
"bnt-mak",
"Latn",
ancestors = "vmw",
}
m["kzo"] = {
"Kaningi",
35683,
"bnt-mbt",
}
m["kzp"] = {
"Kaidipang",
6347611,
"phi",
"Latn",
}
m["kzq"] = {
"Kaike",
10951226,
"sit-tam",
}
m["kzr"] = {
"Karang",
35681,
"alv-mbm",
"Latn",
}
m["kzs"] = {
"Sugut Dusun",
12953510,
"poz-san",
"Latn",
}
m["kzu"] = {
"Kayupulau",
6380723,
"poz-ocw",
}
m["kzv"] = {
"Komyandaret",
6428671,
"ngf-kts",
"Latn",
}
m["kzw"] = { -- contrast xoo, sai-kat, sai-xoc, the last of which the ISO conflated into this code
"Kariri",
12953620,
"sai-mje",
"Latn",
}
m["kzx"] = {
"Kamarian",
6356040,
"poz-cma",
"Latn",
}
m["kzy"] = {
"Kango-Sua",
11008360,
"bnt-kbi",
"Latn",
ancestors = "bip",
}
m["kzz"] = {
"Kalabra",
6350038,
"paa-wbh",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
n0bwnnx6cvu6oqkgrjg5ovvv8722i5m
Mòideal:references
828
16748
86267
2026-07-22T02:16:53Z
Altronic
4137
Copy from English Wiktionary
86267
Scribunto
text/plain
local export = {}
local rsplit = mw.text.split
--[==[
Parse a references spec as used in the {{para|ref}} param to {{tl|IPA}}, {{tl|IPAchar}}, {{tl|homophones}},
{{tl|rhymes}}, etc. and soon the {{para|f<var>N</var>ref}} param to {{tl|head}}. `parse_err` is a function of one
argument to throw an error with the specified argument as the error message; defaults to `error`.
Multiple references are separated by `!!!` (optionally with spaces around it), and the equivalent of
`<nowiki><ref name="bendo">{{R:it:DiPI|bendo}}</ref><ref>{{R:it:Olivetti}}</ref></nowiki>` can be specified using a
syntax like the following:
{ {{IPA|it|ˈben.do|ˈbɛn.do|ref2={{R:it:DiPI|bendo}}<<name:bendo>> !!! {{R:it:Olivetti}}}}}
To include a group as in `<nowiki><ref name="bendo" group="pron">...</ref></nowiki>` use:
{ {{IPA|it|ˈben.do|ˈbɛn.do|ref2={{R:it:DiPI|bendo}}<<name:bendo>><<group:pron>>}}}
To reference a prior name, as in `<nowiki><ref name="bendo"/></nowiki>`, leave the reference text blank:
{ {{IPA|it|ˈben.do|ˈbɛn.do|ref2=<<name:bendo>>}}}
Similarly, to reference a prior name in a particular group, as in `<nowiki><ref name="bendo" group="pron"/></nowiki>`, use:
{ {{IPA|it|ˈben.do|ˈbɛn.do|ref2=<<name:bendo>><<group:pron>>}}}
The return value consists of a list of objects of the form { {text = TEXT, name = NAME, group = GROUP}}.
This is the same format as is expected in the `part.refs` in [[Module:headword]] and `item.refs` in
[[Module:IPA]].
]==]
function export.parse_references(text, parse_err)
parse_err = parse_err or error
local refs = {}
local raw_notes = rsplit(text, "%s*!!!%s*")
for _, raw_note in ipairs(raw_notes) do
local note
if raw_note:find("<<") then
local splitvals = require("Module:string utilities").split(raw_note, "(<<[a-z]+:.->>)")
note = {text = splitvals[1]}
for i = 2, #splitvals, 2 do
local key, value = splitvals[i]:match("^<<([a-z]+):(.*)>>$")
if not key then
parse_err("Internal error: Can't parse " .. splitvals[i])
end
if key == "name" or key == "group" then
note[key] = value
else
parse_err("Unrecognized key '" .. key .. "' in " .. splitvals[i])
end
if splitvals[i + 1] ~= "" then
parse_err("Extraneous text '" .. splitvals[i + 1] .. "' after " .. splitvals[i])
end
end
else
note = raw_note
end
table.insert(refs, note)
end
return refs
end
--[==[
Format a list of reference specs, using a parser function. The return string contains a footnote number that hyperlinks
to the actual reference, located in the `<nowiki><references /></nowiki>` section. The format an individual reference
spec is either a string containing the reference text (typically a call to a citation template such as {{tl|cite-book}},
or a template wrapping such a call), or an object with fields `text` (the reference text), `name` (the name of the
reference, as in `<nowiki><ref name="foo">...</ref></nowiki>` or `<nowiki><ref name="foo" /></nowiki>`) and/or `group`
(the group of the reference, as in `<nowiki><ref name="foo" group="bar">...</ref></nowiki>` or
`<nowiki><ref name="foo" group="bar"/></nowiki>`).
]==]
function export.format_references(refspecs)
local refs = {}
for _, refspec in ipairs(refspecs) do
if type(refspec) ~= "table" then
refspec = {text = refspec}
end
local refargs
if refspec.name or refspec.group then
refargs = {name = refspec.name, group = refspec.group}
end
table.insert(refs, mw.getCurrentFrame():extensionTag("ref", refspec.text, refargs))
end
return table.concat(refs)
end
return export
49olnq52uhabuj9xvknmmj73r6ycrd7
Mòideal:languages/data/3/l
828
16749
86268
2026-07-22T02:24:24Z
Altronic
4137
Copy from English Wiktionary
86268
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["laa"] = {
"Lapuyan Subanun",
12635302,
"phi",
}
m["lab"] = {
"Linear A",
nil,
"qfa-unc", -- undeciphered
"Lina",
}
m["lac"] = {
"Lacandon",
35766,
"myn",
"Latn",
}
m["lad"] = {
"Ladino",
36196,
"roa-cas",
"Hebr, Latn, Cyrl",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["lae"] = {
"Pattani",
7148323,
"sit-whm",
}
m["laf"] = {
"Lafofa",
35711,
"alv",
}
m["lag"] = {
"Langi",
584983,
"bnt-mra",
}
m["lah"] = {
"Lahnda",
1334774,
"inc-pan",
"pa-Arab",
}
m["lai"] = {
"Lambya",
6481626,
"bnt-mby",
"Latn",
}
m["laj"] = {
"Lango (Uganda)",
35670,
"sdv-los",
"Latn",
}
m["lak"] = {
"Laka",
6474529, -- also Q55616620
"csu-sar", -- formerly classified as "alv-mbm"; see [[w:Lau Laka language]]
}
m["lam"] = {
"Lamba",
36098,
"bnt-sbi",
"Latn",
}
m["lan"] = {
"Laru",
3913987,
"nic-knj",
"Latn",
}
m["lap"] = {
"Kabba-Laka",
6474528,
"csu-sar",
"Latn",
}
m["laq"] = {
"Qabiao",
3436700,
"qfa-kra",
}
m["lar"] = {
"Larteh",
35639,
"alv-gng",
"Latn",
}
m["las"] = {
"Gur Lama",
35652,
"nic-gne",
"Latn",
}
m["lau"] = {
"Laba",
12952694,
"paa-lla",
"Latn",
}
m["law"] = {
"Lauje",
6498258,
"poz",
"Latn",
}
m["lax"] = {
"Tiwa",
7810466,
"tbq-bdg",
"Latn, as-Beng",
}
m["lay"] = {
"Lama Bai",
6480756,
"sit-nba",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["laz"] = {
"Aribwatsa",
3502104,
"poz-ocw",
"Latn",
}
m["lbb"] = {
"Label",
3214296,
"poz-ocw",
"Latn",
}
m["lbc"] = {
"Lakkia",
3027879,
"qfa-tak",
}
m["lbe"] = {
"Lak",
36206,
"cau-nec",
"Cyrl, Latn, Arab, Geor",
translit = {
Cyrl = "lbe-translit",
-- Geor translit in [[Module:scripts/data]]
},
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = "lbe-sortkey",
}
m["lbf"] = {
"Tinani",
784502,
"sit-whm",
}
m["lbg"] = {
"Laopang",
12952711,
"tbq-bis",
}
m["lbi"] = {
"La'bi",
6460637,
"alv-mbm",
}
m["lbj"] = {
"Ladakhi",
35833,
"sit-lab",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["lbk"] = {
"Central Bontoc",
63257803,
"phi",
"Latn",
}
m["lbl"] = {
"Libon Bikol",
18664462,
"phi",
"Latn",
}
m["lbm"] = {
"Lodhi",
6666374,
"mun",
}
m["lbn"] = {
"Lamet",
3216723,
"mkh-pal",
"Laoo, Latn",
}
m["lbo"] = {
"Laven",
6298648,
"mkh-ban",
"Latn",
}
m["lbq"] = {
"Wampar",
7966946,
"poz-ocw",
"Latn",
}
m["lbr"] = {
"Northern Lorung",
6668040,
"sit-kie",
"Deva",
}
m["lbs"] = {
"Libyan Sign Language",
11775688,
"sgn",
}
m["lbt"] = {
"Lachi",
6583606,
"qfa-kra",
}
m["lbu"] = {
"Labu",
6467660,
"poz-ocw",
"Latn",
}
m["lbv"] = {
"Lavatbura-Lamusong",
2405981,
"poz-ocw",
"Latn",
}
m["lbw"] = {
"Tolaki",
3033597,
"poz-btk",
"Latn",
}
m["lbx"] = {
"Lawangan",
3120345,
"poz-bre",
"Latn",
}
m["lby"] = {
"Lamu-Lamu",
6482727,
nil,
"Latn",
}
m["lbz"] = {
"Lardil",
3915688,
"aus-tnk",
"Latn",
}
m["lcc"] = {
"Legenyem",
12952713,
"poz-hce",
"Latn",
}
m["lcd"] = {
"Lola",
6668867,
"poz-cet",
"Latn",
}
m["lce"] = {
"Loncong",
3058192,
}
m["lcf"] = {
"Lubu",
3264685,
}
m["lch"] = {
"Luchazi",
3265143,
"bnt-clu",
}
m["lcl"] = {
"Lisela",
6558753,
"poz-cma",
"Latn",
}
m["lcm"] = {
"Tungag",
3542085,
"poz-ocw",
"Latn",
}
m["lcp"] = {
"Western Lawa",
18644465,
"mkh-pal",
"Thai",
sort_key = "Thai-sortkey",
}
m["lcq"] = {
"Luhu",
6699890,
"poz-cma",
"Latn",
}
m["lcs"] = {
"Lisabata-Nuniali",
6558534,
"poz-cet",
"Latn",
}
m["lda"] = {
"Kla",
63257856,
"dmn-mda",
"Latn",
}
m["ldb"] = {
"Idun",
3914441,
"nic-plc",
"Latn",
}
m["ldd"] = {
"Luri (Nigeria)",
4701277,
"cdc-wst",
}
m["ldg"] = {
"Lenyima",
3914423,
"nic-uce",
"Latn",
}
m["ldh"] = {
"Lamja-Dengsa-Tola",
11001739,
"nic-dak",
}
m["ldj"] = {
"Lemoro",
3912761,
"nic-jer",
}
m["ldk"] = {
"Leelau",
3914465,
"alv-bwj",
}
m["ldl"] = {
"Kaan",
3914501,
"alv-yun",
}
m["ldm"] = {
"Landoma",
35568,
"alv-mel",
}
m["ldn"] = {
"Láadan",
35757,
"art",
"Latn",
type = "appendix-constructed",
}
m["ldo"] = {
"Loo",
3915378,
"alv-bwj",
}
m["ldp"] = {
"Tso",
3913953,
"alv-wjk",
}
m["ldq"] = {
"Lufu",
35796,
"nic-ykb",
"Latn",
}
m["lea"] = {
"Lega-Shabunda",
12952719,
"bnt-lgb",
}
m["leb"] = {
"Lala-Bisa",
6480112,
"bnt-sbi",
}
m["lec"] = {
"Leco",
2625398,
"qfa-iso",
}
m["led"] = {
"Lendu",
523823,
"csu-lnd",
"Latn",
}
m["lee"] = {
"Lyélé",
3089032,
"nic-gnn",
}
m["lef"] = {
"Lelemi",
35585,
"alv-ntg",
}
m["leh"] = {
"Lenje",
6522666,
"bnt-bot",
}
m["lei"] = {
"Lemio",
6521165,
"ngf-rai",
"Latn",
}
m["lej"] = {
"Lengola",
6522474,
"bnt-leb",
}
m["lek"] = {
"Leipon",
3229216,
"poz-aay",
"Latn",
}
m["lel"] = {
"Lele (Congo)",
56733,
"bnt-bsh",
}
m["lem"] = {
"Nomaande",
13479983,
"nic-mbw",
"Latn",
}
m["len"] = {
"Honduran Lenca",
36189,
"nai-len",
"Latn",
}
m["leo"] = {
"Mengisa",
1345684,
"nic-mba",
ancestors = "bag",
}
m["lep"] = {
"Lepcha",
35990,
"sit",
"Lepc",
translit = "lep-translit",
}
m["leq"] = {
"Lembena",
6521067,
"ngf-enc",
"Latn",
}
m["ler"] = {
"Lenkau",
3229472,
"poz-aay",
"Latn",
}
m["les"] = {
"Lese",
11033939,
"csu-mle",
}
m["let"] = {
"Lesing-Gelimi",
12635445,
"poz-ocw",
"Latn",
}
m["leu"] = {
"Kara (New Guinea)",
3192889,
"poz-ocw",
"Latn",
}
m["lev"] = {
"Lamma",
6583582,
"paa-alp",
"Latn",
}
m["lew"] = { -- this code was basically assigned as a catch-all for things that aren't brs, kzf or unz
"Ledo Kaili",
35877,
"poz-kal",
"Latn",
}
m["lex"] = {
"Luang",
6695015,
"poz-tim",
"Latn",
}
m["ley"] = {
"Lemolang",
3033560,
"poz-ssw",
}
m["lez"] = {
"Lezgi",
31746,
"cau-esm",
"Cyrl, Latn, Arab",
translit = "lez-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
}
m["lfa"] = {
"Lefa",
35643,
"bnt-baf",
}
m["lfn"] = {
"Lingua Franca Nova",
146803,
"art",
"Latn, Cyrl",
type = "appendix-constructed",
}
m["lga"] = {
"Lungga",
3267590,
"poz-ocw",
"Latn",
}
m["lgb"] = {
"Laghu",
3216169,
"poz-ocw",
"Latn",
}
m["lgg"] = {
"Lugbara",
3272737,
"csu-mma",
"Latn",
strip_diacritics =
{
remove_diacritics = c.acute .. c.grave,
from = { "ä", "ɛ", "ë", "ï", "ɔ", "ö" },
to = { "a", "e", "i", "i", "o", "u" },
},
}
m["lgh"] = {
"Laghuu",
6472114,
"tbq-muj",
}
m["lgi"] = {
"Lengilu",
6522465,
"poz-swa",
"Latn",
}
m["lgk"] = {
"Neverver",
3241515,
"poz-vnc",
"Latn",
}
m["lgl"] = {
"Wala",
3565284,
"poz-sls",
}
m["lgm"] = {
"Lega-Mwenga",
14916883,
"bnt-lgb",
}
m["lgn"] = {
"Opuuo",
3354339,
"ssa-kom",
}
m["lgq"] = {
"Logba",
35813,
"alv-ntg",
"Latn",
}
m["lgr"] = {
"Lengo",
3229454,
"poz-sls",
"Latn",
}
m["lgs"] = {
"Guinea-Bissau Sign Language",
5616441,
"sgn",
}
m["lgt"] = {
"Pahi",
7124545,
"paa-sep",
"Latn",
}
m["lgu"] = {
"Longgu",
3259105,
"poz-sls",
}
m["lgz"] = {
"Ligenza",
5531038,
"bnt-bun",
}
m["lha"] = {
"Laha (Vietnam)",
3112363,
"qfa-kra",
}
m["lhh"] = {
"Laha (Indonesia)",
6473107,
"poz-cma",
"Latn",
}
m["lhi"] = {
"Lahu Shi",
25559457,
"tbq-lho",
}
m["lhl"] = {
"Lahul Lohar",
12953672,
}
m["lhn"] = {
"Lahanan",
12953660,
"poz-bnn",
"Latn",
}
m["lhp"] = {
"Lhokpu",
3436603,
"sit-dhi",
}
m["lhs"] = {
"Mlahsö",
3393063,
"sem-cna",
"Syrc",
}
m["lht"] = {
"Lo-Toga",
3257566,
"poz-vnn",
"Latn",
}
m["lhu"] = {
"Lahu",
35780,
"tbq-lho",
"Latn",
}
m["lia"] = {
"West-Central Limba",
32867815,
"alv-lim",
}
m["lib"] = {
"Likum",
3240737,
"poz-aay",
"Latn",
}
m["lic"] = {
"Hlai",
934738,
"qfa-lic",
"Latn",
}
m["lid"] = {
"Nyindrou",
3346666,
"poz-aay",
"Latn",
}
m["lie"] = {
"Likila",
11011614,
"bnt-ngn",
}
m["lif"] = {
"Limbu",
56477,
"sit-kir",
"Limb, Latn, Deva",
translit = "lif-translit",
}
m["lig"] = {
"Ligbi",
33594,
"dmn-jje",
}
m["lih"] = {
"Lihir",
6546938,
"poz-ocw",
"Latn",
}
m["lii"] = {
"Lingkhim",
12635536,
}
m["lij"] = {
"Ligurian",
36106,
"roa-git",
ancestors = "lij-old",
"Latn",
}
m["lik"] = {
"Lika",
1530394,
"bnt-boa",
}
m["lil"] = {
"Lillooet",
34154,
"sal",
"Latn",
}
m["lio"] = {
"Liki",
4261493,
"poz-ocw",
"Latn",
}
m["lip"] = {
"Sekpele",
36257,
"alv-ntg",
}
m["liq"] = {
"Libido",
35691,
"cus-hec",
}
m["lir"] = {
"Liberian Kreyol",
6541128,
"crp",
"Latn",
ancestors = "en",
}
m["lis"] = {
"Lisu",
56480,
"tbq-lso",
"Lisu, Latn",
override_translit = true,
-- Lisu translit, sort_key in [[Module:scripts/data]]
}
m["liu"] = {
"Logorik",
6667811,
"sdv-daj",
}
m["liv"] = {
"Livonian",
33698,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"’"}
},
strip_diacritics = {
remove_diacritics = "'’" .. u(0x2019),
from = {"Ǭ", "ǭ"},
to = {"Ō", "ō"}
},
sort_key = {
from = {
"ā", "ä", "ǟ",
"ḑ",
"ē",
"ī",
"ļ",
"ņ",
"ō", "ȯ", "ȱ", "õ", "ȭ", "ö", "ȫ",
"ŗ",
"š",
"ț",
"ū", "ü", "ṻ",
"ȳ",
"ž",
},
to = {
"a" .. p[1], "a" .. p[2], "a" .. p[3],
"d" .. p[1],
"e" .. p[1],
"i" .. p[1],
"l" .. p[1],
"n" .. p[1],
"o" .. p[1], "o" .. p[2], "o" .. p[3], "o" .. p[4], "o" .. p[5], "o" .. p[6], "o" .. p[7],
"r" .. p[1],
"s" .. p[1],
"t" .. p[1],
"u" .. p[1], "u" .. p[2], "u" .. p[3],
"y" .. p[1],
"z" .. p[1],
}
}
}
m["liw"] = {
"Col",
2981948,
}
m["lix"] = {
"Liabuku",
13580912,
}
m["liy"] = {
"Banda-Bambari",
11051591,
"bad-cnt",
"Latn",
}
m["liz"] = {
"Libinza",
4914576,
"bnt-zbi",
}
m["lja"] = {
"Golpa",
50934920,
"aus-yol",
"Latn",
}
m["lje"] = {
"Rampi",
7290041,
"poz",
}
m["lji"] = {
"Laiyolo",
6474218,
"poz-wot",
"Latn",
}
m["ljl"] = {
"Li'o",
2697010,
"poz",
"Latn",
}
m["ljp"] = {
"Lampung Api",
49215,
"poz-lgx",
"Latn",
}
m["ljw"] = {
"Yirandali",
17059380,
}
m["ljx"] = {
"Yuru",
63257867,
}
m["lka"] = {
"Lakalei",
12952700,
"poz-tim",
"Latn",
}
m["lkb"] = {
"Kabras",
63257894,
"bnt-msl",
"Latn",
ancestors = "luy",
}
m["lkc"] = {
"Kucong",
6441572,
"tbq-lho",
}
m["lkd"] = {
"Lakondê",
20527166,
"sai-nmk",
"Latn",
}
m["lke"] = {
"Kenyi",
12952628,
"bnt-nyg",
}
m["lkh"] = {
"Lakha",
56606,
"sit-tib",
}
m["lki"] = {
"Laki",
56483,
"ku",
"fa-Arab",
translit = "lki-translit",
strip_diacritics = {remove_diacritics = c.kasra .. c.sukun},
}
m["lkj"] = {
"Remun",
7312239,
"poz-mly",
"Latn",
}
m["lkl"] = {
"Laeko-Libuat",
3504331,
"paa-trr",
"Latn",
}
m["lkm"] = {
"Kalaamaya",
6349988,
"aus-pam",
"Latn",
}
m["lkn"] = {
"Lakon",
3216494,
"poz-vnn",
"Latn",
}
m["lko"] = {
"Khayo",
6401095,
"bnt-msl",
"Latn",
}
m["lkr"] = {
"Päri",
36487,
"sdv-lon",
}
m["lks"] = {
"Kisa",
63259208,
"bnt-msl",
ancestors = "luy",
}
m["lkt"] = {
"Lakota",
33537,
"sio-dkt",
"Latn",
}
m["lku"] = {
"Kungkari",
6444526,
}
m["lky"] = {
"Lokoya",
56687,
"sdv-lma",
}
m["lla"] = {
"Lala-Roba",
3914878,
"alv-yun",
}
m["llb"] = {
"Lolo",
11006056,
"bnt-mak",
ancestors = "vmw",
}
m["llc"] = {
"Lele (Guinea)",
6520837,
"dmn-mok",
"Latn",
}
m["lld"] = {
"Ladin",
36202,
"roa-rhe",
"Latn",
}
m["lle"] = {
"Lele (New Guinea)",
3229269,
"poz-aay",
"Latn",
}
m["llf"] = {
"Hermit",
3134240,
"poz-aay",
"Latn",
}
m["llg"] = {
"Lole",
6668883,
"poz-tim",
}
m["llh"] = {
"Lamu",
6482736,
"tbq-lso",
}
m["lli"] = {
"Teke-Laali",
36543,
"bnt-nze",
}
m["llj"] = {
"Ladji-Ladji",
6512694,
"aus-pam",
"Latn",
}
m["llk"] = {
"Lelak",
3229263,
"poz-swa",
"Latn",
}
m["lll"] = {
"Lilau",
6547570,
"paa-mon",
"Latn",
}
m["llm"] = {
"Lasalimu",
6492774,
"poz-mun",
"Latn",
}
m["lln"] = {
"Lele (Chad)",
1641493,
"cdc-est",
}
-- llo: retired by ISO in 2019 as duplicate of ngt (Kriang); removed from Wiktionary 2026-02-01
m["llp"] = {
"North Efate",
3580152,
"poz-vnc",
"Latn",
}
m["llq"] = {
"Lolak",
12953679,
"phi",
}
m["lls"] = {
"Lithuanian Sign Language",
3915480,
"sgn",
}
m["llu"] = {
"Lau",
3218574,
"poz-sls",
"Latn",
}
m["llx"] = {
"Lauan",
35682,
"poz-pcc",
"Latn",
}
m["lma"] = {
"East Limba",
11034212,
"alv-lim",
}
m["lmb"] = {
"Merei",
12952843,
"poz-vnn",
"Latn",
}
m["lmc"] = {
"Limilngan",
6549414,
nil,
"Latn",
}
m["lmd"] = {
"Lumun",
35777,
"alv-tal",
}
m["lme"] = {
"Pévé",
56249,
"cdc-mas",
"Latn",
}
m["lmf"] = {
"South Lembata",
7567815,
}
m["lmg"] = {
"Lamogai",
278365,
"poz-ocw",
"Latn",
}
m["lmh"] = {
"Lambichhong",
6481472,
"sit-kie",
ancestors = "ybh",
}
m["lmi"] = {
"Lombi",
11259563,
"csu-maa",
}
m["lmj"] = {
"West Lembata",
6864697,
}
m["lmk"] = {
"Lamkang",
12952703,
"tbq-kuk",
}
m["lml"] = {
"Raga",
3063193,
"poz-vnn",
"Latn",
}
m["lmn"] = {
"Lambadi",
33474,
"raj",
"Latn",
}
m["lmo"] = {
"Lombard",
33754,
"roa-git",
ancestors = "lmo-old",
"Latn",
}
m["lmp"] = {
"Limbum",
35801,
"nic-nka",
"Latn",
}
m["lmq"] = {
"Lamatuka",
6480982,
"poz-cet",
"Latn",
}
m["lmr"] = {
"Lamalera",
6480787,
"poz-cet",
}
m["lmu"] = {
"Lamenu",
740604,
"poz-vnc",
"Latn",
}
m["lmv"] = {
"Lomaiviti",
3130221,
"poz-pcc",
"Latn",
}
m["lmw"] = {
"Lake Miwok",
3216471,
"nai-utn",
"Latn",
}
m["lmx"] = {
"Laimbue",
6473933,
"nic-rnw",
}
m["lmy"] = {
"Laboya",
6481538,
"poz-cet",
"Latn",
sort_key = "lmy-sortkey",
}
-- Lumbee [lmz] is spurious
m["lna"] = {
"Langbashe",
11137550,
"bad",
}
m["lnb"] = {
"Mbalanhu",
12952830,
"bnt-ova",
}
m["lnd"] = {
"Lun Bawang",
13479839,
"poz-swa",
"Latn",
}
m["lnh"] = {
"Lanoh",
6487291,
"mkh-asl",
}
m["lni"] = {
"Daantanai'",
5207384,
"paa-sbo",
"Latn",
}
m["lnj"] = {
"Linngithigh",
3915694,
"aus-pmn",
"Latn",
}
m["lnl"] = {
"South Central Banda",
41354532,
"bad",
}
m["lnm"] = {
"Pondi",
6485678,
"paa-wke",
"Latn",
}
m["lnn"] = {
"Lorediakarkar",
6680287,
"poz-vnn",
"Latn",
}
m["lno"] = {
"Lango (Sudan)",
223306,
"sdv-lma",
}
m["lns"] = {
"Lamnso'",
35788,
"nic-rng",
}
m["lnu"] = {
"Longuda",
35797,
"alv-bam",
"Latn",
}
m["lnw"] = {
"Lanima",
56825017,
"aus-pam",
"Latn",
}
m["loa"] = {
"Loloda",
6669025,
"paa-lla",
"Latn",
}
m["lob"] = {
"Lobi",
35807,
}
m["loc"] = {
"Inonhan",
2400870,
"phi",
"Latn",
}
m["lod"] = {
"Berawan",
4891018,
"poz-swa",
"Latn",
}
m["loe"] = {
"Saluan",
12953867,
"poz",
"Latn",
}
m["lof"] = {
"Logol",
35779,
"alv-hei",
}
m["log"] = {
"Logo",
2613477,
"csu-mma",
}
m["loh"] = {
"Narim",
56353,
"sdv",
}
m["loi"] = {
"Lomakka",
3913961,
"alv-kul",
}
m["loj"] = {
"Lou",
3260104,
"poz-aay",
"Latn",
}
m["lok"] = {
"Loko",
3914912,
"dmn-msw",
"Latn",
}
m["lol"] = {
"Mongo",
112893,
"bnt-mon",
"Latn",
}
m["lom"] = {
"Loma",
35885,
"dmn-msw",
"Latn, Loma"
}
m["lon"] = {
"Malawi Lomwe",
10975286,
"bnt-mak",
"Latn",
}
m["loo"] = {
"Lombo",
11167192,
"bnt-ske",
}
m["lop"] = {
"Lopa",
3914875,
}
m["loq"] = {
"Lobala",
4849710,
"bnt-ngn",
}
m["lor"] = {
"Téén",
36467,
"alv-kul",
}
m["los"] = {
"Loniu",
3259202,
"poz-aay",
"Latn",
}
m["lot"] = {
"Lotuko",
56672,
"sdv-lma",
}
m["lou"] = {
"Louisiana Creole",
1185127,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["lov"] = {
"Lopi",
12952740,
"tbq-tal",
}
m["low"] = {
"Tampias Lobu",
12953674,
}
m["lox"] = {
"Loun",
6689636,
"poz-cet",
"Latn",
}
m["loz"] = {
"Lozi",
33628,
"bnt-sts",
"Latn",
}
m["lpa"] = {
"Lelepa",
3229273,
"poz-vnc",
"Latn",
}
m["lpe"] = {
"Lepki",
4259152,
"paa-lmu",
"Latn",
}
m["lpn"] = {
"Long Phuri Naga",
6673049,
"sit-aao",
}
m["lpo"] = {
"Lipo",
56921,
"tbq-llo",
"Plrd",
}
m["lpx"] = {
"Lopit",
56684,
"sdv-lma",
}
m["lra"] = {
"Rara Bakati'",
3419746,
"day",
}
m["lrc"] = {
"Northern Luri",
19933293,
"ira-swi",
"fa-Arab",
ancestors = "pal",
}
m["lre"] = {
"Laurentian",
1790301,
"iro-nor",
"Latn",
}
m["lrg"] = {
"Laragia",
2591193,
}
m["lri"] = {
"Marachi",
6754565,
"bnt-msl",
}
m["lrk"] = {
"Loarki",
6663513,
}
m["lrl"] = {
"Larestani",
33468,
"ira-swi",
"fa-Arab",
}
m["lrm"] = {
"Marama",
6325931,
"bnt-msl",
ancestors = "luy",
}
m["lrn"] = {
"Lorang",
6678781,
}
m["lro"] = {
"Laro",
35687,
"alv-hei",
}
m["lrr"] = {
"Southern Lorung",
12952742,
"sit-kie",
}
m["lrt"] = {
"Larantuka Malay",
6488691,
"poz-mly",
"Latn",
}
m["lrv"] = {
"Larëvat",
3217892,
"poz-vnc",
"Latn",
}
m["lrz"] = {
"Lemerig",
2028448,
"poz-vnn",
"Latn",
}
m["lsa"] = {
"Lasgerdi",
3218296,
"ira-kms",
"Arab",
}
m["lsb"] = {
"Burundian Sign Language",
105196488,
"sgn-asl",
}
m["lsd"] = {
"Lishana Deni",
3436461,
"sem-nna",
"Hebr",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["lse"] = {
"Lusengo",
6683546,
"bnt-zbi",
}
m["lsh"] = {
"Lish",
6558822,
"sit-khc",
}
m["lsi"] = {
"Lashi",
6493203,
"tbq-brm",
"Latn",
}
m["lsl"] = {
"Latvian Sign Language",
6497414,
"sgn",
}
m["lsm"] = {
"Saamia",
3739441,
"bnt-msl",
}
m["lsn"] = {
"Tibetan Sign Language",
15936110,
"sgn",
}
m["lso"] = {
"Laos Sign Language",
6488022,
"sgn",
}
m["lsp"] = {
"Panamanian Sign Language",
7129968,
"sgn-asl",
}
m["lsr"] = {
"Aruop",
3450566,
"paa-pal",
"Latn",
}
m["lss"] = {
"Lasi",
12953669,
"inc-snd",
"Arab",
ancestors = "sd",
}
m["lst"] = {
"Trinidad and Tobago Sign Language",
7842495,
"sgn",
}
m["lsv"] = {
"Sivia Sign Language",
55558911,
"sgn",
}
m["lsw"] = {
"Seychelles Sign Language",
110721423,
"sgn",
}
m["lsy"] = {
"Mauritian Sign Language",
6793754,
"sgn",
}
m["ltc"] = {
"Middle Chinese",
2016252,
"zhx",
"Hant, Phag, Tang",
translit = {Hant = "zh-translit"},
-- Tang translit in [[Module:scripts/data]]; NOTE: Previously not present, presumably an accidental omission.
sort_key = {Hant = "Hani-sortkey"},
}
m["ltg"] = {
"Latgalian",
36212,
"bat-eas",
"Latn",
}
m["lti"] = {
"Leti",
3236912,
"poz-tim",
"Latn",
}
m["ltn"] = {
"Latundê",
63259736,
"sai-nmk",
"Latn",
}
m["lto"] = {
"Olutsotso",
63259915,
"bnt-msl",
ancestors = "luy",
}
m["lts"] = {
"Lutachoni",
63283459,
"bnt-msl",
"Latn",
}
m["ltu"] = {
"Latu",
6497181,
"poz-cma",
"Latn",
}
m["lua"] = {
"Luba-Kasai",
34173,
"bnt-lub",
"Latn",
}
m["luc"] = {
"Aringa",
56556,
"csu-mma",
"Latn",
}
m["lud"] = {
"Ludian",
33918,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"ʹ"}
},
strip_diacritics = {
from = {"'"},
to = {"ʹ"}
},
sort_key = {
from = {
"č", "š", "ž", "ü", "ä", "ö", -- 2 chars
"z", "ʹ" -- 1 char
},
to = {
"c" .. p[1], "s" .. p[1], "s" .. p[3], "y" .. p[1], "y" .. p[2], "y" .. p[3],
"s" .. p[2], "y" .. p[4],
}
},
}
m["lue"] = {
"Luvale",
33597,
"bnt-clu",
"Latn",
}
m["luf"] = {
"Laua",
6497673,
"paa-mal",
"Latn",
}
m["luh"] = {
"Leizhou Min",
1988433,
"zhx-nan",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["lui"] = {
"Luiseño",
56236,
"azc-cup",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.circ},
}
m["luj"] = {
"Luna",
11003832,
"bnt-lbn",
}
m["luk"] = {
"Lunanakha",
56446,
"sit-tib",
"Tibt",
ancestors = "dz",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["lul"] = {
"Olu'bo",
6589401,
"csu-mma",
}
m["lum"] = {
"Luimbi",
10963134,
"bnt-clu",
}
m["lun"] = {
"Lunda",
33607,
"bnt-lun",
"Latn",
}
m["luo"] = {
"Luo",
5414796,
"sdv-los",
"Latn",
}
m["lup"] = {
"Lumbu",
35793,
"bnt-sir",
}
m["luq"] = {
"Lucumí",
1768321,
"alv-yor",
"Latn",
ancestors = "yo",
sort_key = {
remove_diacritics = c.acute,
},
}
m["lur"] = {
"Laura",
2984540,
}
m["lus"] = {
"Mizo",
36147,
"tbq-kuk",
"Latn",
}
m["lut"] = {
"Lushootseed",
33658,
"sal",
"Latn",
}
m["luu"] = {
"Lumba-Yakkha",
6703050,
"sit-kie",
ancestors = "ybh",
}
m["luv"] = {
"Luwati",
33402,
"inc-snd",
"Khoj",
}
m["luy"] = {
"Luhya",
35893,
"bnt-msl",
"Latn",
}
m["luz"] = {
"Southern Luri",
12952748,
"ira-swi",
"fa-Arab",
ancestors = "pal",
}
m["lva"] = {
"Maku'a",
35790,
"poz-tim",
}
m["lvi"] = {
"Lawi",
6502657,
"mkh-ban",
"Latn",
}
m["lvk"] = {
"Lavukaleve",
770547,
"qfa-dis", -- Papuan; isolate in Glottolog; in the tentative Central Solomons family by Ross (2005) and Pedrós
-- (2015)
"Latn",
}
m["lvl"] = {
"Lwel",
93936908,
"bnt-bdz",
"Latn",
}
m["lvu"] = {
"Levuka",
6535860,
}
m["lwa"] = {
"Lwalu",
6706953,
"bnt-lbn",
}
m["lwe"] = {
"Lewo Eleng",
6537465,
}
m["lwg"] = {
"Wanga",
nil,
"bnt-msl",
ancestors = "luy",
}
m["lwh"] = {
"White Lachi",
8842956,
"qfa-kra",
}
m["lwl"] = {
"Eastern Lawa",
18644464,
"mkh-pal",
"Thai",
sort_key = "Thai-sortkey",
}
m["lwm"] = {
"Laomian",
19597674,
"tbq-bis",
}
m["lwo"] = {
"Luwo",
56362,
"sdv-lon",
"Latn",
}
m["lws"] = {
"Malawian Sign Language",
47522462,
"sgn",
}
m["lwt"] = {
"Lewotobi",
14916885,
"poz-cet",
}
m["lwu"] = {
"Lawu",
6505073,
"tbq-lwo",
}
m["lww"] = {
"Lewo",
3237321,
"poz-vnc",
"Latn",
}
m["lya"] = {
"Layakha",
56602,
"sit-tib",
"Tibt",
ancestors = "dz",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["lyg"] = {
"Lyngngam",
12635902,
"aav-pkl",
}
m["lyn"] = {
"Luyana",
3268098,
}
m["lzh"] = {
"Classical Chinese",
37041,
"zhx",
"Hant",
wikimedia_codes = "zh-classical",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["lzl"] = {
"Litzlitz",
6653424,
"poz-vnc",
"Latn",
}
m["lzn"] = {
"Leinong Naga",
5924455,
"sit-kch",
}
m["lzz"] = {
"Laz",
1160372,
"ccs-zan",
"Geor, Latn",
translit = {Geor = "lzz-translit"},
override_translit = true,
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
return require("Module:languages").finalizeData(m, "language")
4jnp3uzfyxnnutvo8el9a6gflbz66fw
Mòideal:languages/data/3/m
828
16750
86269
2026-07-22T02:26:46Z
Altronic
4137
Copy from English Wiktionary
86269
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["maa"] = {
"San Jerónimo Tecóatl Mazatec",
7692927,
"omq-maz",
"Latn",
}
m["mab"] = {
"Yutanduchi Mixtec",
12645448,
"omq-mxt",
"Latn",
}
m["mad"] = {
"Madurese",
36213,
"poz-msa",
"Latn, Java",
}
m["mae"] = {
"Bo-Rukul",
34967,
"nic-ple",
"Latn",
}
m["maf"] = {
"Mafa",
35819,
"cdc-cbm",
"Latn",
}
m["mag"] = {
"Magahi", -- Not to be confused with Magadhi Prakrit (pra-mag)
33728,
"inc-bih",
"Deva, Kthi",
translit = {
Deva = "bho-translit",
Kthi = "bho-Kthi-translit",
},
}
m["mai"] = {
"Maithili",
36109,
"inc-bih",
"Deva, Tirh, Kthi, Newa",
translit = {
Deva = "mai-translit",
Tirh = "mai-Tirh-translit",
Kthi = "bho-Kthi-translit",
},
}
m["maj"] = {
"Jalapa de Díaz Mazatec",
3915999,
"omq-maz",
"Latn",
}
m["mak"] = {
"Makasar",
33643,
"poz-ssw",
"Latn, Bugi, Maka",
}
m["mam"] = {
"Mam",
33467,
"myn",
"Latn",
}
m["man"] = {
"Mandingo",
35772,
"dmn-man",
"Latn",
}
m["maq"] = {
"Chiquihuitlán Mazatec",
5101757,
"omq-maz",
"Latn",
}
m["mas"] = {
"Maasai",
35787,
"sdv-lma",
"Latn",
}
m["mat"] = {
"Matlatzinca",
12953704,
"omq",
"Latn",
}
m["mau"] = {
"Huautla Mazatec",
36230,
"omq-maz",
"Latn",
}
m["mav"] = {
"Sateré-Mawé",
6794475,
"tup",
"Latn",
}
m["maw"] = {
"Mampruli",
35804,
"nic-wov",
"Latn",
}
m["max"] = {
"North Moluccan Malay",
7056136,
"crp",
"Latn",
ancestors = "ms",
}
m["maz"] = {
"Central Mazahua",
36228,
"oto",
"Latn",
}
m["mba"] = {
"Higaonon",
5753411,
"mno",
"Latn",
}
m["mbb"] = {
"Western Bukidnon Manobo",
7987643,
"mno",
"Latn",
}
m["mbc"] = {
"Macushi",
56633,
"sai-pem",
"Latn",
}
m["mbd"] = {
"Dibabawon Manobo",
18755523,
"mno",
"Latn",
}
m["mbe"] = {
"Molale",
3319444,
"nai-plp",
"Latn",
}
m["mbf"] = {
"Baba Malay",
18642798,
"crp",
"Latn",
ancestors = "ms",
}
m["mbh"] = {
"Mangseng",
6749147,
"poz-ocw",
"Latn",
}
m["mbi"] = {
"Ilianen Manobo",
14916911,
"mno",
"Latn",
}
m["mbj"] = {
"Nadëb",
3335011,
"sai-nad",
"Latn",
}
m["mbk"] = {
"Malol",
6744477,
"poz-ocw",
"Latn",
}
m["mbl"] = {
"Maxakalí",
3029682,
"sai-mje",
"Latn",
}
m["mbm"] = {
"Ombamba",
36407,
"bnt-mbt",
"Latn",
}
m["mbn"] = {
"Macaguán",
3273980,
"sai-guh",
"Latn",
}
m["mbo"] = { -- is, like 'bqz', 'bsi' and 'bss', a dialect of Manenguba
"Mbo (Cameroon)",
36011,
"bnt-mne",
"Latn",
}
m["mbp"] = {
"Wiwa",
3012604,
"cba",
"Latn",
}
m["mbq"] = {
"Maisin",
3448149,
nil,
"Latn",
}
m["mbr"] = {
"Nukak Makú",
3346228,
"sai-nad",
"Latn",
}
m["mbs"] = {
"Sarangani Manobo",
7423093,
"mno",
"Latn",
}
m["mbt"] = {
"Matigsalug Manobo",
6787447,
"mno",
"Latn",
}
m["mbu"] = {
"Mbula-Bwazza",
3913324,
"nic-jrn",
"Latn",
}
m["mbv"] = {
"Mbulungish",
36003,
"alv-nal",
"Latn",
}
m["mbw"] = {
"Maring",
3293280,
"ngf-jim",
"Latn",
}
m["mbx"] = {
"Mari (Sepik)",
6760942,
"paa-sep",
"Latn",
}
m["mby"] = {
"Memoni",
4180871,
"inc-snd",
"Gujr, ur-Arab",
}
m["mbz"] = {
"Amoltepec Mixtec",
13583504,
"omq-mxt",
"Latn",
}
m["mca"] = {
"Maca",
3281043,
"sai-mtc",
"Latn",
}
m["mcb"] = {
"Machiguenga",
3915441,
"awd",
"Latn",
}
m["mcc"] = {
"Bitur",
4919173,
"paa-tir",
"Latn",
}
m["mcd"] = {
"Sharanahua",
12953881,
"sai-pan",
"Latn",
}
m["mce"] = {
"Itundujia Mixtec",
12953727,
"omq-mxt",
"Latn",
}
m["mcf"] = {
"Matsés",
2981620,
"sai-pan",
"Latn",
}
m["mcg"] = {
"Mapoyo",
56946,
"sai-map",
"Latn",
}
m["mch"] = {
"Ye'kwana",
3082027,
"sai-car",
"Latn",
sort_key = {
remove_diacritics = "%-%s",
from = {"'", "ñ", "ö", "sh", "ü"},
to = {"’", "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1]}
}
}
m["mci"] = {
"Mese",
6821190,
"ngf-san",
"Latn",
}
m["mcj"] = {
"Mvanip",
3913281,
"nic-mmb",
"Latn",
}
m["mck"] = {
"Mbunda",
34170,
"bnt-clu",
"Latn",
}
m["mcl"] = {
"Macaguaje",
6722435,
"sai-tuc",
"Latn",
}
m["mcm"] = {
"Kristang",
2669169,
"crp",
"Latn",
ancestors = "pt",
}
m["mcn"] = {
"Masana",
56668,
"cdc-mas",
}
m["mco"] = {
"Coatlán Mixe",
25559716,
"nai-miz",
"Latn",
}
m["mcp"] = {
"Makaa",
35803,
"bnt-mka",
"Latn",
}
m["mcq"] = {
"Ese",
5397551,
"ngf-koi",
"Latn",
}
m["mcr"] = {
"Menya",
11732444,
"ngf-kme",
"Latn",
}
m["mcs"] = {
"Mambai",
6748872,
"alv-mbm",
"Latn",
}
m["mcu"] = {
"Cameroon Mambila",
19359039,
"nic-mmb",
"Latn",
}
-- mcv (Minanibai) merged into ffi (Foia Foia) per Glottolog
m["mcw"] = {
"Mawa",
3441333,
"cdc-est",
"Latn",
}
m["mcx"] = {
"Mpiemo",
35908,
"bnt-bek",
"Latn",
}
m["mcy"] = {
"South Watut",
12953293,
"poz-ocw",
"Latn",
}
m["mcz"] = {
"Mawan",
11732429,
"ngf-han",
"Latn",
}
m["mda"] = {
"Mada (Nigeria)",
3915843,
"nic-nin",
"Latn",
}
m["mdb"] = {
"Morigi",
6912195,
"paa-kiw",
"Latn",
}
m["mdc"] = {
"Male",
6742927,
"ngf-min",
"Latn",
}
m["mdd"] = {
"Mbum",
36170,
"alv-mbm",
"Latn",
}
m["mde"] = {
"Bura Mabang",
35860,
"ssa",
"Arab, Latn",
}
m["mdf"] = {
"Moksha",
13343,
"urj-mdv",
"Cyrl",
translit = "mdf-translit",
strip_diacritics = {remove_diacritics = c.acute},
override_translit = true,
sort_key = "mdf-sortkey",
}
m["mdg"] = {
"Massalat",
759984,
nil,
"Latn",
}
m["mdh"] = {
"Maguindanao",
33717,
"phi",
"Latn, Arab",
}
m["mdi"] = {
"Mamvu",
3033594,
"csu-mle",
"Latn",
}
m["mdj"] = {
"Mangbetu",
56327,
"csu-maa",
"Latn",
}
m["mdk"] = {
"Mangbutu",
6748877,
"csu-mle",
"Latn",
}
m["mdl"] = {
"Maltese Sign Language",
6744816,
"sgn",
}
m["mdm"] = {
"Mayogo",
6797580,
"nic-nke",
"Latn",
}
m["mdn"] = {
"Mbati",
36165,
"bnt-ngn",
"Latn",
}
m["mdp"] = {
"Mbala",
6799583,
"bnt-pen",
"Latn",
}
m["mdq"] = {
"Mbole",
6799727,
"bnt-mbe",
"Latn",
}
m["mdr"] = {
"Mandar",
35995,
"poz-ssw",
"Bugi, Latn",
}
m["mds"] = {
"Maria",
3448673,
"paa-man",
"Latn",
}
m["mdt"] = {
"Mbere",
36062,
"bnt-mbt",
"Latn",
}
m["mdu"] = {
"Mboko",
36058,
"bnt-mbo",
"Latn",
}
m["mdv"] = {
"Santa Lucía Monteverde Mixtec",
12953722,
"omq-mxt",
"Latn",
}
m["mdw"] = {
"Mbosi",
36035,
"bnt-mbo",
"Latn",
}
m["mdx"] = {
"Dizin",
35313,
"omv-diz",
"Ethi, Latn",
}
m["mdy"] = {
"Maale",
795327,
"omv-ome",
"Latn",
}
m["mdz"] = {
"Suruí Do Pará",
10322149,
"tup-gua",
"Latn",
}
m["mea"] = {
"Menka",
36078,
"nic-grs",
"Latn",
}
m["meb"] = {
"Ikobi-Mena",
11732241,
"paa-tki",
"Latn",
}
m["mec"] = {
"Mara",
6772774,
}
m["med"] = {
"Melpa",
36166,
"ngf-hag",
"Latn",
}
m["mee"] = {
"Mengen",
3305831,
"poz-ocw",
"Latn",
}
m["mef"] = {
"Megam",
6808589,
}
m["meh"] = {
"Southwestern Tlaxiaco Mixtec",
7070686,
"omq-mxt",
"Latn",
}
m["mei"] = {
"Midob",
36007,
"nub",
"Latn",
}
m["mej"] = {
"Meyah",
11732436,
"paa-ebh",
"Latn",
}
m["mek"] = {
"Mekeo",
3304803,
"poz-ocw",
"Latn",
}
m["mel"] = {
"Central Melanau",
18638319,
"poz-swa",
"Latn",
}
m["mem"] = {
"Mangala",
6748664,
}
m["men"] = {
"Mende (Sierra Leone)",
1478672,
"dmn-msw",
"Latn, Mend",
}
m["meo"] = {
"Kedah Malay",
4925684,
"poz-mly",
"Latn, ms-Arab, Thai",
strip_diacritics = {
from = {u(0xF70F)},
to = {"ญ"}
},
sort_key = {Thai = "Thai-sortkey"},
}
m["mep"] = {
"Miriwoong",
3111847,
"aus-jar",
"Latn",
}
m["meq"] = {
"Merey",
3502314,
"cdc-cbm",
"Latn",
}
m["mer"] = {
"Meru",
13313,
"bnt-kka",
"Latn",
}
m["mes"] = {
"Masmaje",
3440448,
}
m["met"] = {
"Mato",
3299190,
"poz-ocw",
"Latn",
}
m["meu"] = {
"Motu",
33516,
"poz-ocw",
"Latn",
}
m["mev"] = {
"Mano",
3913286,
"dmn-mda",
"Latn",
}
m["mew"] = {
"Maaka",
3438764,
"cdc-wst",
"Latn",
}
m["mey"] = {
"Hassaniya Arabic",
56231,
"sem-arb",
"Arab",
}
m["mez"] = {
"Menominee",
13363,
"alg",
"Latn",
sort_key = {remove_diacritics = "·"},
}
m["mfa"] = {
"Pattani Malay",
1199751,
"poz-mly",
"Latn, ms-Arab, Thai",
strip_diacritics = {
from = {u(0xF70F)},
to = {"ญ"}
},
sort_key = {Thai = "Thai-sortkey"},
}
m["mfb"] = {
"Bangka",
3258818,
"poz-mly",
"Latn, Arab",
}
m["mfc"] = {
"Mba",
4286464,
"nic-mbc",
"Latn",
}
m["mfd"] = {
"Mendankwe-Nkwen",
11129537,
"nic-nge",
"Latn",
}
m["mfe"] = {
"Mauritian Creole",
33661,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["mff"] = {
"Naki",
36083,
"nic-bbe",
"Latn",
}
m["mfg"] = {
"Mixifore",
3914478,
"dmn-mok",
}
m["mfh"] = {
"Matal",
3501751,
"cdc-cbm",
"Latn",
}
m["mfi"] = {
"Wandala",
3441249,
"cdc-cbm",
"Latn",
}
m["mfj"] = {
"Mefele",
3501871,
"cdc-cbm",
"Latn",
}
m["mfk"] = {
"North Mofu",
56303,
"cdc-cbm",
"Latn",
}
m["mfl"] = {
"Putai",
56291,
}
m["mfm"] = {
"Marghi South",
56248,
}
m["mfn"] = {
"Cross River Mbembe",
3915395,
"nic-uce",
"Latn",
}
m["mfo"] = {
"Mbe",
36075,
"nic-eko",
"Latn",
}
m["mfp"] = {
"Makassar Malay",
12952776,
"qfa-mix",
"Latn",
ancestors = "ms, mak"
}
m["mfq"] = {
"Moba",
19921578,
"nic-grm",
"Latn",
}
m["mfr"] = {
"Marrithiyel",
6773014,
"aus-dal",
"Latn",
}
m["mfs"] = {
"Mexican Sign Language",
3915511,
"sgn",
"Latn", -- when documented
}
m["mft"] = {
"Mokerang",
3319387,
"poz-aay",
"Latn",
}
m["mfu"] = {
"Mbwela",
11004988,
"bnt-clu",
ancestors = "lch",
}
m["mfv"] = {
"Mandjak",
35822,
"alv-pap",
}
m["mfw"] = {
"Mulaha",
6933720,
"paa-kwa",
"Latn",
}
m["mfx"] = {
"Melo",
6813268,
"omv-nom",
}
m["mfy"] = {
"Mayo",
56729,
"azc-trc",
"Latn",
sort_key = {remove_diacritics = c.acute},
}
m["mfz"] = {
"Mabaan",
20526385,
"sdv",
"Latn",
}
m["mga"] = {
"Middle Irish",
36116,
"cel-gae",
"Latn",
ancestors = "sga",
strip_diacritics = {remove_diacritics = c.dotabove .. c.diaer .. "·"},
sort_key = "mga-sortkey",
}
m["mgb"] = {
"Mararit",
56359,
"sdv-tmn",
}
m["mgc"] = {
"Morokodo",
6913216,
"csu-bbk",
"Latn",
}
m["mgd"] = {
"Moru",
6915014,
"csu-mma",
"Latn, Arab",
}
m["mge"] = {
"Mango",
713659,
"csu-sar",
"Latn",
}
m["mgf"] = {
"Maklew",
6739816,
"paa-bul",
"Latn",
}
m["mgg"] = {
"Mpongmpong",
35924,
"bnt-bek",
}
m["mgh"] = {
"Makhuwa-Meetto",
33604,
"bnt-mak",
"Latn",
ancestors = "vmw",
}
m["mgi"] = {
"Jili",
3914497,
"nic-pls",
}
m["mgj"] = {
"Abureni",
3441256,
"nic-cde",
"Latn",
}
m["mgk"] = {
"Mawes",
6794395,
"qfa-dis", -- Papuan; isolate in Glottolog, Foley (2018) and Hammarström (2010); in the Tor-Kwerba languages per
-- Usher (2020)
"Latn",
}
m["mgl"] = {
"Maleu-Kilenge",
3281884,
}
m["mgm"] = {
"Mambae",
35774,
"poz-tim",
"Latn",
}
m["mgn"] = {
"Mbangi",
11017443,
"nic-ngd",
"Latn",
}
m["mgo"] = {
"Meta'",
36054,
"nic-mom",
"Latn",
}
m["mgp"] = {
"Eastern Magar",
12952758,
"sit-gma",
"Deva, Latn",
}
m["mgq"] = {
"Malila",
6743679,
"bnt-mby",
"Latn",
}
m["mgr"] = {
"Mambwe-Lungu",
626210,
"bnt-mwi",
"Latn",
}
m["mgs"] = {
"Manda (Tanzania)",
16939267,
"bnt-bki",
}
m["mgt"] = {
"Mwakai",
11260674,
"paa-wke",
"Latn",
}
m["mgu"] = {
"Mailu",
3278246,
"paa-mal",
"Latn",
}
m["mgv"] = {
"Matengo",
6786446,
"bnt-mbi",
"Latn",
}
m["mgw"] = {
"Matumbi",
6791974,
"bnt-mbi",
"Latn",
}
m["mgy"] = {
"Mbunga",
6799817,
"bnt-kil",
}
m["mgz"] = {
"Mbugwe",
3426367,
"bnt-mra",
}
m["mha"] = {
"Manda (India)",
56760,
"dra-kki",
"Orya",
translit = "kxv-translit",
}
m["mhb"] = {
"Mahongwe",
35816,
"bnt-kel",
}
m["mhc"] = {
"Mocho",
1941682,
"myn",
}
m["mhd"] = {
"Mbugu",
36152,
"qfa-mix",
"Latn",
ancestors = "asa",
}
m["mhe"] = {
"Besisi",
2742262,
"mkh-asl",
"Latn",
}
m["mhf"] = {
"Mamaa",
6745346,
"ngf-era",
"Latn",
}
m["mhg"] = {
"Marrgu",
6772812,
}
m["mhi"] = {
"Ma'di",
56670,
"csu-mma",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.grave .. c.tilde .. c.dotbelow},
}
m["mhj"] = {
"Mogholi",
13336,
"xgn",
"fa-Arab, Latn",
translit = "fa-cls-translit",
strip_diacritics = {
["fa-Arab"] = "ar-stripdiacritics",
},
}
m["mhk"] = {
"Mungaka",
36068,
"nic-nun",
}
m["mhl"] = {
"Mauwake",
6794095,
"ngf-kum",
"Latn",
}
m["mhm"] = {
"Makhuwa-Moniga",
6900145,
"bnt-mak",
}
m["mhn"] = {
"Mòcheno",
268130,
"gmw-hgm",
"Latn",
ancestors = "bar",
sort_key = {remove_diacritics = c.grave},
}
m["mho"] = {
"Mashi",
10962737,
"bnt-kav",
"Latn",
}
m["mhp"] = {
"Balinese Malay",
12473441,
"crp",
"Latn, Bali, ms-Arab",
}
m["mhq"] = {
"Mandan",
1957120,
"sio",
"Latn",
}
m["mhr"] = {
"Eastern Mari",
3906614,
"chm",
"Cyrl",
translit = "chm-translit",
override_translit = true,
strip_diacritics = {remove_diacritics = c.grave .. c.acute},
sort_key = {
from = {"ё", "ҥ", "ӧ", "ӱ"},
to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
}
}
m["mhs"] = {
"Buru (Indonesia)",
2928650,
"poz-cma",
"Latn",
}
m["mht"] = {
"Mandahuaca",
6747924,
"awd-nwk",
}
m["mhu"] = {
"Taraon",
56400,
"sit-gsi",
"Latn",
}
m["mhw"] = {
"Mbukushu",
2691548,
"bnt",
"Latn",
}
m["mhx"] = {
"Lhao Vo",
11149315,
"tbq-brm",
"Latn",
}
m["mhy"] = {
"Ma'anyan",
2328761,
"poz-bre",
"Latn",
}
m["mhz"] = {
"Mor (Austronesian)",
2122792,
"poz-hce",
"Latn",
}
m["mia"] = {
"Miami",
56523,
"alg",
"Latn",
}
m["mib"] = {
"Atatláhuca Mixtec",
32093046,
"omq-mxt",
"Latn",
}
m["mic"] = {
"Mi'kmaq",
13321,
"alg-eas",
"Latn",
}
m["mid"] = {
"Mandaic",
6991742,
"sem-ase",
"Mand",
ancestors = "myz",
translit = {
Mand = "Mand-translit",
},
strip_diacritics = {
Mand = "Mand-stripdiacritics",
}
}
m["mie"] = {
"Ocotepec Mixtec",
25559575,
"omq-mxt",
"Latn",
}
m["mif"] = {
"Mofu-Gudur",
1365132,
"cdc-cbm",
"Latn",
}
m["mig"] = {
"San Miguel el Grande Mixtec",
12953719,
"omq-mxt",
"Latn",
}
m["mih"] = {
"Chayuco Mixtec",
13583510,
"omq-mxt",
"Latn",
}
m["mii"] = {
"Chigmecatitlán Mixtec",
12953724,
"omq-mxt",
"Latn",
}
m["mij"] = {
"Mungbam",
34725,
"nic-beb",
"Latn",
}
m["mik"] = {
"Mikasuki",
13316,
"nai-mus",
"Latn",
}
m["mil"] = {
"Peñoles Mixtec",
42411307,
"omq-mxt",
"Latn",
}
m["mim"] = {
"Alacatlatzala Mixtec",
14697894,
"omq-mxt",
"Latn",
}
m["min"] = {
"Minangkabau",
13324,
"poz-mly",
"Latn, Arab",
}
m["mio"] = {
"Pinotepa Nacional Mixtec",
7196415,
"omq-mxt",
"Latn",
}
m["mip"] = {
"Apasco-Apoala Mixtec",
13583505,
"omq-mxt",
"Latn",
}
m["miq"] = {
"Miskito",
1516803,
"nai-min",
"Latn",
strip_diacritics = {remove_diacritics = c.circ},
}
m["mir"] = {
"Isthmus Mixe",
6088873,
"nai-miz",
"Latn",
}
m["mit"] = {
"Southern Puebla Mixtec",
7570345,
"omq-mxt",
"Latn",
}
m["miu"] = {
"Cacaloxtepec Mixtec",
12953723,
"omq-mxt",
"Latn",
}
m["miw"] = {
"Akoye",
3327462,
"ngf-taa",
"Latn",
}
m["mix"] = {
"Mixtepec Mixtec",
6884125,
"omq-mxt",
"Latn",
}
m["miy"] = {
"Ayutla Mixtec",
13583508,
"omq-mxt",
"Latn",
}
m["miz"] = {
"Coatzospan Mixtec",
3317290,
"omq-mxt",
"Latn",
}
m["mjb"] = {
"Makalero",
35729,
"paa-alp",
"Latn",
}
m["mjc"] = {
"San Juan Colorado Mixtec",
12953718,
"omq-mxt",
"Latn",
}
m["mjd"] = {
"Northwest Maidu",
3198700,
"nai-mdu",
"Latn",
}
m["mje"] = {
"Muskum",
3913334,
}
-- mjg "Monguor" is not recognized as a language, but it is a family code
m["mji"] = {
"Kim Mun",
1115317,
"hmx-mie",
"Latn",
}
m["mjj"] = {
"Mawak",
11732427,
"ngf-tib",
"Latn",
}
m["mjk"] = {
"Matukar",
6791963,
"poz-ocw",
"Latn",
}
m["mjl"] = {
"Mandeali",
6747931,
"him",
"Deva, Takr",
translit = "hi-translit",
}
m["mjm"] = {
"Medebur",
6805227,
"poz-ocw",
"Latn",
}
m["mjn"] = {
"Mebu",
6804364,
"ngf-yup",
"Latn",
}
m["mjo"] = {
"Malankuravan",
14916887,
"dra-mal",
}
m["mjp"] = {
"Malapandaram",
10575729,
"dra-tam",
}
m["mjq"] = {
"Malaryan",
12952773,
"dra-mal",
}
m["mjr"] = {
"Malavedan",
12952775,
"dra-mal",
"Mlym",
-- Mlym translit in [[Module:scripts/data]]
}
m["mjs"] = {
"Miship",
3441264,
"cdc-wst",
"Latn",
}
m["mjt"] = {
"Sawriya Paharia",
33907,
"dra-mlo",
"Beng, Deva",
}
m["mju"] = {
"Manna-Dora",
10576453,
"dra-tel",
}
m["mjv"] = {
"Mannan",
3286037,
"dra-tam",
"Mlym, Taml",
translit = {
Taml = "ta-translit",
},
-- Mlym translit in [[Module:scripts/data]]
}
m["mjw"] = {
"Karbi",
56591,
"tbq-kuk",
"Latn",
}
m["mjx"] = {
"Mahali",
12953686,
"mun",
}
m["mjy"] = {
"Mahican",
3182562,
"alg-eas",
"Latn",
}
m["mjz"] = {
"Majhi",
6737786,
"inc-bih",
}
m["mka"] = {
"Mbre",
3450154,
"nic", --unclassified within niger-congo tho
}
m["mkb"] = {
"Mal Paharia",
6583595,
"inc-eas",
"Deva",
}
m["mkc"] = {
"Siliput",
7515090,
"paa-mam",
"Latn",
}
m["mke"] = {
"Mawchi",
21403317,
}
m["mkf"] = {
"Miya",
43328,
"cdc-wst",
"Latn",
}
m["mkg"] = {
"Mak (China)",
3280623,
"qfa-kms",
}
m["mki"] = {
"Dhatki",
32480,
"raj",
"Deva, Mahj, Arab",
}
m["mkj"] = {
"Mokilese",
2335528,
"poz-mic",
"Latn",
}
m["mkk"] = {
"Byep",
35052,
"bnt-mka",
}
m["mkl"] = {
"Mokole",
36047,
"alv-yor",
"Latn",
}
m["mkm"] = {
"Moklen",
3319380,
}
m["mkn"] = {
"Kupang Malay",
18458203,
"crp",
"Latn",
}
m["mko"] = {
"Mingang Doso",
3915382,
"alv-bwj",
}
m["mkp"] = {
"Moikodi",
6894594,
"ngf-yar",
"Latn",
}
m["mkq"] = {
"Bay Miwok",
3460957,
"nai-utn",
"Latn",
}
m["mkr"] = {
"Malas",
11732402,
"ngf-nad",
"Latn",
}
m["mks"] = {
"Silacayoapan Mixtec",
7514027,
"omq-mxt",
"Latn",
}
m["mkt"] = {
"Vamale",
14916907,
"poz-cln",
"Latn",
}
m["mku"] = {
"Konyanka Maninka",
11163298,
"dmn-mnk",
}
m["mkv"] = {
"Mav̋ea",
3073532,
"poz-vnn",
"Latn",
}
m["mkx"] = {
"Cinamiguin Manobo",
12953697,
"mno",
"Latn",
}
m["mky"] = {
"Taba",
3512690,
"poz-hce",
"Latn",
}
m["mkz"] = {
"Makasae",
35782,
"paa-eti",
"Latn",
}
m["mla"] = {
"Tamambo",
1153276,
"poz-vnn",
"Latn",
}
m["mlb"] = {
"Mbule",
35843,
"nic-ymb",
"Latn",
}
m["mlc"] = {
"Caolan",
3446682,
"tai-cho",
"Latn, Hani",
sort_key = {Hani = "Hani-sortkey"},
}
m["mle"] = {
"Manambu",
11732406,
"paa-nnd",
"Latn",
}
m["mlf"] = {
"Mal",
3281057,
"mkh-khm",
}
m["mlh"] = {
"Mape",
6753787,
"ngf-kma",
"Latn",
}
m["mli"] = {
"Malimpung",
12473435,
}
m["mlj"] = {
"Miltu",
3441310,
}
m["mlk"] = {
"Ilwana",
6001357,
"bnt-sab",
}
m["mll"] = {
"Malua Bay",
6744946,
"poz-vnc",
"Latn",
}
m["mlm"] = {
"Mulam",
3092284,
"qfa-kms",
"Latn",
}
m["mln"] = {
"Malango",
3281522,
"poz-sls",
"Latn",
}
m["mlo"] = {
"Mlomp",
36009,
"alv-bak",
}
m["mlp"] = {
"Bargam",
4860543,
"ngf-mad",
"Latn",
}
m["mlq"] = {
"Western Maninkakan",
11028033,
"dmn-wmn",
}
m["mlr"] = {
"Vame",
3515088,
"cdc-cbm",
"Latn",
}
m["mls"] = {
"Masalit",
56557,
"ssa",
}
m["mlu"] = {
"To'abaita",
36645,
"poz-sls",
"Latn",
}
m["mlv"] = {
"Mwotlap",
2475538,
"poz-vnn",
"Latn",
}
m["mlw"] = {
"Moloko",
1965222,
"cdc-cbm",
"Latn",
}
m["mlx"] = {
"Malfaxal",
2157421,
"poz-vnc",
"Latn",
}
m["mlz"] = {
"Malaynon",
18755512,
"phi",
}
m["mma"] = {
"Mama",
3913963,
"nic-jrn",
}
m["mmb"] = {
"Momina",
6897297,
}
m["mmc"] = {
"Michoacán Mazahua",
12953705,
"oto",
"Latn",
}
m["mmd"] = {
"Maonan",
3092293,
"qfa-kms",
"Latn",
}
m["mme"] = {
"Tirax",
3276286,
"poz-vnc",
"Latn",
}
m["mmf"] = {
"Mundat",
56263,
"cdc-wst",
"Latn",
}
m["mmg"] = {
"North Ambrym",
2842468,
"poz-vnc",
"Latn",
}
m["mmh"] = {
"Mehináku",
3501838,
"awd",
"Latn",
}
m["mmi"] = {
"Hember Avu",
6940113,
"ngf-tib",
"Latn",
}
m["mmj"] = {
"Majhwar",
6737795,
}
m["mmk"] = {
"Mukha-Dora",
6933447,
}
m["mml"] = {
"Man Met",
3194984,
"mkh-pal",
}
m["mmm"] = {
"Maii",
6735599,
"poz-vnc",
"Latn",
}
m["mmn"] = {
"Mamanwa",
3206623,
"phi",
"Latn",
}
m["mmo"] = {
"Mangga Buang",
12952294,
"poz-ocw",
"Latn",
}
m["mmp"] = {
"Musan",
2605703,
"paa-amu",
"Latn",
}
m["mmq"] = {
"Aisi",
6940074,
"ngf-ais",
"Latn",
}
m["mmr"] = {
"Western Xiangxi Miao",
3307901,
"hmn",
"Latn",
}
m["mmt"] = {
"Malalamai",
3281496,
"poz-ocw",
"Latn",
}
m["mmu"] = {
"Mmaala",
13123461,
"nic-ymb",
"Latn",
}
m["mmv"] = {
"Miriti",
6873567,
"sai-tuc",
"Latn",
}
m["mmw"] = {
"Emae",
3051961,
"poz-pnp",
"Latn",
}
m["mmx"] = {
"Madak",
3275205,
"poz-ocw",
"Latn",
}
m["mmy"] = {
"Migaama",
56259,
"cdc-est",
"Latn",
}
m["mmz"] = {
"Mabaale",
11003249,
"bnt-ngn",
}
m["mna"] = {
"Mbula",
3303572,
"poz-ocw",
"Latn",
}
m["mnb"] = {
"Muna",
6935584,
"poz-mun",
"Latn",
}
m["mnc"] = {
"Manchu",
33638,
"tuw-jrc",
"mnc-Mong, Latn",
ancestors = "juc",
-- mnc-Mong translit in [[Module:scripts/data]]
}
m["mnd"] = {
"Mondé",
6898840,
"tup",
"Latn",
}
m["mne"] = {
"Naba",
760732,
"csu-bgr",
}
m["mnf"] = {
"Mundani",
35839,
"nic-mom",
"Latn",
}
m["mng"] = {
"Eastern Mnong",
12953747,
"mkh-ban",
"Latn, Khmr",
}
m["mnh"] = {
"Mono (Congo)",
33501,
"bad-cnt",
"Latn",
}
m["mni"] = {
"Manipuri",
33868,
"sit",
"Mtei, Beng",
ancestors = "omp",
translit = {Mtei = "Mtei-translit"},
}
m["mnj"] = {
"Munji",
33639,
"ira-mny",
"Arab",
}
m["mnk"] = {
"Mandinka",
33678,
"dmn-wmn",
"Latn, Arab, Nkoo",
}
m["mnl"] = {
"Tiale",
6744350,
"poz-vnn",
"Latn",
}
m["mnm"] = {
"Mapena",
11732415,
"ngf-dag",
"Latn",
}
m["mnn"] = {
"Southern Mnong",
23857582,
"mkh-ban",
}
m["mnp"] = {
"Northern Min",
36457,
"zhx-inm",
"Hants",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["mnq"] = {
"Minriq",
2742268,
"mkh-asl",
"Latn",
}
m["mnr"] = {
"Mono (California)",
33591,
"azc-num",
"Latn",
}
m["mnt"] = {
"Maykulan",
3915696,
"aus-pam",
"Latn",
}
m["mnu"] = {
"Mer",
6817854,
"paa-mai",
"Latn",
}
m["mnv"] = {
"Rennellese",
3397346,
"poz-pnp",
"Latn",
}
m["mnw"] = {
"Mon",
13349,
"mkh-mnc",
"Mymr",
ancestors = "mkh-mmn",
sort_key = {
from = {"ျ", "ြ", "ွ", "ှ", "ၞ", "ၟ", "ၠ", "ၚ", "ဿ"},
to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "္န", "္မ", "္လ", "င", "သ္သ"}
},
}
m["mnx"] = {
"Sougb",
3507964,
"paa-ebh",
"Latn",
}
m["mny"] = {
"Manyawa",
11002622,
"bnt-mak",
ancestors = "vmw",
}
m["mnz"] = {
"Moni",
6899857,
"ngf-pan",
"Latn",
}
m["moa"] = {
"Mwan",
3320111,
"dmn-nbe",
"Latn",
}
m["moc"] = {
"Mocoví",
3027906,
"sai-guc",
"Latn",
}
m["mod"] = {
"Mobilian",
13333,
"crp",
"Latn",
ancestors = "cho, cic",
}
m["moe"] = {
"Montagnais",
13351,
"alg",
"Latn",
ancestors = "cr",
strip_diacritics = {remove_diacritics = c.macron},
}
m["mog"] = {
"Mongondow",
3058458,
"phi",
"Latn",
}
m["moh"] = {
"Mohawk",
13339,
"iro-nor",
"Latn",
ancestors = "iro-omo",
}
m["moi"] = {
"Mboi",
3914417,
"alv-yun",
}
m["moj"] = {
"Monzombo",
11154772,
"nic-nkk",
"Latn",
}
m["mok"] = {
"Morori",
6913275,
}
m["mom"] = {
"Monimbo",
56542,
}
m["moo"] = {
"Monom",
6901726,
"mkh-ban",
}
m["mop"] = {
"Mopan Maya",
36183,
"myn",
"Latn",
}
m["moq"] = {
"Mor (Papuan)",
11732468,
"qfa-dis", -- Papuan; isolate in Glottolog and Palmer (2018); top-level TNG in Ross (2005), in Berau Gulf (under
-- TNG) in Usher (2020)
}
m["mor"] = {
"Moro",
36172,
"alv-hei",
"Latn",
}
m["mos"] = {
"Moore",
36096,
"nic-mre",
"Latn",
}
m["mot"] = {
"Barí",
2886281,
"cba",
"Latn",
}
m["mou"] = {
"Mogum",
3440473,
"cdc-est",
"Latn",
}
m["mov"] = {
"Mojave",
56510,
"nai-yuc",
"Latn",
}
m["mow"] = {
"Moi (Congo)",
11124792,
"bnt-bmo",
"Latn",
}
m["mox"] = {
"Molima",
3319495,
"poz-ocw",
"Latn",
}
m["moy"] = {
"Shekkacho",
56827,
"omv-gon",
}
m["moz"] = {
"Mukulu",
3440403,
"cdc-est",
}
m["mpa"] = {
"Mpoto",
6928303,
"bnt-mbi",
"Latn",
}
m["mpb"] = {
"Mullukmulluk",
6741120,
}
m["mpc"] = {
"Mangarayi",
6748829,
}
m["mpd"] = {
"Machinere",
12953681,
"awd",
"Latn",
}
m["mpe"] = {
"Majang",
56724,
"sdv",
}
m["mpg"] = {
"Marba",
56614,
"cdc-mas",
}
m["mph"] = {
"Maung",
6792550,
"aus-wdj",
"Latn",
}
m["mpi"] = {
"Mpade",
3280670,
"cdc-cbm",
"Latn",
}
m["mpj"] = {
"Martu Wangka",
3295916,
"aus-pam",
"Latn",
}
m["mpk"] = {
"Mbara (Chad)",
3912770,
"cdc-cbm",
}
m["mpl"] = {
"Middle Watut",
15887910,
"poz-ocw",
"Latn",
}
m["mpm"] = {
"Yosondúa Mixtec",
12953741,
"omq-mxt",
"Latn",
}
m["mpn"] = {
"Mindiri",
6863842,
"poz-ocw",
"Latn",
}
m["mpo"] = {
"Miu",
6883668,
"poz-ocw",
"Latn",
}
m["mpp"] = {
"Migabac",
11732448,
"ngf-sop",
"Latn",
}
m["mpq"] = {
"Matís",
3299145,
"sai-pan",
"Latn",
}
m["mpr"] = {
"Vangunu",
3554582,
"poz-ocw",
"Latn",
}
m["mps"] = {
"Dadibi",
5208077,
"paa-teb",
"Latn",
}
m["mpt"] = {
"Mian",
12952846,
"ngf-msu",
"Latn",
}
m["mpu"] = {
"Makuráp",
3281037,
"tup",
"Latn",
}
m["mpv"] = {
"Mungkip",
11732485,
"ngf-boa",
"Latn",
}
m["mpw"] = {
"Mapidian",
6753812,
"awd",
"Latn",
}
m["mpx"] = {
"Misima-Paneati",
6875666,
"poz-ocw",
"Latn",
}
m["mpy"] = {
"Mapia",
3287224,
"poz-mic",
"Latn",
}
m["mpz"] = {
"Mpi",
6928276,
"tbq-bka",
}
m["mqa"] = {
"Maba",
3273750,
}
m["mqb"] = {
"Mbuko",
3502213,
"cdc-cbm",
"Latn",
}
m["mqc"] = {
"Mangole",
6749097,
"poz-cma",
"Latn",
}
m["mqe"] = {
"Matepi",
11732426,
"ngf-han",
"Latn",
}
m["mqf"] = {
"Momuna",
6897518,
}
m["mqg"] = {
"Kota Bangun Kutai Malay",
12952778,
}
m["mqh"] = {
"Tlazoyaltepec Mixtec",
12953740,
"omq-mxt",
"Latn",
}
m["mqi"] = {
"Mariri",
6765544,
}
m["mqj"] = {
"Mamasa",
6745452,
"poz-ssw",
"Latn",
}
m["mqk"] = {
"Rajah Kabunsuwan Manobo",
12953700,
"mno",
}
m["mql"] = {
"Mbelime",
4286473,
"nic-eov",
"Latn",
}
m["mqm"] = {
"South Marquesan",
19694214,
"poz-pep",
"Latn",
}
m["mqn"] = {
"Moronene",
642581,
"poz-btk",
"Latn",
}
m["mqo"] = {
"Modole",
11732457,
"paa-gto",
"Latn",
}
m["mqp"] = {
"Manipa",
6749799,
"poz-cma",
"Latn",
}
m["mqq"] = {
"Minokok",
18642293,
"poz-san",
"Latn",
}
m["mqr"] = {
"Mander",
6747979,
"paa-tor",
"Latn",
}
m["mqs"] = {
"West Makian",
3033575,
"paa-nha",
"Latn",
}
m["mqt"] = {
"Mok",
13018559,
"mkh-pal",
}
m["mqu"] = {
"Mandari",
3285426,
"sdv-bri",
}
m["mqv"] = {
"Mosimo",
11732478,
"ngf-nwh",
"Latn",
}
m["mqw"] = {
"Murupi",
11732486,
"ngf-nwh",
"Latn",
}
m["mqx"] = {
"Mamuju",
6746004,
"poz-ssw",
"Latn",
}
m["mqy"] = {
"Manggarai",
3285748,
"poz-cet",
"Latn",
}
m["mqz"] = {
"Malasanga",
14916889,
"poz-ocw",
"Latn",
}
m["mra"] = {
"Mlabri",
3073465,
"mkh",
}
m["mrb"] = {
"Sungwadia",
3293299,
"poz-vnn",
"Latn",
}
m["mrc"] = {
"Maricopa",
56386,
"nai-yuc",
"Latn",
}
m["mrd"] = {
"Western Magar",
22303263,
"sit-gma",
"Deva",
}
m["mre"] = {
"Martha's Vineyard Sign Language",
33494,
"sgn",
"Latn, Sgnw",
}
m["mrf"] = {
"Elseng",
3915667,
"qfa-unc", -- "Border or language isolate"; unclassifiable due to paucity of data
"Latn",
}
m["mrg"] = {
"Mising",
3316328,
"sit-tan",
"Latn, Beng, Deva",
ancestors = "adi",
}
m["mrh"] = {
"Mara Chin",
4175893,
"tbq-kuk",
"Latn",
}
m["mrj"] = {
"Western Mari",
1776032,
"chm",
"Cyrl",
translit = "chm-translit",
sort_key = "mrj-sortkey",
}
m["mrk"] = {
"Hmwaveke",
5873712,
"poz-cln",
"Latn",
}
m["mrl"] = {
"Mortlockese",
3324598,
"poz-mic",
"Latn",
}
m["mrm"] = {
"Mwerlap",
3331115,
"poz-vnn",
"Latn",
}
m["mrn"] = {
"Cheke Holo",
2962165,
"poz-ocw",
"Latn",
}
m["mro"] = {
"Mru",
1951521,
"sit-mru",
"Latn, Mroo",
}
m["mrp"] = {
"Morouas",
6913299,
"poz-vnn",
"Latn",
}
m["mrq"] = {
"North Marquesan",
2603808,
"poz-pep",
"Latn",
}
m["mrr"] = {
"Hill Maria",
27602,
"dra-mdy",
"Deva",
}
m["mrs"] = {
"Maragus",
6754640,
"poz-vnc",
"Latn",
}
m["mrt"] = {
"Margi",
56241,
"cdc-cbm",
"Latn",
}
m["mru"] = {
"Mono (Cameroon)",
11031964,
"alv-mbm",
"Latn",
}
m["mrv"] = {
"Mangarevan",
36237,
"poz-pep",
"Latn",
}
m["mrw"] = {
"Maranao",
33800,
"phi",
"Latn, Arab",
}
m["mrx"] = {
"Dineor",
5278044,
"paa-tor",
"Latn",
}
m["mry"] = {
"Karaga Mandaya",
6747925,
"phi",
}
m["mrz"] = {
"Marind",
6763970,
"paa-mri",
"Latn",
}
m["msb"] = {
"Masbatenyo",
33948,
"phi",
"Latn",
}
m["msc"] = {
"Sankaran Maninka",
11155812,
"dmn-mnk",
}
m["msd"] = {
"Yucatec Maya Sign Language",
34281,
"sgn",
"Latn", -- when documented
}
m["mse"] = {
"Musey",
56328,
"cdc-mas",
}
m["msf"] = {
"Mekwei",
4544752,
"paa-nim",
"Latn",
}
m["msg"] = {
"Moraid",
6909020,
"paa-wbh",
"Latn",
}
m["msi"] = {
"Sabah Malay",
10867404,
"crp",
"Latn, Arab",
}
m["msj"] = {
"Ma",
6720909,
"nic-mbc",
"Latn",
}
m["msk"] = {
"Mansaka",
12952800,
"phi",
"Latn",
}
m["msl"] = {
"Molof",
4300950,
}
m["msm"] = {
"Agusan Manobo",
12953696,
"mno",
"Latn",
}
m["msn"] = {
"Vurës",
3563857,
"poz-vnn",
"Latn",
}
m["mso"] = {
"Mombum",
6897079,
"ngf-mom",
"Latn",
}
m["msp"] = {
"Maritsauá",
6765915,
"tup",
"Latn",
}
m["msq"] = {
"Caac",
2932212,
"poz-cln",
"Latn",
}
m["msr"] = {
"Mongolian Sign Language",
3915499,
"sgn",
}
m["mss"] = {
"West Masela",
12952816,
"poz-tim",
}
m["msu"] = {
"Musom",
6943041,
"poz-ocw",
"Latn",
}
m["msv"] = {
"Maslam",
3502273,
}
m["msw"] = {
"Mansoanka",
35814,
}
m["msx"] = {
"Moresada",
11732475,
"ngf-pom",
"Latn",
}
m["msy"] = {
"Aruamu",
3501809,
"paa-rub",
"Latn",
}
m["msz"] = {
"Momare",
6897030,
"ngf-sop",
"Latn",
}
m["mta"] = {
"Cotabato Manobo",
12953698,
"mno",
"Latn",
}
m["mtb"] = {
"Anyin Morofo",
3502338,
"alv-ctn",
"Latn",
ancestors = "any",
}
m["mtc"] = {
"Munit",
11732482,
"ngf-kok",
"Latn",
}
m["mtd"] = {
"Mualang",
3073458,
"poz-mly",
"Latn",
}
m["mte"] = {
"Alu",
33503,
"poz-ocw",
"Latn",
}
m["mtf"] = {
"Murik (New Guinea)",
7050035,
"paa-lse",
"Latn",
}
m["mtg"] = {
"Una",
5580728,
"ngf-mek",
"Latn",
}
m["mth"] = {
"Munggui",
6936018,
"poz-hce",
"Latn",
}
m["mti"] = {
"Maiwa (New Guinea)",
6737223,
"ngf-dag",
"Latn",
}
m["mtj"] = {
"Moskona",
11288953,
"paa-ebh",
"Latn",
}
m["mtk"] = {
"Mbe'",
10964025,
"nic-nka",
"Latn",
}
m["mtl"] = {
"Montol",
3440457,
"cdc-wst",
"Latn",
}
m["mtm"] = {
"Mator",
20669419,
"syd",
"Cyrl",
}
m["mtn"] = {
"Matagalpa",
3490756,
"nai-min",
}
m["mto"] = {
"Totontepec Mixe",
7828400,
"nai-miz",
"Latn",
}
m["mtp"] = {
"Wichí Lhamtés Nocten",
5908756,
"sai-wic",
"Latn",
}
m["mtq"] = {
"Muong",
3236789,
"mkh-vie",
"Latn",
sort_key = "vi-sortkey",
}
m["mtr"] = {
"Mewari",
2992857,
"raj",
"Deva",
translit = "hi-translit", -- for now
}
m["mts"] = {
"Yora",
3572572,
"sai-pan",
"Latn",
}
m["mtt"] = {
"Mota",
3325052,
"poz-vnn",
"Latn",
}
m["mtu"] = {
"Tututepec Mixtec",
7857069,
"omq-mxt",
"Latn",
}
m["mtv"] = {
"Asaro'o",
3503684,
"ngf-war", -- ngf-moa if we split out Molet from Asaro'o
"Latn",
}
m["mtw"] = {
"Magahat",
6729600,
"phi",
}
m["mtx"] = {
"Tidaá Mixtec",
7800805,
"omq-mxt",
"Latn",
}
m["mty"] = {
"Nabi",
6956858,
"paa-wpa",
"Latn",
}
m["mua"] = {
"Mundang",
36032,
"alv-mbm",
}
m["mub"] = {
"Mubi",
3440518,
"cdc-est",
"Latn",
}
m["muc"] = {
"Mbu'",
35868,
"nic-beb",
"Latn",
}
m["mud"] = {
"Mednyj Aleut",
1977419,
"qfa-mix",
ancestors = "ale, ru"
}
m["mue"] = {
"Media Lengua",
36066,
"qfa-mix",
"Latn",
ancestors = "es, qu",
}
m["mug"] = {
"Musgu",
3123545,
"cdc-cbm",
"Latn",
}
m["muh"] = {
"Mündü",
35981,
"nic-nke",
"Latn",
}
m["mui"] = {
"Musi",
615660,
"poz-mly",
"Latn",
}
m["muj"] = {
"Mabire",
3440437,
}
m["mul"] = {
"Translingual",
7834564,
"qfa-not",
"All",
-- NOTE: The following sort keys are used in process_page() in [[Module:headword/page]], which generates
-- the default sort key for the page (corresponding to {{DEFAULTSORT:...}}) by generating a sort key for
-- the pagename using `makeSortKey()` called on language object "mul". Currently this just handles
-- Japanese sort keys.
--
-- FIXME: This should be smarter and use the language of the page if there's only one.
sort_key = {
Hani = "Hani-sortkey",
Jpan = "Jpan-sortkey",
Hrkt = "Hira-sortkey", -- Sort all kana as Hira.
Hira = "Hira-sortkey",
Kana = "Hira-sortkey",
},
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["mum"] = {
"Maiwala",
12952764,
"poz-ocw",
"Latn",
}
m["muo"] = {
"Nyong",
36373,
"alv-lek",
}
m["mup"] = {
"Malvi",
33413,
"raj",
"Deva",
translit = "hi-translit"
}
m["muq"] = {
"Eastern Xiangxi Miao",
27431376,
"hmn",
}
m["mur"] = {
"Murle",
56727,
"sdv",
}
m["mus"] = {
"Creek",
523014,
"nai-mus",
"Latn",
}
m["mut"] = {
"Western Muria",
12952886,
"dra-mur",
}
m["muu"] = {
"Yaaku",
34222,
"cus-eas",
}
m["muv"] = {
"Muthuvan",
3327420,
"dra-tam",
}
m["mux"] = {
"Bo-Ung",
15831607,
"ngf-hag",
"Latn",
}
m["muy"] = {
"Muyang",
3502301,
"cdc-cbm",
"Latn",
}
m["muz"] = {
"Mursi",
36013,
"sdv",
}
m["mva"] = {
"Manam",
6746851,
"poz-ocw",
"Latn",
}
m["mvb"] = {
"Mattole",
20824,
"ath-pco",
"Latn",
}
m["mvd"] = {
"Mamboru",
578815,
"poz",
"Latn",
}
m["mvg"] = {
"Yucuañe Mixtec",
25562736,
"omq-mxt",
"Latn",
}
m["mvh"] = {
"Mire",
3441359,
}
m["mvi"] = {
"Miyako",
36218,
"jpx-sry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["mvk"] = {
"Mekmek",
6810592,
"paa-yua",
"Latn",
}
m["mvl"] = {
"Mbara (Australia)",
6799620,
"aus-pam",
"Latn",
}
m["mvm"] = {
"Muya",
2422759,
"sit-qia",
}
m["mvn"] = {
"Minaveha",
6863278,
"poz-ocw",
"Latn",
}
m["mvo"] = {
"Marovo",
3294683,
"poz-ocw",
"Latn",
}
m["mvp"] = {
"Duri",
3915414,
"poz-ssw",
"Latn",
}
m["mvq"] = {
"Moere",
11732458,
"ngf-kum",
"Latn",
}
m["mvr"] = {
"Marau",
6755069,
"poz-hce",
"Latn",
}
m["mvs"] = {
"Massep",
3502895,
"qfa-dis", -- poorly documented (but in vigorous use); isolate per Ethnologue, Glottolog, and Foley (2018); Greater
-- Kwerba per Usher
"Latn",
}
m["mvt"] = {
"Mpotovoro",
6928305,
"poz-vnc",
"Latn",
}
m["mvu"] = {
"Marfa",
713633,
}
m["mvv"] = {
"Tagal Murut",
7675300,
"poz-san",
"Latn",
}
m["mvw"] = {
"Machinga",
12952754,
"bnt-rvm",
}
m["mvx"] = {
"Meoswar",
6817777,
"poz-hce",
"Latn",
}
m["mvy"] = {
"Indus Kohistani",
33399,
"inc-koh",
"Arab",
}
m["mvz"] = {
"Mesqan",
6821677,
"sem-eth",
}
m["mwa"] = {
"Mwatebu",
14916896,
"poz-ocw",
"Latn",
}
m["mwb"] = {
"Juwal",
6319103,
"paa-mmu",
"Latn",
}
m["mwc"] = {
"Are",
29277,
"poz-ocw",
"Latn",
}
m["mwe"] = {
"Mwera",
6944725,
"bnt-rvm",
"Latn",
}
m["mwf"] = {
"Murrinh-Patha",
2980398,
"aus-dal",
"Latn",
}
m["mwg"] = {
"Aiklep",
3399652,
"poz-ocw",
"Latn",
}
m["mwh"] = {
"Mouk-Aria",
3325498,
"poz-ocw",
"Latn",
}
m["mwi"] = {
"Labo",
2157452,
"poz-vnc",
"Latn",
}
m["mwk"] = {
"Kita Maninkakan",
3015523,
"dmn-wmn",
}
m["mwl"] = {
"Mirandese",
13330,
"roa-asl",
"Latn",
}
m["mwm"] = {
"Sar",
56850,
"csu-sar",
"Latn",
}
m["mwn"] = {
"Nyamwanga",
6944666,
"bnt-mwi",
"Latn",
}
m["mwo"] = {
"Sungwadaga",
3276435,
"poz-vnn",
"Latn",
}
m["mwp"] = {
"Kala Lagaw Ya",
2591262,
"aus-pam",
"Latn",
}
m["mwq"] = {
"Mün Chin",
331340,
"tbq-kuk",
}
m["mwr"] = {
"Marwari",
56312,
"raj",
"Deva, Mahj",
translit = {
Deva = "hi-translit", -- for now
Mahj = "Mahj-translit",
},
}
m["mws"] = {
"Mwimbi-Muthambi",
15632357,
"bnt-kka",
"Latn",
}
m["mwt"] = {
"Moken",
18648701,
"poz",
}
m["mwu"] = {
"Mittu",
6883573,
"csu-bbk",
"Latn",
}
m["mwv"] = {
"Mentawai",
13365,
"poz-nws",
"Latn",
}
m["mww"] = {
"White Hmong",
3138829,
"hmn",
"Latn, Hmng, Hmnp",
}
m["mwz"] = {
"Moingi",
11011905,
}
m["mxa"] = {
"Northwest Oaxaca Mixtec",
12953739,
"omq-mxt",
"Latn",
}
m["mxb"] = {
"Tezoatlán Mixtec",
3317286,
"omq-mxt",
"Latn",
}
m["mxd"] = {
"Modang",
6888037,
"poz",
"Latn",
}
m["mxe"] = {
"Mele-Fila",
3305008,
"poz-pnp",
"Latn",
}
m["mxf"] = {
"Malgbe",
3502224,
}
m["mxg"] = {
"Mbangala",
6799612,
"bnt-yak",
}
m["mxh"] = {
"Mvuba",
6944591,
"csu-mle",
"Latn",
}
m["mxi"] = {
"Mozarabic",
317044,
"roa-ibe",
"Arab, Hebr, Latn",
translit = "mxi-translit",
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["mxj"] = {
"Miju",
56332,
"sit-mdz",
"Latn, Deva",
}
m["mxk"] = {
"Monumbo",
6906792,
"paa-mon",
"Latn",
}
m["mxl"] = {
"Maxi Gbe",
35770,
"alv-gbe",
}
m["mxm"] = {
"Meramera",
6817936,
"poz-ocw",
"Latn",
}
m["mxn"] = {
"Moi (Indonesia)",
11732459,
"paa-wbh",
"Latn",
}
m["mxo"] = {
"Mbowe",
10962309,
"bnt-kav",
}
m["mxp"] = {
"Tlahuitoltepec Mixe",
7810697,
}
m["mxq"] = {
"Juquila Mixe",
25559721,
}
m["mxr"] = {
"Murik (Malaysia)",
3328150,
nil,
"Latn",
}
m["mxs"] = {
"Huitepec Mixtec",
12953729,
"omq-mxt",
"Latn",
}
m["mxt"] = {
"Jamiltepec Mixtec",
12953730,
"omq-mxt",
"Latn",
}
m["mxu"] = {
"Mada (Cameroon)",
3441206,
"cdc-cbm",
"Latn",
}
m["mxv"] = {
"Metlatónoc Mixtec",
36363,
"omq-mxt",
"Latn",
}
m["mxw"] = {
"Namo",
12952923,
"paa-nam",
"Latn",
}
m["mxx"] = {
"Mahou",
11004334,
"dmn-mnk",
"Latn, Nkoo",
}
m["mxy"] = {
"Southeastern Nochixtlán Mixtec",
7070684,
"omq-mxt",
"Latn",
}
m["mxz"] = {
"Central Masela",
42575433,
"poz-tim",
"Latn",
}
m["myb"] = {
"Mbay",
3033565,
"csu-sar",
"Latn",
}
m["myc"] = {
"Mayeka",
11129517,
"bnt-boa",
}
m["mye"] = {
"Myene",
35832,
"bnt-tso",
"Latn",
}
m["myf"] = {
"Bambassi",
56540,
"omv-mao",
"Latn",
}
m["myg"] = {
"Manta",
35799,
"nic-mom",
"Latn",
}
m["myh"] = {
"Makah",
3280640,
"wak",
"Latn",
}
m["myj"] = {
"Mangayat",
35988,
"nic-ser",
}
m["myk"] = {
"Mamara",
36187,
"alv-sma",
"Latn",
}
m["myl"] = {
"Moma",
6897018,
"poz",
"Latn",
}
m["mym"] = {
"Me'en",
3408516,
"sdv",
}
m["myo"] = {
"Anfillo",
34928,
"omv-gon",
}
m["myp"] = {
"Pirahã",
33825,
"sai-mur",
"Latn",
}
m["myr"] = {
"Muniche",
3915654,
}
m["mys"] = {
"Mesmes",
3508617,
"sem-eth",
}
m["myu"] = {
"Mundurukú",
746723,
"tup",
"Latn",
}
m["myv"] = {
"Erzya",
29952,
"urj-mdv",
"Cyrl",
translit = "myv-translit",
override_translit = true,
}
m["myw"] = {
"Muyuw",
3502878,
"poz-ocw",
"Latn",
}
m["myx"] = {
"Masaba",
12952814,
"bnt-msl",
"Latn",
}
m["myy"] = {
"Macuna",
3275059,
"sai-tuc",
"Latn",
}
m["myz"] = {
"Classical Mandaic",
25559314,
"sem-ase",
"Mand",
translit = {
Mand = "Mand-translit",
},
strip_diacritics = {
Mand = "Mand-stripdiacritics",
}
}
m["mza"] = {
"Santa María Zacatepec Mixtec",
8063756,
"omq-mxt",
"Latn",
}
m["mzb"] = {
"Northern Saharan Berber",
11156769,
"ber",
"Arab, Latn, Tfng",
}
m["mzc"] = {
"Madagascar Sign Language",
12715020,
"sgn",
}
m["mzd"] = {
"Malimba",
35806,
"bnt-saw",
}
m["mze"] = {
"Morawa",
6909384,
"paa-mal",
"Latn",
}
m["mzg"] = {
"Monastic Sign Language",
3217333,
"sgn",
}
m["mzh"] = {
"Wichí Lhamtés Güisnay",
7998197,
"sai-wic",
"Latn",
}
m["mzi"] = {
"Ixcatlán Mazatec",
6101049,
"omq-maz",
"Latn",
}
m["mzj"] = {
"Manya",
11006832,
"dmn-mnk",
}
m["mzk"] = {
"Nigeria Mambila",
11004163,
"nic-mmb",
"Latn",
}
m["mzl"] = {
"Mazatlán Mixe",
25559728,
}
m["mzm"] = {
"Mumuye",
36021,
"alv-mum",
"Latn",
}
m["mzn"] = {
"Mazanderani",
13356,
"ira-msh",
"mzn-Arab",
}
m["mzo"] = {
"Matipuhy",
6787588,
"sai-kui",
"Latn",
}
m["mzp"] = {
"Movima",
1659701,
"qfa-iso",
"Latn",
}
m["mzq"] = {
"Mori Atas",
3324070,
"poz-btk",
"Latn",
}
m["mzr"] = {
"Marúbo",
3296011,
"sai-pan",
"Latn",
}
m["mzs"] = {
"Macanese",
35785,
"crp",
"Latn",
ancestors = "pt",
sort_key = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.cedilla}},
}
m["mzt"] = {
"Mintil",
6869641,
"mkh-asl",
}
m["mzu"] = {
"Inapang",
6013569,
"paa-tam",
"Latn",
}
m["mzv"] = {
"Manza",
36038,
"gba-eas",
}
m["mzw"] = {
"Deg",
35183,
"nic-gnw",
"Latn",
}
m["mzx"] = {
"Mawayana",
6794377,
"awd",
}
m["mzy"] = {
"Mozambican Sign Language",
6927809,
"sgn",
}
m["mzz"] = {
"Maiadomu",
6735234,
"poz-ocw",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
8lge7v83jkc0fjjt3qw6jktpl46r6wb
Mòideal:table/compare
828
16751
86270
2026-07-22T06:28:21Z
Altronic
4137
Copy from English Wiktionary
86270
Scribunto
text/plain
local string_linesub_module = "Module:string/linesub"
local table_get_metamethod_module = "Module:table/getMetamethod"
local error = error
local rawequal = rawequal
local require = require
local sub = string.sub
local traceback = debug.traceback
local xpcall = xpcall
local function get_metamethod(...)
get_metamethod = require(table_get_metamethod_module)
return get_metamethod(...)
end
local function linesub(...)
linesub = require(string_linesub_module)
return linesub(...)
end
local _a, _b -- used to pass arguments to compare_for_xpcall()
local NOT_COMPARABLE = {} -- sentinel
local function compare_for_xpcall()
local a, b = _a, _b
_a, _b = nil
return a < b
end
local function err_handler(err)
-- Error message relate to comparing two table values, but the trace at the
-- start of the message needs to be trimmed. Traceback will only refer to
-- xpcall() on line 5 if the error occured in compare_for_xpcall(); if it
-- originated further up the stack (i.e. in a metamethod), xpcall() will
-- only be mentioned on a later line.
if (
sub(err, -35) == "attempt to compare two table values" and
linesub(traceback(), 5, 5) == "\t[C]: in function 'xpcall'"
) then
return NOT_COMPARABLE
end
return err
end
--[==[
A comparison function for tables, which returns {true} if {a} sorts before {b}, or otherwise {false}; it can be used as the sort function with {table.sort}.
By default, attempting to compare two tables will result in an error, unless both tables have the same {__lt} metamethod. This function will also use the {__lt} metamethod under the same circumstances, but will return {false} instead of throwing an error if the two tables are not comparable.]==]
return function(a, b)
-- If `a` and `b` are tables, they are only comparable if they both have the
-- same __lt metamethod. get_unprotected_metatable() returns nil if there is
-- no metatable, and false if the metatable is protected.
local success_a, __lt_a = get_metamethod(a, "__lt")
-- Not comparable if `a` has no __lt metamethod.
if success_a and __lt_a == nil then
return false
end
local success_b, __lt_b = get_metamethod(b, "__lt")
if success_b then
-- Not comparable if `b` has no __lt metamethod.
if __lt_b == nil then
return false
-- If `a` and `b` have known __lt metamethods, they are only comparable
-- if the two metamethods are primitively equal.
elseif __lt_a ~= nil then
return rawequal(__lt_a, __lt_b) and a < b
end
end
-- Not possible to know if `a` and `b` are comparable if either or both have
-- protected metatables, and neither are confirmed to have no __lt
-- metamethod. Use xpcall() when comparing them, with an error handler that
-- determines if the error was due to `a` and `b` not being comparable.
-- Unlike pcall(), xpcall() can't pass on arguments to the called function,
-- so use upvalues in the top-level of the module to circumvent this.
_a, _b = a, b
local success, result = xpcall(compare_for_xpcall, err_handler)
if success then
return result
elseif result == NOT_COMPARABLE then
return false
end
-- If the error wasn't due to the comparison, rethrow it.
error(result)
end
8mcw42u3tihzaq6279e3zlbjws3nhdr
Mòideal:table/compressSparseArray
828
16752
86271
2026-07-22T06:29:03Z
Altronic
4137
Copy from English Wiktionary
86271
Scribunto
text/plain
local table_num_keys_module = "Module:table/numKeys"
local function num_keys(...)
num_keys = require(table_num_keys_module)
return num_keys(...)
end
--[==[
Given a list that may contain gaps (e.g. {1, 2, nil, 4}), returns a new gapless list in the same order.]==]
return function(t)
local list, keys, i = {}, num_keys(t), 0
while true do
i = i + 1
local k = keys[i]
if k == nil then
return list
end
list[i] = t[k]
end
end
23nyyesbtac5ffo4gwnkyx8uhxrigj0
Mòideal:table/contains
828
16753
86272
2026-07-22T06:29:39Z
Altronic
4137
Copy from English Wiktionary
86272
Scribunto
text/plain
local table_find_module = "Module:table/find"
local function table_find(...)
table_find = require(table_find_module)
return table_find(...)
end
--[==[
Given a list and a value to be found, returns {true} if the value is in the array portion of the list, or {false} if not.
`options` is an optional table of additional options to control the behavior of the operation. The following options are recognized:
* `comparison`: Function of two arguments to compare whether `item` is equal to an existing item in `list`. If unspecified, items are considered equal if either the standard equality operator {==} or {deepEquals} return {true}. As a special case, if the string value {"=="} is specified, then the standard equality operator alone will be used.
* `key`: Function of one argument to return a comparison key, which will be used with the comparison function. The key function is applied to both `item` and the existing item in `list` to compare against, and the comparison is done against the results.]==]
return function(...)
return table_find(...) and true or false
end
avq83e5r7vp9ry6mn3nxu1gtka33xms
Mòideal:table/empty
828
16754
86273
2026-07-22T06:30:13Z
Altronic
4137
Copy from English Wiktionary
86273
Scribunto
text/plain
local table_get_metamethod = "Module:table/getMetamethod"
local next = next
local pairs = pairs
local pairs_default_iter = pairs{}
local function get_metamethod(...)
get_metamethod = require(table_get_metamethod)
return get_metamethod(...)
end
-- Not possible to simply iterate with a for-loop, since removing a key means
-- it can't be given to next() on the subsequent iteration. Instead, repeatedly
-- giving next() the initial state and key will either return some valid key,
-- which can then be removed, or nil, once the table is empty.
local function empty_raw(t, iter, state, init)
while true do
local k = iter(state, init)
if k == nil then
return t
end
t[k] = nil
end
end
--[==[
Given a table, sets all keys to {nil}. If `raw` is set, then metamethods will be ignored.
Warning: this function is only recommended for tables with a small handful of keys, where reusing a table will avoid creating a large number of temporary objects. In the vast majority of situations, it is more efficient to simply create a new table.]==]
return function(t, raw)
if raw then
return empty_raw(t, next, t)
end
-- If `raw` is not set, try to check for a __pairs metamethod. The check
-- will fail if there's a protected metatable, but if it succeeds and
-- there's no __pairs metamethod, use empty_raw() as an optimisation.
local success, __pairs = get_metamethod(t, "__pairs")
if success and __pairs == nil then
return empty_raw(t, next, t)
end
-- If the iterator returned by the __pairs metamethod is just the default
-- pairs iterator or next(), use empty_raw() with the returned state and
-- key. This is most likely to happen if a protected metatable doesn't have
-- a __pairs metamethod.
local iter, state, k = pairs(t)
if iter == pairs_default_iter or iter == next then
return empty_raw(t, iter, state, k)
end
-- If the iterator returns nothing, `t` is already empty.
k = iter(state, k)
if k == nil then
return t -- already empty
end
-- Otherwise, build a table of keys first, then iterate over it to remove
-- keys from `t`, which ensures removals don't disrupt the loop.
local keys = {[k] = true}
for k in iter, state, k do
keys[k] = true
end
for k in next, keys do
t[k] = nil
end
return t
end
5cjvu27spz7eb4k7wsc8euj5vvq30dg
Mòideal:table/extend
828
16755
86274
2026-07-22T06:31:27Z
Altronic
4137
Copy from English Wiktionary
86274
Scribunto
text/plain
local insert = table.insert
local select = select
--[==[
Extend an existing list by a new list, modifying the existing list in-place. Compare the Python expression {list.extend(new_items)}.]==]
return function(t, ...)
local i = 0
if select("#", ...) < 2 then
local list = ...
while true do
i = i + 1
local v = list[i]
if v == nil then
return t
end
insert(t, v)
end
else
local pos, list = ...
while true do
i = i + 1
local v = list[i]
if v == nil then
return t
end
insert(t, pos, v)
pos = pos + 1
end
end
end
adajacgjldccb0g5nl3tceeu9y5qxf5
Mòideal:table/extendIfNot
828
16756
86275
2026-07-22T06:32:12Z
Altronic
4137
Copy from English Wiktionary
86275
Scribunto
text/plain
local table_insert_if_not_module = "Module:table/insertIfNot"
local table_shallow_copy_module = "Module:table/shallowCopy"
local require = require
local type = type
local function insert_if_not(...)
insert_if_not = require(table_insert_if_not_module)
return insert_if_not(...)
end
local function shallow_copy(...)
shallow_copy = require(table_shallow_copy_module)
return shallow_copy(...)
end
local function extend_with_pos(list, new_items, options)
local i = 1
while true do
local item = new_items[i]
if item == nil then
return list
end
local success = insert_if_not(list, item, options)
if success then
options.pos = options.pos + 1
end
i = i + 1
end
end
local function extend_with_options_as_pos(list, new_items, pos)
local i = 1
while true do
local item = new_items[i]
if item == nil then
return list
end
local success = insert_if_not(list, item, pos)
if success then
pos = pos + 1
end
i = i + 1
end
end
local function extend_without_pos(list, new_items, options)
local i = 1
while true do
local item = new_items[i]
if item == nil then
return list
end
insert_if_not(list, item, options)
i = i + 1
end
end
--[==[
Extend an existing list by a new list, using {insertIfNot()} for each item.
`options` is an optional table of additional options to control the behavior of the operation. The following options are recognized:
* `pos`: As in {insertIfNot()}.
* `comparison`: As in {insertIfNot()}.
* `key`: As in {insertIfNot()}.
* `combine`: As in {insertIfNot()}.
Unlike {insertIfNot()}, this function does not return a boolean indicating whether any items were inserted.]==]
return function(list, new_items, options)
if options == nil then
return extend_without_pos(list, new_items)
elseif type(options) == "number" then
return extend_with_options_as_pos(list, new_items, options)
end
local pos = options.pos
if pos == nil then
return extend_without_pos(list, new_items, options)
end
return extend_with_pos(list, new_items, shallow_copy(options))
end
crdbb3ps6pmk0j0qpkle192t06mpn8v
Mòideal:table/flatten
828
16757
86276
2026-07-22T06:33:32Z
Altronic
4137
Copy from English Wiktionary
86276
Scribunto
text/plain
local error = error
local insert = table.insert
local type = type
local function flatten(t, list, n, current)
current[t] = true
local i = 0
while true do
i = i + 1
local v = t[i]
if v == nil then
current[t] = nil
return n
elseif type(v) ~= "table" then
n = n + 1
list[n] = v
elseif current[v] then
error("loop in input list")
else
n = flatten(v, list, n, current)
end
end
end
--[==[
Given a list, which may contain sublists, flatten it into a single list. For example, {flatten({ "a", { "b", "c" }, "d" })} ->
{ { "a", "b", "c", "d" }}]==]
return function(t)
local list = {}
flatten(t, list, 0, {})
return list
end
529c10ci266kmiv1iiqgwuyg3hgav1d
Mòideal:table/getMetamethod
828
16758
86277
2026-07-22T06:34:21Z
Altronic
4137
Copy from English Wiktionary
86277
Scribunto
text/plain
local table_get_unprotected_metatable = "Module:table/getUnprotectedMetatable"
local rawget = rawget
local select = select
local function get_unprotected_metatable(...)
get_unprotected_metatable = require(table_get_unprotected_metatable)
return get_unprotected_metatable(...)
end
local function get_metamethod(n, i, mt, mm, ...)
if mt then
mm = rawget(mt, mm)
else
mm = nil
end
if i == n then
return mm
end
return mm, get_metamethod(n, i + 1, mt, ...)
end
--[==[
Takes an input value and any number of metamethods, and attempts to retrieve the values at those keys in the value's metatable. Returns a boolean stating whether the value's metamethods are findable, followed by a return value for each metamethod.
A value's metamethods are findable if it does not have a protected metatable, so the first return value is {true} if the value either has a metatable which does not contain the {__metatable} metamethod, or it has no metatable at all. If the value does have a protected metatable, the first return value is {false}, and all remaining return values default to {nil}.]==]
return function(t, ...)
local mt, n = get_unprotected_metatable(t), select("#", ...)
-- get_unprotected_metatable() returns the metatable if it's unprotected,
-- false if it's protected, or nil if there is no metatable. It checks
-- whether a metatable is protected by trying pcall(setmetatable, t),
-- so it's always possible to determine accurately.
if n == 0 then
return mt ~= false
end
return mt ~= false, get_metamethod(n, 1, mt, ...)
end
tfl070cq0h5icostaevq3t6kcrhpcyw
Mòideal:table/listToSet
828
16759
86278
2026-07-22T06:35:20Z
Altronic
4137
Copy from English Wiktionary
86278
Scribunto
text/plain
local fun_is_callable_module = "Module:fun/isCallable"
local function is_callable(...)
is_callable = require(fun_is_callable_module)
return is_callable(...)
end
--[==[
Convert `list` (a table with a list of values) into a set (a table where those values are keys instead). This is a useful way to create a fast lookup table, since looking up a table key is much, much faster than iterating over the whole list to see if it contains a given value.
By default, each item is given the value true. If the optional parameter `value` is a function or functor, then it is called as an iterator, with the list index as the first argument, the item as the second (which will be used as the key), plus any additional arguments passed to {listToSet}; the returned value is used as the value for that list item. If `value` is anything else, then it is used as the fixed value for every item.]==]
return function(list, value, ...)
local set, i = {}, 1
if value == nil then
value = true
elseif is_callable(value) then
while true do
local item = list[i]
if item == nil then
return set
end
set[item] = value(i, item, ...)
i = i + 1
end
end
while true do
local item = list[i]
if item == nil then
return set
end
set[item] = value
i = i + 1
end
end
o2d2ojf8rsrqqaqy0ffn7n4y1a1r9tb
Mòideal:table/pack
828
16760
86279
2026-07-22T06:36:19Z
Altronic
4137
Copy from English Wiktionary
86279
Scribunto
text/plain
--[==[
An implementation of the {table.pack} function found in Lua 5.2+, which returns a table containing a list of the arguments passed. The returned table also contains the key {n}, which is an integer giving the number of arguments passed.
Note that the list in the returned table will contain gaps if any of the arguments passed were {nil}. This will also be reflected in the value of {n}, which always matches the number of arguments passed (e.g. {pack("foo")} returns the table { {"foo", n = 1} }, whereas {pack("foo", nil, nil)} returns { {"foo", n = 3} }).]==]
return table.pack or function(...)
-- On Lua 5.1, use the hidden `arg` variable with `...`, which is the same
-- as table.pack(...) on Lua 5.2+. Both are strictly equivalent to
-- {n = select("#", ...), ...}, but more performant.
return arg
end
ai5lyp0zhpjyp9n736jj7c60lm0cvm7
Mòideal:table/invert
828
16761
86281
2026-07-22T06:56:41Z
Altronic
4137
Copy from English Wiktionary
86281
Scribunto
text/plain
local pairs = pairs
--[==[
Invert a table. For example, {invert({ "a", "b", "c" })} -> { { a = 1, b = 2, c = 3 }}]==]
return function(t)
local map = {}
for k, v in pairs(t) do
map[v] = k
end
return map
end
584zgb0j9tdibi3oq5xt0rnaq3wjeoe
Mòideal:table/isArray
828
16762
86282
2026-07-22T07:03:30Z
Altronic
4137
Copy from English Wiktionary
86282
Scribunto
text/plain
local pairs = pairs
--[==[
Returns true if all keys in the table are consecutive integers starting from 1.]==]
return function(t)
-- pairs() is unordered, but can be assumed to return every key in `t`, so
-- if every integer key from 1 to n (the number of keys in `t`) is in use,
-- then all the keys in `t` form an integer range from 1 to n, making `t`
-- a contiguous array.
local i = 0
for _ in pairs(t) do
i = i + 1
if t[i] == nil then
return false
end
end
return true
end
g82iokgqr1uqfaagx0is49bas3cpq0c
Mòideal:Array
828
16763
86284
2026-07-22T07:04:46Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:Array]] gu [[Mòideal:array]]
86284
Scribunto
text/plain
return require [[Mòideal:array]]
369334e4r82y912czqjoqf7alslnf26
Mòideal:Array/doc
828
16764
86286
2026-07-22T07:04:46Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:Array/doc]] gu [[Mòideal:array/doc]]
86286
wikitext
text/x-wiki
#REDIRECT [[Mòideal:array/doc]]
mqh11871m49oan8mmbr1j1dhh0ct91w
Mòideal:title/newTitle
828
16765
86288
2026-07-22T07:26:26Z
Altronic
4137
Copy from English Wiktionary
86288
Scribunto
text/plain
local load_module = "Module:load"
local scribunto_module = "Module:Scribunto"
local title_get_current_namespace_module = "Module:title/getCurrentNamespace"
local title_get_current_title_module = "Module:title/getCurrentTitle"
local title_get_main_page_title_module = "Module:title/getMainPageTitle"
local byte = string.byte
local find = string.find
local match = string.match
local new_title = mw.title.new
local reverse = string.reverse
local sub = string.sub
local type = type
local function get_current_title(...)
get_current_title = require(title_get_current_title_module)
return get_current_title(...)
end
local function get_main_page_title(...)
get_main_page_title = require(title_get_main_page_title_module)
return get_main_page_title(...)
end
local function php_ltrim(...)
php_ltrim = require(scribunto_module).php_ltrim
return php_ltrim(...)
end
local function php_rtrim(...)
php_rtrim = require(scribunto_module).php_rtrim
return php_rtrim(...)
end
local current_pagename
local function get_current_pagename()
-- Call mw.title.getCurrentTitle() directly rather than the modified version
-- at [[Module:title/getCurrentTitle]], as it doesn't do anything extra when
-- no fragment argument is given, so there's no point in loading it.
current_pagename, get_current_pagename = mw.title.getCurrentTitle().prefixedText, nil
return current_pagename
end
local namespace_has_subpages
local function get_namespace_has_subpages()
namespace_has_subpages, get_namespace_has_subpages = require(load_module).load_data(title_get_current_namespace_module).hasSubpages, nil
return namespace_has_subpages
end
local function split_text(text)
-- Split off the fragment.
local hash, target, fragment = find(text, "#", nil, true)
if hash then
target, fragment = sub(text, 1, hash - 1), sub(text, hash)
else
target, fragment = text, ""
end
return php_rtrim(target), fragment
end
--[==[
A modified version of {mw.title.new}:
* It is no longer possible to generate title objects for the empty string by inputting a title starting with {"#"}. Such empty string titles do not represent a valid page, and are broken in various ways (e.g. attempting to access certain keys results in an error); see [[phab:T240678]].
* There are two additional boolean flags:
** If {allowOnlyFragment} is set, string inputs starting with {#} are handled analogously to links (e.g. the input {"#foo"} returns a title object for the current page with the addition of the fragment {"foo"}, analogous to the link [[#foo]]). As a special case, the input {"#"} returns the title for the main page (see TitleValue.php).
** If {allowRelative} is set, inputs representing relative titles will work (e.g. {"/foo"} and {"../"}, analogous to the relative links [[/foo]] and [[../]]).]==]
return function(text_or_id, defaultNamespace, allowOnlyFragment, allowRelative)
-- Process relative titles in the same way as normalizeSubpageLink() in
-- Linker.php.
if (
allowRelative and
type(text_or_id) == "string" and
-- Distinguish nil and false for the purposes of calling the getter.
(namespace_has_subpages == nil and get_namespace_has_subpages() or namespace_has_subpages)
) then
-- For both kinds of relative title, `text_or_id` has to be split into
-- `target` and `fragment` (if any). `target` has to be trimmed, but
-- as an optimisation, only do a left-trim on `text_or_id`, which is
-- sufficient for the initial checks for potential relative titles, as
-- this avoids unnecessary splitting/trimming in the vast majority of
-- cases where the title won't be relative. In the cases where it is,
-- `target` will then be right-trimmed once it has been split out of
-- `text_or_id`.
text_or_id = php_ltrim(text_or_id)
local init = byte(text_or_id)
-- If the target starts with "/", it's treated as a subpage of the
-- current page. Final slashes are trimmed, but this can't affect the
-- intervening slash (e.g. "[[///]]" refers to "[[{{PAGENAME}}/]]").
if init == 0x2F then -- /
local target, fragment = split_text(text_or_id)
text_or_id, defaultNamespace = (current_pagename or get_current_pagename()) .. (match(target, "^/.*[^/]") or "/") .. fragment, nil
-- If the title starts with "../", trim it and any further "../" that
-- follow, and go up that many subpage levels. Then, treat any
-- additional text as a subpage of that page. Final slashes are trimmed.
elseif init == 0x2E and sub(text_or_id, 2, 3) == "./" then -- ../
local n, target, fragment = 4, split_text(text_or_id)
while sub(target, n, n + 2) == "../" do
n = n + 3
end
-- Retain an initial "/".
target = sub(target, n - 1)
-- Trim the relevant number of subpages from the pagename.
local pagename, i = reverse(current_pagename or get_current_pagename()), 0
for _ = 1, (n - 1) / 3 do
i = find(pagename, "/", i + 1, true)
-- Fail if there aren't enough slashes.
if not i then
return nil
end
end
-- Add the subpage text; since the intervening "/" is retained in
-- `target`, it can be trimmed along with any other final slashes
-- (e.g. [[..///]] refers to "{{BASEPAGENAME}}".)
text_or_id, defaultNamespace = reverse(sub(pagename, i + 1)) .. (match(target, "^.*[^/]") or "") .. fragment, nil
end
end
local title = new_title(text_or_id, defaultNamespace)
if not title then
return nil
elseif title.prefixedText ~= "" then
return title
-- If `prefixedText` is the empty string, the input only has a fragment.
elseif not allowOnlyFragment then
return nil
end
-- Retrieve the fragment: if it's the empty string, return a title object
-- for the main page (which is where the link [[#]] resolves); otherwise,
-- return a current title object using [[Module:title/getCurrentTitle]],
-- which sets the fragment on the returned title to the string passed in.
-- (Note that inputs like "##foo" aren't interpreted as the main page with
-- the fragment "foo"; instead, it's a fragment for the section "#foo" on
-- the current page, since "#" is itself a valid fragment character.)
local fragment = title.fragment
return fragment == "" and get_main_page_title() or get_current_title(fragment)
end
aooqpfbxewgzf96rcljwg1e7vf0j43b
Mòideal:title/getCurrentNamespace
828
16766
86289
2026-07-22T07:28:03Z
Altronic
4137
Copy from English Wiktionary
86289
Scribunto
text/plain
--[==[
Returns the data table for the current namespace from {mw.site.namespaces}. This module may be loaded with {mw.loadData}.]==]
return mw.site.namespaces[mw.title.getCurrentTitle().namespace]
2udpe5a40x351nzks01by6n1mixwd3o
Mòideal:title/getMainPageTitle
828
16767
86290
2026-07-22T07:28:55Z
Altronic
4137
Copy from English Wiktionary
86290
Scribunto
text/plain
local title_new_title_module = "Module:title/newTitle"
local require = require
local function new_title(...)
new_title = require(title_new_title_module)
return new_title(...)
end
local main_page
local function get_main_page()
-- Ideally this would be done via some kind of :parse() method, but the
-- mw.message library got heavily nerfed by [[phab:T62758]], meaning it's
-- now only able to fetch the unparsed wikitext and can't expand it.
main_page, get_main_page = require("Module:frame").preprocess(mw.message.new("mainpage"):plain()), nil
return main_page
end
return function()
return new_title(main_page or get_main_page())
end
62r4ocuhoklot5t3gak5fhu2fq2qf7o
Mòideal:title/getCurrentTitle
828
16768
86291
2026-07-22T07:29:39Z
Altronic
4137
Copy from English Wiktionary
86291
Scribunto
text/plain
local get_current_title = mw.title.getCurrentTitle
--[==[
A modified version of {mw.title.getCurrentTitle}, which returns the title object for the current title. If the additional optional parameter {fragment} is given, the returned title object will have that value as the fragment, which is the part of the title that comes after {#}, referring to a specific section on the page (e.g. in {"foo#bar"}, the fragment is {"bar"}).
This is a convenience function, which is generally only useful when dealing with fragment-only links, as these resolve to other sections on the current page (e.g. [[#foo]] is a link to the section "foo" on the current page). If the {fragment} parameter is not needed, it is more efficient to simply call {mw.title.getCurrentTitle} directly.]==]
return function(fragment)
if fragment == nil then
return get_current_title()
end
local current_title = get_current_title()
current_title.fragment = fragment
return current_title
end
m6dy1k8djcq9btxxocyq8ozdon55frt
Mòideal:string/linesub
828
16769
86292
2026-07-22T07:31:47Z
Altronic
4137
Copy from English Wiktionary
86292
Scribunto
text/plain
local index_module = "Module:index"
local string_linelen_module = "Module:string/linelen"
local find = string.find
local require = require
local sub = string.sub
local function index_range(...)
index_range = require(index_module).range
return index_range(...)
end
local function linelen(...)
linelen = require(string_linelen_module)
return linelen(...)
end
return function(str, i, j)
i, j = index_range(str, i, j, linelen)
if j and j < i then
return ""
end
local first, pos1, pos2, newline, pattern, plain = 1
if not find(str, "\r", nil, true) then
pattern, plain = "\n", true
elseif not find(str, "\n", nil, true) then
pattern, plain = "\r", true
else
pattern = "([\n\r]\n?)"
end
for _ = 1, i - 1 do
pos1, pos2, newline = find(str, pattern, first, plain)
if pos1 == nil then
return ""
end
first = newline == "\n\n" and pos2 or pos2 + 1
end
if j == nil then
return sub(str, first)
end
local last = first
for _ = i, j do
pos1, pos2, newline = find(str, pattern, last, plain)
if pos1 == nil then
return sub(str, first)
end
last = newline == "\n\n" and pos2 or pos2 + 1
end
last = pos1 - 1
return sub(str, first, last)
end
qzydmib4uoy2d53y6s4vvt1a6pynnwv
Mòideal:string/linelen
828
16770
86293
2026-07-22T07:32:18Z
Altronic
4137
Copy from English Wiktionary
86293
Scribunto
text/plain
local gmatch = string.gmatch
--[==[
Counts the number of lines in the input string, treating {"\n"}, {"\r"} and {"\r\n"} as new lines.]==]
return function(str)
local n = 1
for newline in gmatch(str, "([\n\r]\n?)[^\n\r]*") do
n = n + (newline == "\n\n" and 2 or 1)
end
return n
end
jpgjm9kkpx83bv03ujdphtzhtxxjsg2
Mòideal:table/length
828
16771
86294
2026-07-22T08:02:15Z
Altronic
4137
Copy from English Wiktionary
86294
Scribunto
text/plain
local ipairs_default_iter = ipairs{}
return function(t, raw)
local n = 0
if raw then
for i in ipairs_default_iter, t, 0 do
n = i
end
return n
end
repeat
n = n + 1
until t[n] == nil
return n - 1
end
tryk70hxgidgdgqrb7utnj2sub9w656
Mòideal:languages/data/3/n
828
16772
86295
2026-07-22T08:15:08Z
Altronic
4137
Copy from English Wiktionary
86295
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["naa"] = {
"Namla",
3508760,
"paa-nto",
"Latn",
}
m["nab"] = {
"Nambikwara",
2068190,
"sai-nmk",
"Latn",
}
m["nac"] = {
"Narak",
6965295,
"ngf-jim",
"Latn",
}
m["nae"] = {
"Naka'ela",
6960073,
"poz",
"Latn",
}
m["naf"] = {
"Nabak",
11732491,
"ngf-san",
"Latn",
}
m["nag"] = {
"Naga Pidgin",
3503454,
"crp",
"Latn",
ancestors = "as",
}
m["nah"] = {
"Nahuatl",
13300,
"azc-nah",
"Latn",
}
m["naj"] = {
"Nalu",
36026,
"alv-nal",
"Latn",
}
m["nak"] = {
"Nakanai",
6528669,
"poz-ocw",
"Latn",
}
m["nal"] = {
"Nalik",
3335387,
"poz-ocw",
"Latn",
}
m["nam"] = {
"Ngan'gityemerri",
3298041,
"aus-dal",
"Latn",
}
-- Being converted into the family "Southern Min" ("zhx-nan", which will take the code "nan" once the language can be removed). Retain the name "Min Nan" here to avoid having to move things that are scheduled for deletion anyway.
m["nan"] = {
"Min Nan",
36495,
"zhx-com",
"Hants, Latn, Bopo, Kana",
wikimedia_codes = "zh-min-nan",
generate_forms = "zh-generateforms",
sort_key = {
Hani = "Hani-sortkey",
Kana = "Kana-sortkey"
},
}
m["nao"] = {
"Naaba",
11883865,
"sit-tib",
ancestors = "xct",
}
m["nap"] = {
"Neapolitan",
33845,
"roa-itr",
ancestors = "nap-old",
"Latn",
}
m["naq"] = {
"Khoekhoe",
13301,
"khi-khk",
"Latn",
}
m["nar"] = {
"Iguta",
5621686,
"nic-jer",
"Latn",
}
m["nas"] = {
"Nasioi",
56772,
"paa-sbo",
"Latn",
}
m["nat"] = {
"Hungworo",
3914395,
"nic-kmk",
"Latn",
}
m["naw"] = {
"Nawuri",
35906,
"alv-gng",
"Latn",
}
m["nax"] = {
"Nakwi",
3504178,
"paa-lma",
"Latn",
}
m["nay"] = {
"Ngarrindjeri",
7022091,
"aus-pam",
"Latn",
}
m["naz"] = {
"Coatepec Nahuatl",
5138605,
"azc-nah",
"Latn",
}
m["nba"] = {
"Nyemba",
3346655,
"bnt-clu",
"Latn",
ancestors = "lch",
}
m["nbb"] = {
"Ndoe",
36134,
"nic-eko",
"Latn",
}
m["nbc"] = {
"Chang",
5071694,
"sit-kch",
"Latn",
}
m["nbd"] = {
"Ngbinda",
11132859,
"bnt-boa",
"Latn",
}
m["nbe"] = {
"Konyak Naga",
6430448,
"sit-kch",
"Latn",
}
m["nbg"] = {
"Nagarchal",
13299,
"dra-gon",
}
m["nbh"] = {
"Ngamo",
3438705,
"cdc-wst",
"Latn",
}
m["nbi"] = {
"Mao Naga",
12952905,
"tbq-anp",
"Latn",
}
m["nbj"] = {
"Ngarinman",
10600380,
nil,
"Latn",
}
m["nbk"] = {
"Nake",
11732496,
"ngf-han",
"Latn",
}
m["nbm"] = {
"Ngbaka Ma'bo",
3915331,
"nic-nkm",
"Latn",
}
m["nbn"] = {
"Kuri",
3200540,
"poz",
"Latn",
}
m["nbo"] = {
"Nkukoli",
3914482,
"nic-uce",
"Latn",
}
m["nbp"] = {
"Nnam",
36138,
"nic-eko",
"Latn",
}
m["nbq"] = {
"Nggem",
12952956,
"ngf-dan",
"Latn",
}
m["nbr"] = {
"Numana",
5529310,
"nic-nin",
"Latn",
}
m["nbs"] = {
"Namibian Sign Language",
6961792,
"sgn",
"Latn", -- when documented
}
m["nbt"] = {
"Na",
12952895,
"sit-tan",
"Deva, Latn",
}
m["nbu"] = {
"Rongmei Naga",
12952912,
"sit-zem",
"Latn",
}
m["nbv"] = {
"Ngamambo",
11129694,
"nic-mom",
"Latn",
}
m["nbw"] = {
"Southern Ngbandi",
17522635,
"nic-ngd",
"Latn",
}
m["nby"] = {
"Ningera",
11732524,
"paa-bew",
"Latn",
}
m["nca"] = {
"Iyo",
6101336,
"ngf-gmo",
"Latn",
}
m["ncb"] = {
"Central Nicobarese",
3335553,
"aav-nic",
"Deva, Latn",
}
m["ncc"] = {
"Ponam",
3396122,
"poz-aay",
"Latn",
}
m["ncd"] = {
"Nachering",
6957144,
"sit-kic",
"Deva",
}
m["nce"] = {
"Yale",
2992915,
"qfa-dis", -- Papuan; isolate in Glottolog and Palmer (2018); under proposed Senu River family in Usher (2020)
"Latn",
}
m["ncf"] = {
"Notsi",
3344784,
"poz-ocw",
"Latn",
}
m["ncg"] = {
"Nisga'a",
3342138,
"nai-tsi",
"Latn",
}
m["nch"] = {
"Central Huasteca Nahuatl",
2194290,
"azc-hua",
"Latn",
}
m["nci"] = {
"Classical Nahuatl",
559242,
"azc-nah",
"Latn",
strip_diacritics = {remove_diacritics = c.macron},
}
m["ncj"] = {
"Northern Puebla Nahuatl",
15705671,
"azc-nah",
"Latn",
}
m["nck"] = {
"Nakara",
6960662,
"aus-arn",
"Latn",
}
m["ncl"] = {
"Michoacán Nahuatl",
2896217,
"azc-nah",
"Latn",
}
m["ncm"] = {
"Nambo",
42173731,
"paa-nam",
"Latn",
}
m["ncn"] = {
"Nauna",
3337158,
"poz-aay",
"Latn",
}
m["nco"] = {
"Sibe",
56806,
"paa-sbo",
"Latn",
}
m["ncr"] = {
"Ncane",
11297920,
"nic-bbe",
"Latn",
ancestors = "nhu",
}
m["ncs"] = {
"Nicaraguan Sign Language",
33765,
"sgn",
"Sgnw",
}
m["nct"] = {
"Chothe Naga",
5105385,
"tbq-kuk",
"Beng, Latn",
}
m["ncu"] = {
"Chumburung",
35198,
"alv-gng",
"Latn",
}
m["ncx"] = {
"Central Puebla Nahuatl",
5061727,
"azc-nah",
"Latn",
}
m["ncz"] = {
"Natchez",
3111838,
nil,
"Latn",
}
m["nda"] = {
"Ndasa",
35904,
"bnt-kel",
"Latn",
}
m["ndb"] = {
"Kenswei Nsei",
7067553,
"nic-rnn",
"Latn",
}
m["ndc"] = {
"Ndau",
13311,
"bnt-sho",
"Latn",
}
m["ndd"] = {
"Nde-Nsele-Nta",
36131,
"nic-eko",
"Latn",
}
m["ndf"] = {
"Nadruvian",
6957967,
nil,
"Latn",
}
m["ndg"] = {
"Ndengereko",
6983726,
"bnt-mbi",
"Latn",
}
m["ndh"] = {
"Ndali",
6983678,
"bnt-run",
"Latn",
}
m["ndi"] = {
"Chamba Leko",
36381,
"alv-lek",
"Latn",
}
m["ndj"] = {
"Ndamba",
6983684,
"bnt-kil",
"Latn",
}
m["ndk"] = {
"Ndaka",
11164947,
"bnt-nya",
"Latn",
}
m["ndl"] = {
"Ndolo",
6983788,
"bnt-zbi",
"Latn",
ancestors = "lse",
}
m["ndm"] = {
"Ndam",
56283,
"cdc-est",
"Latn",
}
m["ndn"] = {
"Ngundi",
35916,
"bnt-ngn",
"Latn",
}
m["ndp"] = {
"Ndo",
6983774,
"csu-mle",
"Latn",
}
m["ndq"] = {
"Ndombe",
6983792,
"bnt-swb",
"Latn",
}
m["ndr"] = {
"Ndoola",
35837,
"nic-mmb",
"Latn",
}
m["nds"] = {
"Low German",
25433,
"gmw-lgm",
"Latn",
ancestors = "gml",
}
m["ndt"] = {
"Ndunga",
6983857,
"nic-mbc",
"Latn",
}
m["ndu"] = {
"Dugun",
11015189,
"alv-dur",
"Latn",
}
m["ndv"] = {
"Ndut",
36028,
"alv-cng",
"Latn",
}
m["ndw"] = {
"Ndobo",
11008568,
"bnt-ngn",
"Latn",
}
m["ndx"] = {
"Nduga",
6983833,
"ngf-ngn",
"Latn",
}
m["ndy"] = {
"Lutos",
6705910,
"csu-val",
"Latn",
}
m["ndz"] = {
"Ndogo",
35983,
"nic-ser",
"Latn",
}
m["nea"] = {
"Eastern Ngad'a",
12473454,
"poz-cet",
"Latn",
}
m["neb"] = {
"Toura",
7853636,
"dmn-mda",
"Latn",
}
m["nec"] = {
"Nedebang",
4925378,
"paa-alp",
"Latn",
}
m["ned"] = {
"Nde-Gbite",
11010279,
"nic-grf",
}
m["nee"] = {
"Kumak",
3347266,
"poz-cln",
"Latn",
}
m["nef"] = {
"Nefamese",
6987002,
"crp",
}
m["neg"] = {
"Negidal",
33676,
"tuw-ewe",
"Cyrl",
}
m["neh"] = {
"Nyenkha",
3695185,
"sit-ebo",
"Tibt, Latn",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["nej"] = {
"Neko",
6989840,
"ngf-gmo",
"Latn",
}
m["nek"] = {
"Neku",
14916900,
"poz-cln",
}
m["nem"] = {
"Nemi",
3338008,
"poz-cln",
"Latn",
}
m["nen"] = {
"Nengone",
3338052,
"poz-cln",
"Latn",
}
m["neo"] = {
"Ná-Meo",
15977293,
"hmn",
}
m["neq"] = {
"North Central Mixe",
25559729,
nil,
"Latn",
}
m["ner"] = {
"Yahadian",
8046778,
nil,
"Latn",
}
m["nes"] = {
"Bhoti Kinnauri",
21179921,
"sit-las",
}
m["net"] = {
"Nete",
6998869,
"ngf-oen",
"Latn",
}
m["neu"] = {
"Neo",
606917,
"art",
"Latn",
type = "appendix-constructed",
}
m["nev"] = {
"Nyaheun",
7070801,
"mkh-ban",
}
m["new"] = {
"Newar",
33979,
"sit-new",
"Deva, Newa, Ranj",
ancestors = "nwx",
translit = {
Deva = "new-translit",
Newa = "new-Newa-translit",
},
}
m["nex"] = {
"Neme",
12952941,
"paa-nam",
"Latn",
}
m["ney"] = {
"Neyo",
36410,
"kro",
"Latn",
}
m["nez"] = {
"Nez Perce",
3339226,
"nai-shp",
"Latn",
}
m["nfa"] = {
"Dhao",
2053828,
"poz",
"Latn",
}
m["nfd"] = {
"Ahwai",
3913957,
"nic-plt",
"Latn",
}
m["nfl"] = {
"Äiwoo",
56742,
"poz-tem",
"Latn",
}
m["nfr"] = {
"Nafaanra",
13297,
"alv-snf",
"Latn",
}
m["nfu"] = {
"Mfumte",
6826794,
"nic-nka",
"Latn",
}
m["nga"] = {
"Ngbaka",
36022,
"gba-eas",
"Latn",
}
m["ngb"] = {
"Northern Ngbandi",
17522631,
"nic-ngd",
"Latn",
}
m["ngc"] = {
"Ngombe (Congo)",
3123524,
"bnt-bun",
"Latn",
}
m["ngd"] = {
"Ngando (Central African Republic)",
35910,
"bnt-ngn",
}
m["nge"] = {
"Ngemba",
6750551,
"nic-nge",
"Latn",
}
m["ngg"] = { -- compare 'aiy'
"Ngbaka Manza",
11033316,
"gba-eas",
"Latn",
}
m["ngh"] = {
"Nǀuu",
2618974,
"khi-tuu",
"Latn",
}
m["ngi"] = {
"Ngizim",
3914924,
"cdc-wst",
"Latn",
}
m["ngj"] = {
"Ngie",
36361,
"nic-mom",
"Latn",
}
m["ngk"] = {
"Ngalkbun",
3913790,
"aus-gun",
"Latn",
}
m["ngl"] = {
"Lomwe",
35824,
"bnt-mak",
"Latn",
}
m["ngm"] = {
"Ngatik Men's Creole",
36400,
"crp",
ancestors = "en, pon",
}
m["ngn"] = {
"Ngwo",
36051,
"nic-mom",
"Latn",
}
m["ngo"] = {
"Ngoni",
7022547,
"bnt-ngu",
"Latn",
}
m["ngp"] = {
"Ngulu",
7193332,
"bnt-seu",
"Latn",
}
m["ngq"] = {
"Ngoreme",
7022573,
"bnt-lok",
"Latn",
}
m["ngr"] = {
"Nagu",
3063524,
"poz-tem",
"Latn",
}
m["ngs"] = {
"Gvoko",
3441188,
"cdc-cbm",
"Latn",
}
m["ngt"] = {
"Ngeq",
25559548,
"mkh-kat",
}
m["ngu"] = {
"Guerrero Nahuatl",
5614980,
"azc-nah",
"Latn",
}
m["ngv"] = {
"Nagumi",
35842,
"nic-jrn",
}
m["ngw"] = {
"Ngwaba",
3440480,
"cdc-cbm",
"Latn",
}
m["ngx"] = {
"Nggwahyi",
56265,
"cdc-cbm",
"Latn",
}
m["ngy"] = {
"Tibea",
36598,
"bnt-baf",
"Latn",
}
m["ngz"] = {
"Ngungwel",
35920,
"bnt-tkc",
"Latn",
}
m["nha"] = {
"Nhanda",
3339380,
"aus-psw",
"Latn",
}
m["nhb"] = {
"Beng",
3913311,
"dmn-nbe",
"Latn",
}
m["nhc"] = {
"Tabasco Nahuatl",
6047326,
"azc-nah",
"Latn",
}
m["nhd"] = {
"Chiripá",
2873230,
"gn",
"Latn",
}
m["nhe"] = {
"Eastern Huasteca Nahuatl",
4358289,
"azc-hua",
"Latn",
}
m["nhf"] = {
"Nhuwala",
10600396,
"aus-nga",
"Latn",
}
m["nhg"] = {
"Tetelcingo Nahuatl",
3450252,
"azc-nah",
"Latn",
}
m["nhh"] = {
"Nahari",
6583560,
"inc-hal",
}
m["nhi"] = {
"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl",
12953764,
"azc-nah",
"Latn",
}
m["nhk"] = {
"Cosoleacaque Nahuatl",
12953757,
"azc-nah",
"Latn",
}
m["nhm"] = {
"Morelos Nahuatl",
4800819,
"azc-nah",
"Latn",
}
m["nhn"] = {
"Central Nahuatl",
6047309,
"azc-nah",
"Latn",
}
m["nho"] = {
"Takuu",
3409818,
"poz-pnp",
"Latn",
}
m["nhp"] = {
"Pajapan Nahuatl",
12953760,
"azc-nah",
"Latn",
}
m["nhq"] = {
"Huaxcaleca Nahuatl",
12953758,
"azc-nah",
"Latn",
}
m["nhr"] = {
"Naro",
2164778,
"khi-kal",
"Latn",
}
m["nht"] = {
"Ometepec Nahuatl",
7090132,
"azc-nah",
"Latn",
}
m["nhu"] = {
"Noone",
36072,
"nic-bbe",
"Latn",
}
m["nhv"] = {
"Temascaltepec Nahuatl",
2379405,
"azc-nah",
"Latn",
}
m["nhw"] = {
"Western Huasteca Nahuatl",
2678840,
"azc-hua",
"Latn",
}
m["nhx"] = {
"Mecayapan Nahuatl",
12953756,
"azc-nah",
"Latn",
}
m["nhy"] = {
"Northern Oaxaca Nahuatl",
12953763,
"azc-nah",
"Latn",
}
m["nhz"] = {
"Santa María La Alta Nahuatl",
15705753,
"azc-nah",
"Latn",
}
m["nia"] = {
"Nias",
2407831,
"poz-nws",
"Latn",
}
m["nib"] = {
"Nakame",
11732495,
"ngf-boa",
"Latn",
}
m["nid"] = {
"Ngandi",
7021977,
"aus-arn",
"Latn",
}
m["nie"] = {
"Niellim",
33662,
"alv-bua",
}
m["nif"] = {
"Nek",
6989781,
"ngf-boa",
"Latn",
}
m["nig"] = {
"Ngalakan",
3913796,
"aus-gun",
"Latn",
}
m["nih"] = {
"Nyiha",
11128374,
"bnt-mby",
"Latn",
}
m["nii"] = {
"Nii",
35237,
"ngf-wah",
"Latn",
}
m["nij"] = {
"Ngaju",
2992872,
"poz-brw",
"Latn",
}
m["nik"] = {
"Southern Nicobarese",
7570194,
"aav-nic",
}
m["nil"] = {
"Nila",
7036821,
"poz-cet",
"Latn",
}
m["nim"] = {
"Nilamba",
4121200,
"bnt-tkm",
"Latn",
}
m["nin"] = {
"Ninzo",
3914021,
"nic-nin",
"Latn",
}
m["nio"] = {
"Nganasan",
36743,
"syd",
"Cyrl",
translit = "nio-translit",
}
m["niq"] = {
"Nandi",
6956591,
"sdv-nma",
"Latn",
}
m["nir"] = {
"Nimboran",
301116,
"paa-nim",
"Latn",
}
m["nis"] = {
"Nimi",
11732523,
"ngf-era",
"Latn",
}
m["nit"] = {
"Southeastern Kolami",
56767,
"dra-knk",
"Deva, Telu",
translit = {
Telu = "te-translit"
},
}
m["niu"] = {
"Niuean",
33790,
"poz-ton",
"Latn",
}
m["niv"] = {
"Nivkh",
36464,
"qfa-iso",
"Cyrl, Latn",
translit = "niv-translit",
strip_diacritics = {
from = {"['’]"},
to = {"ʼ"}
},
sort_key = "niv-sortkey",
}
m["niw"] = {
"Nimo",
3504126,
"paa-lma",
"Latn",
}
m["nix"] = {
"Hema",
5710904,
"bnt-nyg",
"Latn",
}
m["niy"] = {
"Ngiti",
7022396,
"csu-lnd",
"Latn",
}
m["niz"] = {
"Ningil",
11732527,
"paa-wap",
"Latn",
}
m["nja"] = {
"Nzanyi",
3441299,
"cdc-cbm",
"Latn",
}
m["njb"] = {
"Nocte",
7046410,
"sit-tno",
}
m["njh"] = {
"Lotha Naga",
33590,
"sit-aao",
}
m["nji"] = {
"Gudanji",
3915692,
"aus-mir",
"Latn",
}
m["njj"] = {
"Njen",
36112,
"nic-mom",
"Latn",
}
m["njl"] = {
"Njalgulgule",
7071229,
"sdv-daj",
}
m["njm"] = {
"Angami",
56761,
"tbq-anp",
"Latn",
}
m["njn"] = {
"Liangmai Naga",
14194500,
"sit-zem",
"Latn",
}
m["njr"] = {
"Njerep",
35844,
"nic-mmb",
"Latn",
}
m["njs"] = {
"Nisa",
13593518,
"paa-egb",
"Latn",
}
m["njt"] = {
"Ndyuka-Trio Pidgin",
13591205,
"crp",
ancestors = "djk, tri",
}
m["nju"] = {
"Ngadjunmaya",
7021846,
"aus-pam",
"Latn",
}
m["njx"] = {
"Kunyi",
3196559,
"bnt-kng",
"Latn",
}
m["njy"] = {
"Njyem",
35898,
"bnt-ndb",
"Latn",
}
m["njz"] = {
"Nyishi",
56870,
"sit-tan",
"Latn",
}
m["nka"] = {
"Nkoya",
7042633,
"bnt-lbn",
"Latn",
}
m["nkb"] = {
"Khoibu Naga",
21481876,
"sit-mar",
}
m["nkc"] = {
"Nkongho",
35863,
"bnt-saw",
"Latn",
}
m["nkd"] = {
"Koireng",
6426342,
"sit-zem",
}
m["nke"] = {
"Duke",
3041075,
"poz-ocw",
"Latn",
}
m["nkf"] = {
"Inpui Naga",
21481817,
"sit-zem",
}
m["nkg"] = {
"Nekgini",
11732509,
"ngf-gmo",
"Latn",
}
m["nkh"] = {
"Khezha Naga",
6401519,
"tbq-anp",
}
m["nki"] = {
"Thangal Naga",
56374,
"sit-zem",
}
m["nkj"] = {
"Nakai",
14916897,
"ngf-tna",
"Latn",
}
m["nkk"] = {
"Nokuku",
7048122,
"poz-vnn",
"Latn",
}
m["nkm"] = {
"Namat",
15634505,
"paa-nam",
"Latn",
}
m["nkn"] = {
"Nkangala",
10962292,
"bnt-clu",
"Latn",
ancestors = "mck",
}
m["nko"] = {
"Nkonya",
35867,
"alv-gng",
"Latn",
}
m["nkp"] = {
"Niuatoputapu",
3399095,
"poz-pnp",
"Latn",
}
m["nkq"] = {
"Nkami",
7042522,
"alv-gng",
"Latn",
}
m["nkr"] = {
"Nukuoro",
2635961,
"poz-pnp",
"Latn",
}
m["nks"] = {
"North Asmat",
11732049,
"ngf-asm",
"Latn",
}
m["nkt"] = {
"Nyika",
16917497,
"bnt-mwi",
"Latn",
}
m["nku"] = {
"Bouna Kulango",
20668241,
"alv-kul",
}
-- nkv is treated as nkt, see [[WT:LT]]
m["nkw"] = {
"Nkutu",
7193313,
"bnt-tet",
"Latn",
}
m["nkx"] = {
"Nkoroo",
36000,
"ijo",
}
m["nkz"] = {
"Nkari",
11130307,
"nic-ief",
ancestors = "ibr",
}
m["nla"] = {
"Ngombale",
36292,
"bai",
"Latn",
}
m["nlc"] = {
"Nalca",
6960839,
"ngf-mek",
"Latn",
}
m["nle"] = {
"East Nyala",
25559347,
"bnt-msl",
"Latn",
ancestors = "luy",
}
m["nlg"] = {
"Gela",
3063531,
"poz-sls",
"Latn",
}
m["nli"] = {
"Grangali",
3444203,
"inc-kun",
"Arab",
}
m["nlj"] = {
"Nyali",
7070830,
"bnt-nya",
"Latn",
}
m["nlk"] = {
"Ninia Yali",
12953310,
"ngf-yal",
"Latn",
}
m["nll"] = {
"Nihali",
33904,
"qfa-iso",
"Deva, Latn",
}
m["nlm"] = {
"Mankiyali",
47522426,
"inc-koh",
}
m["nlo"] = {
"Ngul",
35894,
"bnt-bdz",
"Latn",
}
m["nlq"] = {
"Lao Naga",
63283609,
"sit-tno",
}
m["nlu"] = {
"Nchumbulu",
36143,
"alv-gng",
"Latn",
}
m["nlv"] = {
"Orizaba Nahuatl",
3086050,
"azc-nah",
"Latn",
}
m["nlw"] = {
"Walangama",
7961277,
}
m["nlx"] = {
"Nahali",
33361,
"inc-bhi",
}
m["nly"] = {
"Nyamal",
7070837,
"aus-nga",
"Latn",
}
m["nlz"] = {
"Nalögo",
20527138,
"poz-tem",
"Latn",
}
m["nma"] = {
"Maram Naga",
56378,
"sit-zem",
}
m["nmb"] = {
"Big Nambas",
2902304,
"poz-vnc",
"Latn",
}
m["nmc"] = {
"Ngam",
3915446,
"csu-sar",
"Latn",
}
m["nmd"] = {
"Ndumu",
35901,
"bnt-mbt",
"Latn",
}
m["nme"] = {
"Mzieme Naga",
6949473,
"sit-zem",
}
m["nmf"] = {
"Tangkhul Naga",
7682992,
"sit-tng",
"Latn, Mtei",
}
m["nmg"] = {
"Kwasio",
34098,
"bnt-mnj",
"Latn",
}
m["nmh"] = {
"Monsang Naga",
6902496,
}
m["nmi"] = {
"Nyam",
3438738,
"cdc-wst",
"Latn",
}
m["nmj"] = {
"Ngombe (Central African Republic)",
3913949,
"gba-sou",
}
m["nmk"] = {
"Namakura",
3335410,
"poz-vnc",
"Latn",
}
m["nml"] = {
"Ndemli",
36089,
"nic-grf",
"Latn",
}
m["nmm"] = {
"Manangba",
6746900,
"sit-tam",
"Tibt, Deva",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["nmn"] = {
"ǃXóõ",
13229,
"khi-tuu",
"Latn",
}
m["nmo"] = {
"Moyon Naga",
6927748,
"tbq-kuk",
}
m["nmp"] = {
"Nimanbur",
16891606,
}
m["nmq"] = {
"Nambya",
11008869,
"bnt-sho",
"Latn",
}
m["nmr"] = {
"Nimbari",
36069,
"alv-lni",
}
m["nms"] = {
"Letemboi",
3236886,
"poz-vnc",
"Latn",
}
m["nmt"] = {
"Namonuito",
12908815,
"poz-mic",
}
m["nmu"] = {
"Northeast Maidu",
3278074,
"nai-mdu",
"Latn",
}
m["nmv"] = {
"Ngamini",
7021944,
"aus-kar",
"Latn",
}
m["nmw"] = {
"Nimoa",
7037729,
"poz-ocw",
"Latn",
}
m["nmx"] = {
"Nama",
20812287,
"paa-nam",
"Latn",
}
m["nmy"] = {
"Namuyi",
56844,
"sit-nax",
"Latn",
}
m["nmz"] = {
"Nawdm",
36085,
"nic-yon",
"Latn",
}
m["nna"] = {
"Nyangumarta",
33653,
}
m["nnb"] = {
"Nande",
3196953,
"bnt-glb",
"Latn",
}
m["nnc"] = {
"Nancere",
3140491,
"cdc-est",
"Latn",
}
m["nnd"] = {
"West Ambae",
2841479,
"poz-vnn",
"Latn",
}
m["nne"] = {
"Ngandyera",
10961003,
"bnt-ova",
"Latn",
}
m["nnf"] = {
"Ngaing",
11732510,
"ngf-gmo",
"Latn",
}
m["nng"] = {
"Maring Naga",
12952908,
"sit-mar",
}
m["nnh"] = {
"Ngiemboon",
36286,
"bai",
"Latn",
}
m["nni"] = {
"North Nuaulu",
12952968,
"poz-cma",
}
m["nnj"] = {
"Nyangatom",
4662604,
"sdv-ttu",
}
m["nnk"] = {
"Nankina",
11732502,
"ngf-yup",
"Latn",
}
m["nnl"] = {
"Northern Rengma Naga",
7067615,
"tbq-anp",
}
m["nnm"] = {
"Namia",
56363,
"paa-sep",
"Latn",
}
m["nnn"] = {
"Ngete",
56625,
"cdc-mas",
"Latn",
}
m["nnp"] = {
"Wancho",
7967085,
"sit-kch",
"Wcho, Deva, Latn",
}
m["nnq"] = {
"Ngindo",
7022366,
"bnt-mbi",
"Latn",
}
m["nnr"] = {
"Narungga",
13591127,
"aus-pam",
"Latn",
}
m["nnt"] = {
"Nanticoke",
3915517,
"alg-eas",
"Latn",
}
m["nnu"] = {
"Dwang",
35258,
"alv-gng",
"Latn",
}
m["nnv"] = {
"Nukunu",
10604066,
nil,
"Latn",
}
m["nnw"] = {
"Southern Nuni",
11152248,
"nic-gnn",
"Latn",
}
m["nnx"] = {
"Ngong",
12952915,
}
m["nny"] = { -- contrast aus-ynk
"Nyangga",
10604331,
"aus-tnk",
"Latn",
}
m["nnz"] = {
"Nda'nda'",
36016,
"bai",
"Latn",
}
m["noa"] = {
"Woun Meu",
3111873,
"sai-chc",
"Latn",
}
m["noc"] = {
"Nuk",
11732534,
"ngf-boa",
"Latn",
}
m["nod"] = {
"Northern Thai",
565110,
"tai-swe",
"Lana, Thai",
strip_diacritics = {remove_diacritics = c.ZWNJ},
sort_key = {
Lana = "Lana-sortkey",
Thai = "Thai-sortkey"
},
}
m["noe"] = {
"Nimadi",
3502294,
"raj",
"Deva",
translit = "hi-translit",
}
m["nof"] = {
"Nomane",
11732531,
"ngf-sim",
"Latn",
}
m["nog"] = {
"Nogai",
33871,
"trk-kno",
"Cyrl, Arab, Latn",
translit = "nog-translit",
override_translit = true,
}
m["noh"] = {
"Nomu",
11732532,
"ngf-dal",
"Latn",
}
m["noi"] = {
"Noiri",
12953774,
"inc-bhi",
}
m["noj"] = {
"Nonuya",
5372139,
"sai-wit",
"Latn",
}
m["nok"] = {
"Nooksack",
3343396,
"sal",
}
m["nol"] = {
"Nomlaki",
3343229,
"nai-wtq",
"Latn",
}
m["nom"] = {
"Nocamán",
7046289,
"sai-pan",
"Latn",
}
m["non"] = {
"Old Norse",
35505,
"gmq",
"Latn, Runr",
translit = {Runr = "Runr-translit"},
}
m["nop"] = {
"Numanggang",
7069052,
"ngf-boa",
"Latn",
}
m["noq"] = {
"Ngongo",
11057478,
"bnt-yak",
"Latn",
}
m["nos"] = {
"Eastern Nisu",
25559419,
"tbq-nis",
}
m["not"] = {
"Nomatsiguenga",
3342992,
"awd",
"Latn",
}
m["nou"] = {
"Ewage-Notu",
5418860,
"ngf-bin",
"Latn",
}
m["nov"] = {
"Novial",
36738,
"art",
"Latn",
type = "appendix-constructed"
}
m["now"] = {
"Nyambo",
4967930,
"bnt-haj",
"Latn",
}
m["noy"] = {
"Noy",
36321,
"alv-bua",
}
m["noz"] = {
"Nayi",
3183349,
"omv-diz",
}
m["npa"] = {
"Nar Phu",
4926353,
"sit-tam",
}
m["npb"] = {
"Nupbikha",
3695201,
"sit-ebo",
}
m["npg"] = {
"Ponyo",
7228475,
"sit-kch",
}
m["nph"] = {
"Phom",
7187109,
"sit-kch",
}
m["npl"] = {
"Southeastern Puebla Nahuatl",
4632950,
"azc-nah",
"Latn",
}
m["npn"] = {
"Mondropolon",
3320594,
"poz-aay",
}
m["npo"] = {
"Pochuri Naga",
7206342,
"tbq-anp",
}
m["nps"] = {
"Nipsan",
11732528,
"ngf-mek",
"Latn",
}
m["npu"] = {
"Puimei Naga",
7259044,
"sit-zem",
}
m["npx"] = {
"Noipä",
63283617,
"poz-tem",
"Latn",
}
m["npy"] = {
"Napu",
12953768,
}
m["nqg"] = {
"Ede Nago",
12952408,
"alv-ede",
"Latn",
}
m["nqk"] = {
"Kura Ede Nago",
12952409,
"alv-ede",
}
m["nql"] = {
"Ngendelengo",
63283693,
"bnt-swb",
"Latn",
}
m["nqm"] = {
"Ndom",
6983791,
"paa-kol",
"Latn",
}
m["nqn"] = {
"Nen",
20816352,
"paa-nam",
"Latn",
}
m["nqo"] = {
"N'Ko",
18546266,
"dmn-man",
"Nkoo",
}
m["nqq"] = {
"Kyan-Karyaw Naga",
63283784,
"sit-tno",
}
m["nqy"] = {
"Akyaung Ari",
4702035,
"sit-tng",
}
m["nra"] = {
"Ngom",
36087,
"bnt-kel",
"Latn",
}
m["nrb"] = {
"Nara",
36179,
"sdv-nes",
}
m["nrc"] = {
"Noric",
37023,
"cel",
"Ital",
-- Ital translit in [[Module:scripts/data]]
}
m["nre"] = {
"Southern Rengma Naga",
7313205,
"tbq-anp",
}
m["nrf"] = {
"Norman",
33850,
"roa-oil",
"Latn",
wikimedia_codes = "nrm",
ancestors = "fro-nor",
sort_key = s["roa-oil-sortkey"],
}
m["nrg"] = {
"Narango",
12952929,
"poz-vnn",
"Latn",
}
m["nri"] = {
"Chokri Naga",
5104247,
"tbq-anp",
}
m["nrk"] = {
"Ngarla",
3915860,
"aus-nga",
"Latn",
}
m["nrl"] = {
"Ngarluma",
7022078,
"aus-nga",
"Latn",
}
m["nrm"] = {
"Narom",
3336135,
"poz-swa",
"Latn",
}
m["nrn"] = {
"Norn",
36708,
"gmq-ins",
"Latn",
}
m["nrp"] = {
"North Picene",
430138,
"qfa-unc", -- extinct, might be a hoax
"Ital",
-- Ital translit in [[Module:scripts/data]]
}
m["nrr"] = {
"Norra",
12952967,
"tai",
}
m["nrt"] = {
"Northern Kalapuya",
3192121,
"nai-klp",
}
m["nru"] = {
"Narua",
21658869,
"sit-nas",
"Latn",
}
m["nrx"] = {
"Ngurmbur",
2591251,
}
m["nrz"] = {
"Lala (New Guinea)",
6480151,
"poz-ocw",
"Latn",
}
m["nsa"] = {
"Sangtam Naga",
7418144,
"sit-aao",
}
m["nsb"] = {
"Lower Nossob",
6693681,
"khi-tuu",
"Latn",
}
m["nsc"] = {
"Nshi",
11129508,
"nic-rnn",
"Latn",
}
m["nsd"] = {
"Southern Nisu",
63284284,
"tbq-nis",
}
m["nse"] = {
"Nsenga",
3081996,
"bnt-sna",
"Latn",
}
m["nsg"] = {
"Ngasa",
56345,
"sdv-lma",
}
m["nsh"] = {
"Ngoshie",
7022582,
"nic-mom",
"Latn",
}
m["nsi"] = {
"Nigerian Sign Language",
7033021,
"sgn-asl",
}
m["nsk"] = {
"Naskapi",
1704302,
"alg",
"Cans, Latn",
ancestors = "cr",
translit = "nsk-translit",
}
m["nsl"] = {
"Norwegian Sign Language",
1781613,
"sgn",
}
m["nsm"] = {
"Sema",
3478238,
"tbq-anp",
}
m["nsn"] = {
"Nehan",
3337774,
"poz-ocw",
"Latn",
}
m["nso"] = {
"Northern Sotho",
33890,
"bnt-sts",
"Latn",
}
m["nsp"] = {
"Nepalese Sign Language",
3915492,
"sgn",
}
m["nsq"] = {
"Northern Sierra Miwok",
3344226,
"nai-utn",
"Latn",
}
m["nsr"] = {
"Maritime Sign Language",
3915483,
"sgn",
}
m["nss"] = {
"Nali",
3335385,
"poz-aay",
}
m["nst"] = {
"Tangsa",
56350,
"sit-tno",
"Latn, Tnsa",
}
m["nsu"] = {
"Sierra Negra Nahuatl",
63284326,
"azc-nah",
"Latn",
}
m["nsv"] = {
"Southwestern Nisu",
63308004,
"tbq-nis",
}
m["nsw"] = {
"Navut",
3337327,
"poz-vnn",
"Latn",
}
m["nsx"] = {
"Nsongo",
7067577,
"bnt-tmb",
"Latn",
}
m["nsy"] = {
"Nasal",
6966574,
}
m["nsz"] = {
"Nisenan",
33665,
"nai-mdu",
"Latn",
}
m["ntd"] = {
"Northern Tidung",
24938325,
"poz-san",
}
-- ISO merged "nte" into "eko"
m["ntg"] = {
"Ngantangarra",
33060509,
}
m["nti"] = {
"Natioro",
36140,
"alv-wan",
}
m["ntj"] = {
"Ngaanyatjarra",
3915409,
"aus-pam",
"Latn",
}
m["ntk"] = {
"Ikoma",
5996114,
"bnt-lok",
"Latn",
}
m["ntm"] = {
"Nateni",
3070731,
"nic-grm",
"Latn",
}
m["nto"] = {
"Ntomba",
11130292,
"bnt-mon",
"Latn",
}
m["ntp"] = {
"Northern Tepehuan",
15615651,
"azc-pim",
"Latn",
sort_key = {remove_diacritics = c.acute},
}
m["ntr"] = {
"Delo",
35195,
"nic-gne",
"Latn",
}
m["nts"] = {
"Natagaimas",
6967931,
}
m["ntu"] = {
"Natügu",
63308082,
"poz-tem",
"Latn",
}
m["ntw"] = {
"Nottoway",
3344791,
"iro-nor",
"Latn",
}
m["ntx"] = {
"Somra",
7560536,
"sit-tng",
}
m["nty"] = {
"Mantsi",
56878,
"sit-mnz",
}
m["nua"] = {
"Yuanga",
3573088,
"poz-cln",
"Latn",
}
m["nuc"] = {
"Nukuini",
3346231,
}
m["nud"] = {
"Ngala",
7021893,
"paa-ndu",
"Latn",
}
m["nue"] = {
"Ngundu",
12952953,
"bad-cnt",
"Latn",
}
m["nuf"] = {
"Nusu",
56413,
"tbq-nus",
"Latn",
}
m["nug"] = {
"Nungali",
7069826,
"aus-mir",
"Latn",
}
m["nuh"] = {
"Ndunda",
3913968,
"nic-mmb",
"Latn",
}
m["nui"] = {
"Ngumbi",
36459,
"bnt-yko",
}
m["nuj"] = {
"Nyole (Uganda)",
3739448,
"bnt-msl",
"Latn",
}
m["nuk"] = {
"Nootka",
2992876,
"wak",
"Latn",
}
m["nul"] = {
"Nusa Laut",
7070332,
"poz-cma",
}
m["num"] = {
"Niuafo'ou",
36173,
"poz-ton",
"Latn",
}
m["nun"] = {
"Anong",
2748232,
"sit-nng",
"Latn",
}
m["nuo"] = {
"Nguôn",
3915785,
"mkh-vie",
"Latn",
sort_key = "vi-sortkey",
}
m["nup"] = {
"Nupe",
36720,
"alv-ngb",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
sort_key = "nup-sortkey",
}
m["nuq"] = {
"Nukumanu",
12909019,
"poz-pnp",
"Latn",
}
m["nur"] = {
"Nuguria",
7068910,
"poz-pnp",
"Latn",
}
m["nus"] = {
"Nuer",
33675,
"sdv-dnu",
"Latn",
}
m["nut"] = {
"Nùng",
72695,
"tai",
"Latn, Hani",
sort_key = {Hani = "Hani-sortkey"},
}
m["nuu"] = {
"Ngbundu",
11126081,
"bad",
"Latn",
}
m["nuv"] = {
"Northern Nuni",
11016572,
"nic-gnn",
"Latn",
}
m["nuw"] = {
"Nguluwan",
6528643,
}
m["nux"] = {
"Mehek",
6809452,
"paa-sep",
"Latn",
}
m["nuy"] = {
"Nunggubuyu",
1747811,
"aus-arn",
"Latn",
}
m["nuz"] = {
"Tlamacazapa Nahuatl",
2073277,
"azc-nah",
"Latn",
}
m["nvh"] = {
"Nasarian",
6966614,
"poz-vnc",
"Latn",
}
m["nvm"] = {
"Namiae",
12952922,
"ngf-koi",
"Latn",
}
m["nvo"] = {
"Nyokon",
19573407,
"nic-mbw",
"Latn",
}
m["nwa"] = {
"Nawathinehena",
6982892,
"alg-ara",
"Latn",
}
m["nwb"] = {
"Nyabwa",
33664,
"kro-wee",
}
m["nwc"] = {
"Classical Newar",
5128301,
"sit-new",
"Brah, Deva, Newa, Ranj",
-- Brah translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["nwe"] = {
"Ngwe",
36181,
"bai",
"Latn",
}
m["nwg"] = {
"Ngaiawang",
16920653,
"aus-pam",
"Latn",
}
m["nwi"] = {
"Southwest Tanna",
3504488,
"poz-vns",
"Latn",
}
m["nwm"] = {
"Nyamusa-Molo",
12747951,
"csu-bbk",
}
m["nwo"] = {
"Nauo",
6981305,
"aus-pam",
"Latn",
}
m["nwr"] = {
"Nawaru",
12638166,
"ngf-yar",
"Latn",
}
m["nwx"] = {
"Middle Newar",
65455877,
"sit-new",
"Deva, Newa, Ranj",
ancestors = "nwc",
}
m["nwy"] = {
"Nottoway-Meherrin",
65455878,
"iro-nor",
"Latn",
}
m["nxa"] = {
"Nauete",
6981095,
"poz-tim",
}
m["nxd"] = {
"Ngando (Congo)",
3913277,
"bnt-ske",
}
m["nxe"] = {
"Nage",
2295569,
"poz-cet",
}
m["nxg"] = {
"Ngadha",
1516651,
"poz-cet",
"Latn",
}
m["nxi"] = {
"Nindi",
7038230,
"bnt-mbi",
"Latn",
}
m["nxl"] = {
"South Nuaulu",
18544857,
"poz-cma",
}
m["nxm"] = {
"Numidian",
35761,
"afa",
"Tfng, Latn", --Tfng may not support all the needed characters
}
m["nxn"] = {
"Ngawun",
3915711,
"aus-pam",
"Latn",
}
m["nxo"] = {
"Ndambomo",
6983681,
"bnt-kel",
"Latn",
}
m["nxq"] = {
"Naxi",
2478711,
"sit-nas",
"Nkdb, Nkgb, Latn, Lisu",
-- Lisu translit, sort_key in [[Module:scripts/data]]
}
m["nxr"] = {
"Ninggerum",
11732526,
"ngf-lok",
"Latn",
}
-- nxu (Narau) merged into bpp (Kaure) per ISO 639-3 2020 merger
m["nxx"] = {
"Nafri",
6958211,
"paa-sen",
"Latn",
}
m["nyb"] = {
"Nyangbo",
36256,
"alv-ktg",
"Latn",
}
m["nyc"] = {
"Nyanga-li",
7070876,
"bnt-boa",
"Latn",
}
m["nyd"] = {
"Nyole (Kenya)",
7071227,
"bnt-msl",
"Latn",
}
m["nye"] = {
"Nyengo",
7071068,
"bnt-clu",
"Latn",
}
m["nyf"] = {
"Giryama",
3107606,
"bnt-mij",
"Latn",
}
m["nyg"] = {
"Nyindu",
11030685,
"bnt-shh",
"Latn",
}
m["nyh"] = {
"Nyigina",
3913780,
"aus-nyu",
"Latn",
}
m["nyi"] = {
"Nyimang",
34846,
"sdv-nyi",
"Latn",
}
m["nyj"] = {
"Nyanga (Congo)",
7070879,
"bnt-nyb",
"Latn",
}
m["nyk"] = {
"Nyaneka",
10962298,
"bnt-swb",
"Latn",
}
m["nyl"] = {
"Nyeu",
3033578,
"mkh-kat",
}
m["nym"] = {
"Nyamwezi",
4121131,
"bnt-tkm",
"Latn",
}
m["nyn"] = {
"Nyankole",
13207,
"bnt-nyg",
"Latn",
}
m["nyo"] = {
"Nyoro",
33794,
"bnt-nyg",
"Latn",
}
m["nyp"] = {
"Nyang'i",
7070894,
"ssa-klk",
}
m["nys"] = {
"Nyunga",
7049771,
"aus-pam",
"Latn",
}
m["nyt"] = {
"Nyawaygi",
3915783,
"aus-dyb",
"Latn",
}
m["nyu"] = {
"Nyungwe",
7071318,
"bnt-sna",
"Latn",
}
m["nyv"] = {
"Nyulnyul",
3442732,
"aus-nyu",
"Latn",
}
m["nyw"] = {
"Nyaw",
26425602,
"tai-nor", -- Chamberlain (1991), but Pittayaporn (2009) suggests tai-swe
"Thai, Tayo", -- Thailand
sort_key = "Thai-sortkey", -- no effect on Latn
}
m["nyx"] = {
"Nganyaywana",
3913800,
"aus-cww",
"Latn",
}
m["nyy"] = {
"Nyakyusa",
3272620,
"bnt-run",
"Latn",
}
m["nza"] = {
"Tigon Mbembe",
36518,
"nic-jkn",
"Latn",
}
m["nzb"] = {
"Njebi",
35923,
"bnt-nze",
"Latn",
}
m["nzd"] = {
"Nzadi",
17152586,
"bnt-bdz",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.caron},
}
m["nzi"] = {
"Nzima",
36337,
"alv-ctn",
"Latn",
}
m["nzk"] = {
"Nzakara",
3913339,
"znd",
"Latn",
}
m["nzm"] = {
"Zeme Naga",
21491053,
"sit-zem",
}
m["nzs"] = {
"New Zealand Sign Language",
36239,
"sgn",
}
m["nzu"] = {
"Central Teke",
36473,
"bnt-tkc",
"Latn",
}
m["nzy"] = {
"Nzakambay",
36374,
"alv-mbm",
"Latn",
}
m["nzz"] = {
"Nanga Dama Dogon",
6963443,
"nic-nwa",
}
return require("Module:languages").finalizeData(m, "language")
4vtve3zj9yb4s0wz2hxbspc754rfpqo
Mòideal:languages/data/3/o
828
16773
86296
2026-07-22T08:17:51Z
Altronic
4137
Copy from English Wiktionary
86296
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["oaa"] = {
"Orok",
33928,
"tuw-nan",
"Cyrl, Latn",
translit = "oaa-translit",
}
m["oac"] = {
"Oroch",
33650,
"tuw-udg",
"Latn, Cyrl",
}
m["oak"] = {
"Noakhali",
107548681,
"inc-bas",
"Beng",
}
m["oav"] = {
"Old Avar",
65455879,
"cau-ava",
"Geor",
-- Geor translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission)
}
m["obi"] = {
"Obispeño",
1288385,
"nai-chu",
"Latn",
}
m["obk"] = {
"Southern Bontoc",
63308144,
"phi",
"Latn",
}
m["obl"] = {
"Oblo",
36309,
}
m["obm"] = {
"Moabite",
36385,
"sem-can",
-- Phnx translit in [[Module:scripts/data]]
}
m["obo"] = {
"Obo Manobo",
12953699,
"mno",
"Latn",
}
m["obr"] = {
"Old Burmese",
17006600,
"tbq-brm",
"Mymr, Latn", --and also Pallava
}
m["obt"] = {
"Old Breton",
3558112,
"cel-brs",
"Latn",
}
m["obu"] = {
"Obulom",
3813403,
"nic-cde",
"Latn",
}
m["oca"] = {
"Ocaina",
3182577,
"sai-wit",
"Latn",
}
m["och"] = {
"Old Chinese",
35137,
"zhx",
"Hant",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["ocm"] = {
"Old Cham",
105197086,
"cmc",
"Latn", -- the script in which entries are currently entered in Wiktionary; its native script is not in ISO or Unicode yet
}
m["oco"] = {
"Old Cornish",
48304520,
"cel-brs",
"Latn",
}
m["ocu"] = {
"Tlahuica",
10751739,
"omq",
"Latn",
}
m["oda"] = {
"Odut",
3915388,
"nic-uce",
"Latn",
ancestors = "mfn",
}
m["odk"] = {
"Od",
7077191,
"inc-wes",
"Arab",
}
m["odt"] = {
"Old Dutch",
443089,
"gmw-frk",
"Latn, Runr",
strip_diacritics = {remove_diacritics = c.circ .. c.macron},
}
m["odu"] = {
"Odual",
3813392,
"nic-cde",
"Latn",
}
m["ofo"] = {
"Ofo",
3349758,
"sio-ohv",
}
m["ofs"] = {
"Old Frisian",
35133,
"gmw-fri",
"Latn",
strip_diacritics = {remove_diacritics = c.circ .. c.macron},
sort_key = {
from = {"æ", "ð", "þ"},
to = {"ae", "t" .. p[1], "t" .. p[2]}
},
}
m["ofu"] = {
"Efutop",
35297,
"nic-eko",
"Latn",
}
m["ogb"] = {
"Ogbia",
3813400,
"nic-cde",
"Latn",
}
m["ogc"] = {
"Ogbah",
36291,
"alv-igb",
"Latn",
}
m["oge"] = {
"Old Georgian",
34834,
"ccs-gzn",
"Geor, Geok",
-- Geor, Geok translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {remove_diacritics = c.circ},
}
m["ogg"] = {
"Ogbogolo",
3813405,
"nic-cde",
"Latn",
}
m["ogo"] = {
"Khana",
3914409,
"nic-ogo",
"Latn",
}
m["ogu"] = {
"Ogbronuagum",
3914485,
"nic-cde",
"Latn",
}
m["ohu"] = {
"Old Hungarian",
65455880,
"urj-ugr",
"Latn, Hung",
}
m["oia"] = {
"Oirata",
56738,
"paa-eti",
"Latn",
}
m["oin"] = {
"Inebu One",
12953782,
"paa-trr",
"Latn",
}
m["ojb"] = {
"Northwestern Ojibwa",
7060356,
"alg",
"Latn",
ancestors = "oj",
}
m["ojc"] = {
"Central Ojibwa",
5061548,
"alg",
"Latn",
ancestors = "oj",
}
m["ojg"] = {
"Eastern Ojibwa",
5330342,
"alg",
"Latn",
ancestors = "oj",
}
m["ojp"] = {
"Old Japanese",
5736700,
"jpx",
"Jpan",
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["ojs"] = {
"Severn Ojibwa",
56494,
"alg",
"Latn",
ancestors = "oj",
}
m["ojv"] = {
"Ontong Java",
7095071,
"poz-pnp",
"Latn",
}
m["ojw"] = {
"Western Ojibwa",
3474222,
"alg",
"Latn",
ancestors = "oj",
}
m["oka"] = {
"Okanagan",
2984602,
"sal",
"Latn",
}
m["okb"] = {
"Okobo",
3813398,
"nic-lcr",
"Latn",
}
m["okd"] = {
"Okodia",
36300,
"ijo",
"Latn",
}
m["oke"] = {
"Okpe (Southwestern Edo)",
268924,
"alv-swd",
"Latn",
}
m["okg"] = {
"Kok-Paponk",
55254102,
"aus-pmn",
"Latn",
}
m["okh"] = {
"Koresh-e Rostam",
6432160,
"xme-ttc",
ancestors = "xme-ttc-cen",
}
m["oki"] = {
"Okiek",
56367,
"sdv-kln",
"Latn",
}
m["okj"] = {
"Oko-Juwoi",
3436832,
"qfa-adc",
}
m["okk"] = {
"Kwamtim One",
19830649,
"paa-trr",
"Latn",
}
m["okl"] = {
"Old Kentish Sign Language",
7084319,
"sgn",
}
m["okm"] = {
"Middle Korean",
715339,
"qfa-kor",
"Kore, Latn",
ancestors = "oko",
translit = "okm-translit",
sort_key = "okm-sortkey",
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["okn"] = {
"Okinoerabu",
3350036,
"jpx-nry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["oko"] = {
"Old Korean",
715364,
"qfa-kor",
"Kore",
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["okr"] = {
"Kirike",
11006763,
"ijo",
"Latn",
}
m["oks"] = {
"Oko-Eni-Osayen",
36302,
"alv-von",
"Latn",
}
m["oku"] = {
"Oku",
36289,
"nic-rnc",
"Latn",
}
m["okv"] = {
"Orokaiva",
7103752,
"ngf-oro",
"Latn",
}
m["okx"] = {
"Okpe (Northwestern Edo)",
7082547,
"alv-nwd",
"Latn",
}
m["okz"] = {
"Old Khmer",
9205,
"mkh-kmr",
"Latn, Khmr", --and also Khom, Pallava
}
m["old"] = {
"Mochi",
12952852,
"bnt-chg",
"Latn",
}
m["ole"] = {
"Olekha",
3695204,
"sit",
"Tibt, Latn",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["olm"] = {
"Oloma",
3441166,
"alv-nwd",
"Latn",
}
m["olo"] = {
"Livvi",
36584,
"urj-fin",
"Latn",
}
m["olr"] = {
"Olrat",
3351562,
"poz-vnn",
"Latn",
}
m["olt"] = {
"Old Lithuanian",
17417801,
"bat-eas",
"Latn",
display_text = "lt-common",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.tilde},
}
m["olu"] = {
"Kuvale",
6448765,
"bnt-swb",
"Latn",
}
m["oma"] = {
"Omaha-Ponca",
2917968,
"sio-dhe",
"Latn",
}
m["omb"] = {
"Omba",
2841471,
"poz-vnn",
"Latn",
}
m["omc"] = {
"Mochica",
1951641,
"qfa-iso",
"Latn",
}
m["omg"] = {
"Omagua",
33663,
"tup-gua",
"Latn",
}
m["omi"] = {
"Omi",
56795,
"csu-mma",
}
m["omk"] = {
"Omok",
4334657,
"qfa-yuk",
"Cyrl",
translit = "omk-translit",
}
m["oml"] = {
"Ombo",
7089928,
"bnt-tet",
"Latn",
}
m["omn"] = {
"Minoan",
1669994,
"qfa-unc", -- undeciphered
"Lina",
}
m["omo"] = {
"Utarmbung",
7902577,
"ngf-sad",
"Latn",
}
m["omp"] = {
"Old Manipuri",
105953310,
"sit",
"Mtei",
translit = "Mtei-translit",
}
m["omr"] = {
"Old Marathi",
65455881,
"inc-sou",
"Deva, Modi",
translit = {
Deva = "sa-translit",
Modi = "Modi-translit",
},
}
m["omt"] = {
"Omotik",
36313,
"sdv-nis",
"Latn",
}
m["omu"] = {
"Omurano",
1957612,
"qfa-iso",
"Latn",
}
m["omw"] = {
"South Tairora",
20210553,
"ngf-tai",
"Latn",
}
m["omx"] = {
"Old Mon",
111364697,
"mkh-mnc",
"Mymr, Latn", --and also Pallava
}
m["ona"] = {
"Selk'nam",
2721227,
"sai-cho",
"Latn",
}
m["onb"] = {
"Lingao",
7093790,
"qfa-onb",
"Latn",
}
m["one"] = {
"Oneida",
857858,
"iro-nor",
"Latn",
}
m["ong"] = {
"Olo",
592162,
"paa-wap",
"Latn",
}
m["oni"] = {
"Onin",
7093910,
"poz-cet",
"Latn",
}
m["onj"] = {
"Onjob",
7093968,
"ngf-dag",
"Latn",
}
m["onk"] = {
"Kabore One",
12953783,
"paa-trr",
"Latn",
}
m["onn"] = {
"Onobasulu",
7094437,
"ngf-bos",
"Latn",
}
m["ono"] = {
"Onondaga",
1077450,
"iro-nor",
"Latn",
ancestors = "iro-oon",
}
m["onp"] = {
"Sartang",
7424639,
"sit-khm",
"Latn, Deva",
}
m["onr"] = {
"Northern One",
19830648,
"paa-trr",
"Latn",
}
m["ons"] = {
"Ono",
11732548,
"ngf-ehu",
"Latn",
}
--ont (Ontenu) treated as variety of gaj (Gadsup) per [[Wiktionary:Language_treatment_requests#Merge_Ontenu_into_Gadsup]]
m["onu"] = {
"Unua",
3552042,
"poz-vnc",
"Latn",
}
m["onw"] = {
"Old Nubian",
2268,
"nub",
"Copt",
translit = "Copt-translit",
sort_key = "Copt-sortkey",
}
m["onx"] = {
"Pidgin Onin",
12953788,
"crp",
"Latn",
ancestors = "oni",
}
m["ood"] = {
"O'odham",
2393095,
"azc-pim",
"Latn",
}
m["oog"] = {
"Ong",
12953787,
"mkh-kat",
}
m["oon"] = {
"Önge",
2475551,
"qfa-ong",
"Latn",
}
m["oor"] = {
"Oorlams",
2484337,
}
m["opa"] = {
"Okpamheri",
3913331,
"alv-nwd",
"Latn",
}
m["opk"] = {
"Kopkaka",
6431129,
"ngf-wok",
"Latn",
}
m["opm"] = {
"Oksapmin",
1068097,
"ngf", -- per Glottolog, in an Ok-Oksapmin family, under Awyu-Ok, under Asmat-Awyu-Ok, but we don't have these
"Latn",
}
m["opo"] = {
"Opao",
7095585,
"paa-wel",
"Latn",
}
m["opt"] = {
"Opata",
2304583,
"azc-trc",
"Latn",
}
m["opy"] = {
"Ofayé",
3446691,
"sai-mje",
"Latn",
}
m["ora"] = {
"Oroha",
36298,
"poz-sls",
"Latn",
}
m["ore"] = {
"Orejón",
3355834,
"sai-tuc",
"Latn",
}
m["org"] = {
"Oring",
3915308,
"nic-ucn",
"Latn",
}
m["orh"] = {
"Oroqen",
1367309,
"tuw-ewe",
"Latn",
}
m["oro"] = {
"Orokolo",
7103758,
"paa-wel",
"Latn",
}
m["orr"] = {
"Oruma",
36299,
"ijo",
"Latn",
}
m["ort"] = {
"Adivasi Odia",
12953791,
"inc-eas",
"Orya",
ancestors = "or",
}
m["oru"] = {
"Ormuri",
33740,
"ira-orp",
"fa-Arab",
}
m["orv"] = {
"Old East Slavic",
35228,
"zle",
"Cyrs",
translit = {Cyrs = "Cyrs-translit"},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["orw"] = {
"Oro Win",
3450423,
"sai-cpc",
"Latn",
}
m["orx"] = {
"Oro",
3813396,
"nic-lcr",
"Latn",
}
m["orz"] = {
"Ormu",
7103494,
"poz-ocw",
"Latn",
}
m["osa"] = {
"Osage",
2600085,
"sio-dhe",
"Latn, Osge",
}
m["osc"] = {
"Oscan",
36653,
"itc-sbl",
"Ital, Latn, Polyt",
display_text = {
Latn = s["itc-Latn-displaytext"],
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"],
},
sort_key = {
Latn = s["itc-Latn-sortkey"],
},
-- Ital translit in [[Module:scripts/data]]
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["osi"] = {
"Osing",
2701322,
"poz",
"Latn",
}
m["osn"] = {
"Old Sundanese",
56197074,
"poz-msa",
"Latn, Sund, Kawi",
}
m["oso"] = {
"Ososo",
3913398,
"alv-yek",
"Latn",
}
m["osp"] = {
"Old Spanish",
1088025,
"roa-cas",
"Latn",
}
m["ost"] = {
"Osatu",
36243,
"nic-grs",
"Latn",
}
m["osu"] = {
"Southern One",
12953785,
"paa-trr",
"Latn",
}
m["osx"] = {
"Old Saxon",
35219,
"gmw-lgm",
"Latn",
strip_diacritics = {remove_diacritics = c.circ .. c.macron},
}
m["ota"] = {
"Ottoman Turkish",
36730,
"trk-ogz",
"ota-Arab, Armn",
ancestors = "trk-oat",
strip_diacritics = {
["ota-Arab"] = {
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {"گ", "ڭ", "ۀ"},
to = {"ك", "ك", "ه"}
},
Armn = {
from = {"՚"},
to = {"’"}
},
},
translit = {Armn = "ota-Armn-translit"},
standard_chars = {
["ota-Arab"] = "آاأبپتثجچحخدذرزژسشصضطظعغفقكلمنوؤهیئةءـ",
c.punc
},
}
m["otb"] = {
"Old Tibetan",
7085214,
"sit-tib",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["otd"] = {
"Ot Danum",
3033781,
"poz-brw",
"Latn",
}
m["ote"] = {
"Mezquital Otomi",
23755711,
"oto-otm",
"Latn",
}
m["oti"] = {
"Oti",
3357881,
}
m["otk"] = {
"Old Turkic",
34988,
"trk-sib",
"Orkh, Sogd",
-- Orkh translit in [[Module:scripts/data]]
}
m["otl"] = {
"Tilapa Otomi",
7802050,
"oto-otm",
"Latn",
}
m["otm"] = {
"Eastern Highland Otomi",
13581718,
"oto-otm",
"Latn",
}
m["otn"] = {
"Tenango Otomi",
25559589,
"oto-otm",
"Latn",
}
m["otq"] = {
"Querétaro Otomi",
23755688,
"oto-otm",
"Latn",
}
m["otr"] = {
"Otoro",
36328,
"alv-hei",
}
m["ots"] = {
"Estado de México Otomi",
7413841,
"oto-otm",
"Latn",
}
m["ott"] = {
"Temoaya Otomi",
7698191,
"oto-otm",
"Latn",
}
m["otu"] = {
"Otuke",
7110049,
"sai-mje",
"Latn",
}
m["otw"] = {
"Ottawa",
133678,
"alg",
"Latn",
ancestors = "oj",
}
m["otx"] = {
"Texcatepec Otomi",
25559590,
"oto-otm",
"Latn",
}
m["oty"] = {
"Old Tamil",
20987452,
"dra-tam",
"Brah",
-- Brah translit in [[Module:scripts/data]]
}
m["otz"] = {
"Ixtenco Otomi",
6101171,
"oto-otm",
"Latn",
}
m["oub"] = {
"Glio-Oubi",
3914977,
"kro-grb",
}
m["oue"] = {
"Oune",
7110521,
"paa-sbo",
"Latn",
}
m["oui"] = {
"Old Uyghur",
428299,
"trk-ssb",
"Ougr, Latn, Hani, Phag, Brah, Mani, Syrc, Orkh, Sogd, Arab, mnc-Mong, Sogo, Tibt",
ancestors = "otk",
translit = {
Ougr = "Ougr-translit",
-- Orkh translit in [[Module:scripts/data]]
-- Mani translit in [[Module:scripts/data]]
-- mnc-Mong translit in [[Module:scripts/data]] (NOTE: Formerly not present; I assume accidentally left out)
-- Brah translit in [[Module:scripts/data]]
},
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- NOTE: Formerly there was only a sort_key for Tibetan. I assume the other three were left out accidentally.
sort_key = {
Hani = "Hani-sortkey",
},
}
m["oum"] = {
"Ouma",
7110494,
"poz-ocw",
"Latn",
}
m["ovd"] = {
"Elfdalian",
254950,
"gmq-eas",
ancestors = "gmq-osw",
"Latn, Runr",
}
m["owi"] = {
"Owiniga",
56454,
"paa-lma",
"Latn",
}
m["owl"] = {
"Old Welsh",
2266723,
"cel-brw",
"Latn",
}
m["oyb"] = {
"Oy",
13593748,
"mkh-ban",
}
m["oyd"] = {
"Oyda",
7116251,
"omv-nom",
"Latn",
}
m["oym"] = {
"Wayampi",
7975842,
"tup-gua",
"Latn",
}
m["oyy"] = {
"Oya'oya",
7116243,
"poz-ocw",
"Latn",
}
m["ozm"] = {
"Koonzime",
35566,
"bnt-ndb",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
kxh9658r4d1o1o59mf494g2fh4gjoeu
Mòideal:table/size
828
16774
86297
2026-07-22T08:20:18Z
Altronic
4137
Copy from English Wiktionary
86297
Scribunto
text/plain
local next = next
local pairs = pairs
--[==[
This returns the size of a key/value pair table. If `raw` is set, then metamethods will be ignored, giving the true table size.
For arrays, it is faster to use `export.length`.]==]
return function(t, raw)
local i, iter, state, init = 0
if raw then
iter, state, init = next, t, nil
else
iter, state, init = pairs(t)
end
for _ in iter, state, init do
i = i + 1
end
return i
end
cngitqlralebfbp34hnb48xd0vu0xxk
Mòideal:table/reverse
828
16775
86298
2026-07-22T08:22:12Z
Altronic
4137
Copy from English Wiktionary
86298
Scribunto
text/plain
local table_length_module = "Module:table/length"
local function table_len(...)
table_len = require(table_length_module)
return table_len(...)
end
--[==[
Takes a list, and returns a new list with the values in the reverse order: { { "a", "b", "c" }} -> { { "c", "b", "a" }}.]==]
return function(t)
local list, t_len = {}, table_len(t)
for i = 1, t_len do
list[i] = t[t_len - i + 1]
end
return list
end
5ohrlsa4osfo3dybez4sja0s8ze1ftr
Mòideal:table/iterateList
828
16776
86299
2026-07-22T08:23:45Z
Altronic
4137
Copy from English Wiktionary
86299
Scribunto
text/plain
local ipairs = ipairs
--[==[
An iterator which works like {ipairs()}, but which only returns the value.]==]
return function(t)
local iter, state, k, v = ipairs(t)
return function()
k, v = iter(t, k)
return v
end
end
kwegzdop7sk2lli5t2pvp1fgvfxyfzm
Mòideal:table/shallowCopy
828
16777
86300
2026-07-22T08:24:14Z
Altronic
4137
Copy from English Wiktionary
86300
Scribunto
text/plain
local next = next
local pairs = pairs
local type = type
--[==[
Returns a clone of an object. If the object is a table, the value returned is a new table, but all subtables and functions are shared. Metamethods are respected unless the `raw` flag is set, but the returned table will have no metatable of its own.]==]
return function(orig, raw)
if type(orig) ~= "table" then
return orig
end
local copy, iter, state, init = {}
if raw then
iter, state = next, orig
else
iter, state, init = pairs(orig)
end
for k, v in iter, state, init do
copy[k] = v
end
return copy
end
t51fcj6fuqkknha7dzzm33l4y4ohb22
Mòideal:languages/data/exceptional
828
16778
86301
2026-07-22T08:31:59Z
Altronic
4137
Copy from English Wiktionary
86301
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["aav-khs-pro"] = {
"Proto-Khasian",
116773216,
"aav-khs",
"Latn",
type = "reconstructed",
}
m["aav-nic-pro"] = {
"Proto-Nicobarese",
116773793,
"aav-nic",
"Latn",
type = "reconstructed",
}
m["aav-pkl-pro"] = {
"Proto-Pnar-Khasi-Lyngngam",
116773259,
"aav-pkl",
"Latn",
type = "reconstructed",
}
m["aav-pro"] = { -- mkh-pro will merge into this
"Proto-Austroasiatic",
116773186,
"aav",
"Latn",
type = "reconstructed",
}
m["afa-pro"] = {
"Proto-Afroasiatic",
269125,
"afa",
"Latn",
type = "reconstructed",
}
m["alg-aga"] = {
"Agawam",
nil,
"alg-eas",
"Latn",
}
m["alg-pro"] = {
"Proto-Algonquian",
7251834,
"alg",
"Latn",
type = "reconstructed",
sort_key = {remove_diacritics = "·"},
}
m["alv-ama"] = {
"Amasi",
4740400,
"nic-grs",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron},
}
m["alv-bgu"] = {
"Bainouk Gubeeher",
17002646,
"alv-bny",
"Latn",
}
m["alv-bua-pro"] = {
"Proto-Bua",
116773723,
"alv-bua",
"Latn",
type = "reconstructed",
}
m["alv-cng-pro"] = {
"Proto-Cangin",
116773726,
"alv-cng",
"Latn",
type = "reconstructed",
}
m["alv-edo-pro"] = {
"Proto-Edoid",
116773206,
"alv-edo",
"Latn",
type = "reconstructed",
}
m["alv-fli-pro"] = {
"Proto-Fali",
116773754,
"alv-fli",
"Latn",
type = "reconstructed",
}
m["alv-gbe-pro"] = {
"Proto-Gbe",
116773208,
"alv-gbe",
"Latn",
type = "reconstructed",
}
m["alv-gng-pro"] = {
"Proto-Guang",
116773757,
"alv-gng",
"Latn",
type = "reconstructed",
}
m["alv-gtm-pro"] = {
"Proto-Central Togo",
116773732,
"alv-gtm",
"Latn",
type = "reconstructed",
}
m["alv-gwa"] = {
"Gwara",
16945580,
"nic-pla",
"Latn",
}
m["alv-hei-pro"] = {
"Proto-Heiban",
116773760,
"alv-hei",
"Latn",
type = "reconstructed",
}
m["alv-ido-pro"] = {
"Proto-Idomoid",
116773764,
"alv-ido",
"Latn",
type = "reconstructed",
}
m["alv-igb-pro"] = {
"Proto-Igboid",
116773765,
"alv-igb",
"Latn",
type = "reconstructed",
}
m["alv-kwa-pro"] = {
"Proto-Kwa",
116773780,
"alv-kwa",
"Latn",
type = "reconstructed",
}
m["alv-mum-pro"] = {
"Proto-Mumuye",
116773791,
"alv-mum",
"Latn",
type = "reconstructed",
}
m["alv-nup-pro"] = {
"Proto-Nupoid",
116773795,
"alv-nup",
"Latn",
type = "reconstructed",
}
m["alv-pro"] = {
"Proto-Atlantic-Congo",
116732838,
"alv",
"Latn",
type = "reconstructed",
}
m["alv-edk-pro"] = {
"Proto-Edekiri",
nil,
"alv-edk",
"Latn",
type = "reconstructed",
}
m["alv-yor-pro"] = {
"Proto-Yoruba",
nil,
"alv-yor",
"Latn",
type = "reconstructed",
}
m["alv-yrd-pro"] = {
"Proto-Yoruboid",
116773824,
"alv-yrd",
"Latn",
type = "reconstructed",
}
m["alv-von-pro"] = {
"Proto-Volta-Niger",
116773820,
"alv-von",
"Latn",
type = "reconstructed",
}
m["apa-pro"] = {
"Proto-Apachean",
116773135,
"apa",
"Latn",
type = "reconstructed",
}
m["aql-pro"] = {
"Proto-Algic",
18389588,
"aql",
"Latn",
type = "reconstructed",
sort_key = {remove_diacritics = "·"},
}
m["art-adu"] = {
"Adûni",
1232159,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-bel"] = {
"Belter Creole",
108055510,
"art",
"Latn",
type = "appendix-constructed",
sort_key = {
remove_diacritics = c.acute,
from = {"ɒ"},
to = {"a"},
},
}
m["art-blk"] = {
"Bolak",
2909283,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-bsp"] = {
"Black Speech",
686210,
"art",
"Latn, Teng",
type = "appendix-constructed",
}
m["art-com"] = {
"Communicationssprache",
35227,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-dtk"] = {
"Dothraki",
2914733,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-elo"] = {
"Eloi",
nil,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-gld"] = {
"Goa'uld",
19823,
"art",
"Latn, Egyp, Mero",
type = "appendix-constructed",
}
m["art-lap"] = {
"Lapine",
6488195,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-man"] = {
"Mandalorian",
54289,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-mun"] = {
"Mundolinco",
851355,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-nav"] = {
"Naʼvi",
316939,
"art",
"Latn",
type = "appendix-constructed",
}
m["art-vlh"] = {
"High Valyrian",
64483808,
"art",
"Latn",
type = "appendix-constructed",
}
m["ath-nic"] = {
"Nicola",
20609,
"ath-nor",
"Latn",
}
m["ath-pro"] = {
"Proto-Athabaskan",
104841722,
"ath",
"Latn",
type = "reconstructed",
}
m["auf-pro"] = {
"Proto-Arawa",
116773706,
"auf",
"Latn",
type = "reconstructed",
}
m["aus-alu"] = {
"Alungul",
16827670,
"aus-pmn",
"Latn",
}
m["aus-and"] = {
"Andjingith",
4754509,
"aus-pmn",
"Latn",
}
m["aus-ang"] = {
"Angkula",
16828520,
"aus-pmn",
"Latn",
}
m["aus-arn-pro"] = {
"Proto-Arnhem",
116773720,
"aus-arn",
"Latn",
type = "reconstructed",
}
m["aus-bra"] = {
"Barranbinya",
4863220,
"aus-pmn",
"Latn",
}
m["aus-brm"] = {
"Barunggam",
4865914,
"aus-pmn",
"Latn",
}
m["aus-cww-pro"] = {
"Proto-Central New South Wales",
116773199,
"aus-cww",
"Latn",
type = "reconstructed",
}
m["aus-dal-pro"] = {
"Proto-Daly",
116773743,
"aus-dal",
"Latn",
type = "reconstructed",
}
m["aus-guw"] = {
"Guwar",
6652138,
"aus-pam",
"Latn",
}
m["aus-lsw"] = {
"Little Swanport",
6652138,
"qfa-unc",
"Latn",
}
m["aus-mbi"] = {
"Mbiywom",
6799701,
"aus-pmn",
"Latn",
}
m["aus-ngk"] = {
"Ngkoth",
7022405,
"aus-pmn",
"Latn",
}
m["aus-nyu-pro"] = {
"Proto-Nyulnyulan",
116773797,
"aus-nyu",
"Latn",
type = "reconstructed",
}
m["aus-pam-pro"] = {
"Proto-Pama-Nyungan",
33942,
"aus-pam",
"Latn",
type = "reconstructed",
}
m["aus-tul"] = {
"Tulua",
16938541,
"aus-pam",
"Latn",
}
m["aus-uwi"] = {
"Uwinymil",
7903995,
"aus-arn",
"Latn",
}
m["aus-wdj-pro"] = {
"Proto-Iwaidjan",
116773767,
"aus-wdj",
"Latn",
type = "reconstructed",
}
m["aus-won"] = {
"Wong-gie",
nil,
"aus-pam",
"Latn",
}
m["aus-wul"] = {
"Wulguru",
8039196,
"aus-dyb",
"Latn",
}
m["aus-ynk"] = { -- contrast nny
"Yangkaal",
3913770,
"aus-tnk",
"Latn",
}
m["awd-amc-pro"] = {
"Proto-Amuesha-Chamicuro",
nil,
"awd",
"Latn",
type = "reconstructed",
}
m["awd-kmp-pro"] = {
"Proto-Kampa",
nil,
"awd",
"Latn",
type = "reconstructed",
}
m["awd-prw-pro"] = {
"Proto-Paresi-Waura",
nil,
"awd",
"Latn",
type = "reconstructed",
}
m["awd-ama"] = {
"Amarizana",
16827787,
"awd",
"Latn",
}
m["awd-ana"] = {
"Anauyá",
16828252,
"awd",
"Latn",
}
m["awd-apo"] = {
"Apolista",
16916645,
"awd",
"Latn",
}
m["awd-cab"] = {
"Cabre",
16850160,
"awd",
"Latn",
}
m["awd-gnu"] = {
"Guinau",
3504087,
"awd",
"Latn",
}
m["awd-kar"] = {
"Cariay",
16920253,
"awd",
"Latn",
}
m["awd-kaw"] = {
"Kawishana",
6379993,
"awd-nwk",
"Latn",
}
m["awd-kus"] = {
"Kustenau",
5196293,
"awd",
"Latn",
}
m["awd-man"] = {
"Manao",
6746920,
"awd",
"Latn",
}
m["awd-mar"] = {
"Marawan",
6755108,
"awd",
"Latn",
}
m["awd-mpr"] = {
"Maipure",
6736872,
"awd",
"Latn",
}
m["awd-mrt"] = {
"Mariaté",
16910017,
"awd-nwk",
"Latn",
}
m["awd-nwk-pro"] = {
"Proto-Nawiki",
116773234,
"awd-nwk",
"Latn",
type = "reconstructed",
}
m["awd-pai"] = {
"Paikoneka",
128807835,
"awd",
"Latn",
}
m["awd-pas"] = {
"Pasé",
7143168,
"awd-nwk",
"Latn",
}
m["awd-pro"] = {
"Proto-Arawak",
97573478,
"awd",
"Latn",
type = "reconstructed",
}
m["awd-she"] = {
"Shebayo",
7492248,
"awd",
"Latn",
}
m["awd-taa-pro"] = {
"Proto-Ta-Arawak",
116773282,
"awd-taa",
"Latn",
type = "reconstructed",
}
m["awd-wai"] = {
"Wainumá",
16910017,
"awd-nwk",
"Latn",
}
m["awd-yum"] = {
"Yumana",
8061062,
"awd-nwk",
"Latn",
}
m["azc-caz"] = {
"Cazcan",
5055514,
"azc",
"Latn",
}
m["azc-cup-pro"] = {
"Proto-Cupan",
116773738,
"azc-cup",
"Latn",
type = "reconstructed",
}
m["azc-ktn"] = {
"Kitanemuk",
3197558,
"azc-tak",
"Latn",
}
m["azc-nah-pro"] = {
"Proto-Nahuan",
7251860,
"azc-nah",
"Latn",
type = "reconstructed",
}
m["azc-num-pro"] = {
"Proto-Numic",
116773247,
"azc-num",
"Latn",
type = "reconstructed",
}
m["azc-pro"] = {
"Proto-Uto-Aztecan",
96400333,
"azc",
"Latn",
type = "reconstructed",
}
m["azc-tak-pro"] = {
"Proto-Takic",
116773283,
"azc-tak",
"Latn",
type = "reconstructed",
}
m["azc-tat"] = {
"Tataviam",
743736,
"azc",
"Latn",
}
m["ber-pro"] = {
"Proto-Berber",
2855698,
"ber",
"Latn",
type = "reconstructed",
}
m["ber-fog"] = {
"Fogaha",
107610173,
"ber",
"Latn",
}
m["ber-zuw"] = {
"Zuwara",
4117169,
"ber",
"Latn",
}
m["bnt-bal"] = {
"Balong",
93935237,
"bnt-bbo",
"Latn",
}
m["bnt-bon"] = {
"Boma Nkuu",
nil,
"bnt",
"Latn",
}
m["bnt-boy"] = {
"Boma Yumu",
nil,
"bnt",
"Latn",
}
m["bnt-bwa"] = {
"Bwala",
128810345,
"bnt-tek",
"Latn",
}
m["bnt-cmw"] = {
"Chimwiini",
4958328,
"bnt-swh",
"Latn",
}
m["bnt-ind"] = {
"Indanga",
51412803,
"bnt",
"Latn",
}
m["bnt-lal"] = {
"Lala (South Africa)",
6480154,
"bnt-ngu",
"Latn",
}
m["bnt-mpi"] = {
"Mpiin",
93937013,
"bnt-bdz",
"Latn",
}
m["bnt-mpu"] = {
"Mpuono", -- not to be confused with Mbuun zmp
36056,
"bnt",
"Latn",
}
m["bnt-ngu-pro"] = {
"Proto-Nguni",
961559,
"bnt-ngu",
"Latn",
type = "reconstructed",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.caron},
}
m["bnt-phu"] = {
"Phuthi",
33796,
"bnt-ngu",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute},
}
m["bnt-pro"] = {
"Proto-Bantu",
3408025,
"bnt",
"Latn",
type = "reconstructed",
sort_key = "bnt-pro-sortkey",
}
m["bnt-sab-pro"] = {
"Proto-Sabaki",
nil, -- Q2209395 is the code for the Sabaki family
"bnt-sab",
"Latn",
type = "reconstructed",
}
m["bnt-sbo"] = {
"South Boma",
nil,
"bnt",
"Latn",
}
m["bnt-sts-pro"] = {
"Proto-Sotho-Tswana",
116773278,
"bnt-sts",
"Latn",
type = "reconstructed",
}
m["btk-pro"] = {
"Proto-Batak",
116773191,
"btk",
"Latn",
type = "reconstructed",
}
m["cau-abz-pro"] = {
"Proto-Abkhaz-Abaza",
7251831,
"cau-abz",
"Latn",
type = "reconstructed",
}
m["cau-and-pro"] = {
"Proto-Andian",
nil,
"cau-and",
"Latn",
type = "reconstructed",
}
m["cau-ava-pro"] = {
"Proto-Avaro-Andian",
116773187,
"cau-ava",
"Latn",
type = "reconstructed",
}
m["cau-cir-pro"] = {
"Proto-Circassian",
7251838,
"cau-cir",
"Latn",
type = "reconstructed",
}
m["cau-drg-pro"] = {
"Proto-Dargwa",
116773205,
"cau-drg",
"Latn",
type = "reconstructed",
}
m["cau-lzg-pro"] = {
"Proto-Lezghian",
116773223,
"cau-lzg",
"Latn",
type = "reconstructed",
}
m["cau-nec-pro"] = {
"Proto-Northeast Caucasian",
116773244,
"cau-nec",
"Latn",
type = "reconstructed",
}
m["cau-nkh-pro"] = {
"Proto-Nakh",
108032840,
"cau-nkh",
"Latn",
type = "reconstructed",
}
m["cau-nwc-pro"] = {
"Proto-Northwest Caucasian",
7251861,
"cau-nwc",
"Latn",
type = "reconstructed",
}
m["cau-tsz-pro"] = {
"Proto-Tsezian",
116773287,
"cau-tsz",
"Latn",
type = "reconstructed",
}
m["cba-ata"] = {
"Atanques",
4812783,
"cba",
"Latn",
}
m["cba-cat"] = {
"Catío Chibcha",
7083619,
"cba",
"Latn",
}
m["cba-dor"] = {
"Dorasque",
5297532,
"cba",
"Latn",
}
m["cba-dui"] = {
"Duit",
3041061,
"cba",
"Latn",
}
m["cba-hue"] = {
"Huetar",
35514,
"cba",
"Latn",
}
m["cba-nut"] = {
"Nutabe",
7070405,
"cba",
"Latn",
}
m["cba-pro"] = {
"Proto-Chibchan",
116773203,
"cba",
"Latn",
type = "reconstructed",
}
m["ccs-pro"] = {
"Proto-Kartvelian",
2608203,
"ccs",
"Latn",
type = "reconstructed",
strip_diacritics = {
from = {"q̣", "p̣", "ʓ", "ċ"},
to = {"q̇", "ṗ", "ʒ", "c̣"}
},
}
m["ccs-gzn-pro"] = {
"Proto-Georgian-Zan",
23808119,
"ccs-gzn",
"Latn",
type = "reconstructed",
strip_diacritics = {
from = {"q̣", "p̣", "ʓ", "ċ"},
to = {"q̇", "ṗ", "ʒ", "c̣"}
},
}
m["cdc-cbm-pro"] = {
"Proto-Central Chadic",
116773197,
"cdc-cbm",
"Latn",
type = "reconstructed",
}
m["cdc-mas-pro"] = {
"Proto-Masa",
116773789,
"cdc-mas",
"Latn",
type = "reconstructed",
}
m["cdc-pro"] = {
"Proto-Chadic",
116773201,
"cdc",
"Latn",
type = "reconstructed",
}
m["cdd-pro"] = {
"Proto-Caddoan",
116773725,
"cdd",
"Latn",
type = "reconstructed",
}
m["cel-bry-pro"] = {
"Proto-Brythonic",
1248800,
"cel-bry",
"Latn, Polyt",
sort_key = {
Latn = "cel-bry-pro-sortkey",
},
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cel-gal"] = {
"Gallaecian",
3094789,
"cel-his",
}
m["cel-gau"] = {
"Gaulish",
29977,
"cel",
"Latn, Polyt, Ital",
strip_diacritics = {
Latn = {remove_diacritics = c.macron .. c.breve .. c.diaer},
},
sort_key = {
Latn = "cel-bry-pro-sortkey",
},
-- Ital translit in [[Module:scripts/data]]
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cel-pro"] = {
"Proto-Celtic",
653649,
"cel",
"Latn",
type = "reconstructed",
sort_key = "cel-pro-sortkey",
}
m["chi-pro"] = {
"Proto-Chimakuan",
116773734,
"chi",
"Latn",
type = "reconstructed",
}
m["chm-pro"] = {
"Proto-Mari",
116773788,
"chm",
"Latn",
type = "reconstructed",
}
m["cmc-pro"] = {
"Proto-Chamic",
114793834,
"cmc",
"Latn",
type = "reconstructed",
}
m["crp-bip"] = {
"Basque-Icelandic Pidgin",
810378,
"crp",
"Latn",
ancestors = "eu",
}
m["crp-cpr"] = {
"Chinese Pidgin Russian",
nil,
"crp",
"Hani, Cyrl, Latn",
ancestors = "ru, zh",
translit = {Cyrl = "ru-translit"},
strip_diacritics = {
Cyrl = {remove_diacritics = c.acute .. c.grave .. c.macron},
},
}
m["crp-gep"] = {
"West Greenlandic Pidgin",
17036301,
"crp",
"Latn",
ancestors = "kl",
}
m["crp-kia"] = {
"Kiautschou German Pidgin",
108314615,
"crp",
"Latn",
ancestors = "de",
}
m["crp-mar"] = {
"Maroon Spirit Language",
1093206,
"crp",
"Latn",
ancestors = "en",
}
m["crp-mpp"] = {
"Macau Pidgin Portuguese",
128804537,
"crp",
"Hant, Latn",
ancestors = "pt",
sort_key = {Hant = "Hani-sortkey"},
}
m["crp-rsn"] = {
"Russenorsk",
505125,
"crp",
"Cyrl, Latn",
ancestors = "nn, ru",
translit = {Cyrl = "ru-translit"},
}
m["crp-spp"] = {
"Samoan Plantation Pidgin",
7409948,
"crp",
"Latn",
ancestors = "en",
}
m["crp-slb"] = {
"Solombala English",
7558525,
"crp",
"Cyrl, Latn",
ancestors = "en, ru",
translit = {Cyrl = "ru-translit"},
}
m["crp-tpr"] = {
"Taimyr Pidgin Russian",
16930506,
"crp",
"Cyrl",
ancestors = "ru",
translit = "ru-translit",
}
m["csu-bba-pro"] = {
"Proto-Bongo-Bagirmi",
116773722,
"csu-bba",
"Latn",
type = "reconstructed",
}
m["csu-maa-pro"] = {
"Proto-Mangbetu",
116773786,
"csu-maa",
"Latn",
type = "reconstructed",
}
m["csu-pro"] = {
"Proto-Central Sudanic",
116773730,
"csu",
"Latn",
type = "reconstructed",
}
m["csu-sar-pro"] = {
"Proto-Sara",
116773809,
"csu-sar",
"Latn",
type = "reconstructed",
}
m["cus-ash"] = {
"Ashraaf",
4805855,
"cus-som",
"Latn",
}
m["cus-hec-pro"] = {
"Proto-Highland East Cushitic",
116773761,
"cus-hec",
"Latn",
type = "reconstructed",
}
m["cus-som-pro"] = {
"Proto-Somaloid",
nil,
"cus-som",
"Latn",
type = "reconstructed",
}
m["cus-sou-pro"] = {
"Proto-South Cushitic",
126081567,
"cus-sou",
"Latn",
type = "reconstructed",
}
m["cus-pro"] = {
"Proto-Cushitic",
116773204,
"cus",
"Latn",
type = "reconstructed",
}
m["dmn-dam"] = {
"Dama (Sierra Leone)",
19601574,
"dmn",
"Latn",
}
m["dra-bry"] = {
"Beary",
1089116,
"qfa-mix",
"Mlym, Knda",
ancestors = "ml, tcy",
-- Knda translit in [[Module:scripts/data]]
-- Mlym translit in [[Module:scripts/data]]
}
m["dra-cen-pro"] = {
"Proto-Central Dravidian",
nil,
"dra-cen",
"Latn",
type = "reconstructed",
}
m["dra-mkn"] = {
"Middle Kannada",
128810572,
"dra-kan",
"Knda",
-- Knda translit in [[Module:scripts/data]]
}
m["dra-nor-pro"] = {
"Proto-North Dravidian",
124433593,
"dra-nor",
"Latn",
type = "reconstructed",
}
m["dra-okn"] = {
"Old Kannada",
15723156,
"dra-kan",
"Knda",
-- Knda translit in [[Module:scripts/data]]
}
m["dra-ote"] = {
"Old Telugu",
126720868,
"dra-tel",
"Telu",
translit = "te-translit",
}
m["dra-pro"] = {
"Proto-Dravidian",
1702853,
"dra",
"Latn",
type = "reconstructed",
}
m["dra-sdo-pro"] = {
"Proto-South Dravidian I",
104847952, -- Wikipedia's "Proto-South Dravidian" is Proto-South Dravidian I in this scheme.
"dra-sdo",
"Latn",
type = "reconstructed",
}
m["dra-sdt-pro"] = {
"Proto-South Dravidian II",
128885257,
"dra-sdt",
"Latn",
type = "reconstructed",
}
m["dra-sou-pro"] = {
"Proto-South Dravidian",
128886121,
"dra-sou",
"Latn",
type = "reconstructed",
}
m["egx-dem"] = {
"Demotic Egyptian",
36765,
"egx",
"Latn, Egyd, Polyt",
sort_key = {
Latn = {
remove_diacritics = "'%-%s",
from = {"ꜣ", "j", "e", "ꜥ", "y", "w", "b", "p", "f", "m", "n", "r", "l", "ḥ", "ḫ", "h̭", "ẖ", "h", "š", "s", "q", "k", "g", "ṱ", "ṯ", "t", "ḏ", "%.", "⸗"},
to = {p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12], p[13], p[15], p[16], p[16], p[17], p[14], p[19], p[18], p[20], p[21], p[22], p[23], p[24], p[23], p[25], p[26], p[26]}
},
},
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["dmn-pro"] = {
"Proto-Mande",
116773785,
"dmn",
"Latn",
type = "reconstructed",
}
m["dmn-mdw-pro"] = {
"Proto-Western Mande",
116773822,
"dmn-mdw",
"Latn",
type = "reconstructed",
}
m["dru-pro"] = {
"Proto-Rukai",
116773807,
"map",
"Latn",
type = "reconstructed",
}
m["ero-gsz"] = {
"Geshiza",
nil,
"ero",
"Latn",
}
m["ero-nya"] = {
"Nyagrong Minyag",
nil,
"ero",
"Latn",
}
m["ero-tau"] = {
"Stau",
nil,
"ero",
"Latn",
}
m["esx-esk-pro"] = {
"Proto-Eskimo",
7251842,
"esx-esk",
"Latn",
type = "reconstructed",
}
m["esx-ink"] = {
"Inuktun",
1671647,
"esx-inu",
"Latn",
}
m["esx-inq"] = {
"Inuinnaqtun",
28070,
"esx-inu",
"Latn",
}
m["esx-inu-pro"] = {
"Proto-Inuit",
60785588,
"esx-inu",
"Latn",
type = "reconstructed",
}
m["esx-pro"] = {
"Proto-Eskimo-Aleut",
7251843,
"esx",
"Latn",
type = "reconstructed",
}
m["esx-tut"] = {
"Tunumiisut",
15665389,
"esx-inu",
"Latn",
}
m["euq-pro"] = {
"Proto-Basque",
938011,
"euq",
"Latn",
type = "reconstructed",
}
m["gba-pro"] = {
"Proto-Gbaya",
nil,
"gba",
"Latn",
type = "reconstructed",
}
m["gem-pro"] = {
"Proto-Germanic",
669623,
"gem",
"Latn",
type = "reconstructed",
sort_key = "gem-pro-sortkey",
}
m["gme-bur"] = {
"Burgundian",
47625,
"gme",
"Latn",
}
m["gme-cgo"] = {
"Crimean Gothic",
36211,
"gme",
"Latn",
}
m["gmq-gut"] = {
"Gutnish",
1256646,
"gmq",
"Latn",
ancestors = "gmq-ogt",
}
m["gmq-jmk"] = {
"Jamtish",
35512,
"gmq-eas",
"Latn",
}
m["gmq-mno"] = {
"Middle Norwegian",
3417070,
"gmq-wes",
"Latn",
}
m["gmq-oda"] = {
"Old Danish",
12330003,
"gmq-eas",
"Latn, Runr",
strip_diacritics = {remove_diacritics = c.macron},
}
m["gmq-ogt"] = {
"Old Gutnish",
1133488,
"gmq",
"Latn, Runr",
ancestors = "non",
}
m["gmq-osw"] = {
"Old Swedish",
2417210,
"gmq-eas",
"Latn, Runr",
strip_diacritics = {remove_diacritics = c.macron},
}
m["gmq-pro"] = {
"Proto-Norse",
1671294,
"gmq",
"Runr",
translit = "Runr-translit",
}
m["gmq-scy"] = {
"Scanian",
768017,
"gmq-eas",
"Latn",
}
m["gmw-bgh"] = {
"Bergish",
329030,
"gmw-frk",
"Latn",
}
m["gmw-cfr"] = {
"Central Franconian",
572197,
"gmw-hgm",
"Latn",
ancestors = "gmh",
wikimedia_codes = "ksh",
}
m["gmw-ecg"] = {
"East Central German",
499344, -- subsumes Q699284, Q152965
"gmw-hgm",
"Latn",
ancestors = "gmh",
}
m["gmw-fin"] = {
"Fingallian",
3072588,
"gmw-ian",
"Latn",
}
m["gmw-gts"] = {
"Gottscheerish",
533109,
"gmw-hgm",
"Latn",
ancestors = "bar",
}
m["gmw-jdt"] = {
"Jersey Dutch",
1687911,
"gmw-frk",
"Latn",
ancestors = "nl",
}
m["gmw-msc"] = {
"Middle Scots",
3327000,
"gmw-ang",
"Latn",
ancestors = "enm-esc",
}
m["gmw-pro"] = {
"Proto-West Germanic",
78079021,
"gmw",
"Latn, Runr",
-- type = "reconstructed",
-- largely but not entirely reconstructed (like Proto-Norse); see April '24 BP, set back to reconstructed (?) if 'anti-asterisk' is added
sort_key = "gmw-pro-sortkey",
}
m["gmw-rfr"] = {
"Rhine Franconian",
707007,
"gmw-hgm",
"Latn",
ancestors = "gmh",
}
m["gmw-stm"] = {
"Sathmar Swabian",
2223059,
"gmw-hgm",
"Latn",
ancestors = "swg",
}
m["gmw-tsx"] = {
"Transylvanian Saxon",
260942,
"gmw-hgm",
"Latn",
ancestors = "gmw-cfr",
}
m["gmw-vog"] = {
"Volga German",
312574,
"gmw-hgm",
"Latn",
ancestors = "gmw-rfr",
}
m["gmw-zps"] = {
"Zipser German",
205548,
"gmw-hgm",
"Latn",
ancestors = "gmh",
}
m["gn-cls"] = {
"Classical Guarani",
17478065,
"gn",
"Latn",
}
m["grk-cal"] = {
"Calabrian Greek",
1146398,
"grk",
"Latn, Grek",
ancestors = "grk-ita",
translit = {
Grek = "el-translit",
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["grk-ita"] = {
"Italiot Greek",
19720507,
"grk",
"Latn, Grek",
ancestors = "gkm",
translit = {
Grek = "el-translit",
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["grk-mar"] = {
"Mariupol Greek",
4400023,
"grk",
"Cyrl, Latn, Grek",
ancestors = "gkm",
translit = {
Cyrl = "grk-mar-translit",
Grek = "grk-mar-translit",
},
override_translit = true,
strip_diacritics = {
Cyrl = {remove_diacritics = c.acute},
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["grk-pro"] = {
"Proto-Hellenic",
1231805,
"grk",
"Latn, Polyt",
type = "reconstructed",
sort_key = {Latn = {
from = {"ʰ", "ʷ"},
to = {"h", "w"},
remove_diacritics = c.grave .. c.acute .. c.macron .. c.breve .. c.caron
}},
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- NOTE: formerly no translit specified for Polyt; presumably an accidental omission; if not, set Polyt = false in
-- the translit section
}
m["hmn-pro"] = {
"Proto-Hmongic",
116773210,
"hmn",
"Latn",
type = "reconstructed",
}
m["hmx-mie-pro"] = {
"Proto-Mienic",
116773229,
"hmx-mie",
"Latn",
type = "reconstructed",
}
m["hmx-pro"] = {
"Proto-Hmong-Mien",
7251846,
"hmx",
"Latn",
type = "reconstructed",
}
m["hyx-pro"] = {
"Proto-Armenian",
3848498,
"hyx",
"Latn",
type = "reconstructed",
}
m["iir-nur-pro"] = {
"Proto-Nuristani",
116773248,
"iir-nur",
"Latn",
type = "reconstructed",
}
m["iir-pro"] = {
"Proto-Indo-Iranian",
966439,
"iir",
"Latn",
type = "reconstructed",
}
m["ijo-pro"] = {
"Proto-Ijoid",
116773766,
"ijo",
"Latn",
type = "reconstructed",
}
m["inc-apa"] = {
"Apabhramsa",
616419,
"inc-mid",
"Deva, Shrd, Sidd",
ancestors = "pra",
translit = {
Deva = "sa-translit",
-- Shrd translit in [[Module:scripts/data]]
-- Sidd translit in [[Module:scripts/data]]
},
}
m["inc-ash"] = {
"Ashokan Prakrit",
104854379,
"inc-mid",
"Brah, Khar",
ancestors = "sa",
translit = {
-- Brah translit in [[Module:scripts/data]]
Khar = "Khar-translit",
},
}
m["inc-dng-pro"] = {
"Proto-Dangari",
nil,
"inc-dng",
"Latn",
type = "reconstructed",
}
m["inc-kam"] = {
"Kamarupi Prakrit",
6356097,
"inc-bas",
"Brah, Sidd",
-- Brah, Sidd translit in [[Module:scripts/data]]
}
m["inc-kho"] = {
"Kholosi",
24952008,
"inc-snd",
"Latn",
}
m["inc-krd-pro"] = {
"Proto-Kamta",
128816843,
"inc-bas",
"Latn",
ancestors = "inc-kam",
type = "reconstructed",
}
m["inc-mas"] = {
"Middle Assamese",
128806836,
"inc-bas",
"as-Beng",
ancestors = "inc-oas",
translit = "inc-mas-translit",
}
m["inc-mbn"] = {
"Middle Bengali",
113559927,
"inc-bas",
"Beng",
ancestors = "inc-obn",
translit = "inc-mbn-translit",
}
m["inc-mgu"] = {
"Middle Gujarati",
24907429,
"inc-wes",
"Deva",
ancestors = "inc-ogu",
}
m["inc-mor"] = {
"Middle Odia",
128810882,
"inc-eas",
"Orya",
ancestors = "inc-oor",
}
m["inc-oas"] = {
"Early Assamese",
85758237,
"inc-bas",
"as-Beng",
ancestors = "inc-kam",
translit = "inc-oas-translit",
}
m["inc-oaw"] = {
"Old Awadhi",
nil,
"inc-hie",
"Deva, Kthi, ur-Arab",
strip_diacritics = {
from = {"هٔ", "ۂ"}, -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"
to = {"ہ", "ہ"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
translit = {
Deva = "sa-translit",
Kthi = "sa-Kthi-translit",
["ur-Arab"] = "inc-ohi-translit",
},
}
m["inc-obn"] = {
"Old Bengali",
113559926,
"inc-bas",
"Beng",
}
m["inc-ogu"] = {
"Old Gujarati",
24907427,
"inc-wes",
"Deva",
translit = "sa-translit",
}
m["inc-ohi"] = {
"Old Hindi",
48767781,
"inc-hiw",
"Deva, ur-Arab",
strip_diacritics = {
from = {"هٔ", "ۂ"}, -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"
to = {"ہ", "ہ"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
translit = {
Deva = "sa-translit",
["ur-Arab"] = "inc-ohi-translit",
},
}
m["inc-oor"] = {
"Old Odia",
128807801,
"inc-eas",
"Orya",
}
m["inc-opa"] = {
"Old Punjabi",
115270971,
"inc-pan",
"Guru, pa-Arab",
translit = {
Guru = "inc-opa-Guru-translit",
["pa-Arab"] = "pa-Arab-translit",
},
strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun},
}
m["inc-pro"] = {
"Proto-Indo-Aryan",
23808344,
"inc",
"Latn",
type = "reconstructed",
}
m["ine-ana-pro"] = {
"Proto-Anatolian",
7251833,
"ine-ana",
"Latn",
type = "reconstructed",
}
m["ine-bsl-pro"] = {
"Proto-Balto-Slavic",
1703347,
"ine-bsl",
"Latn",
type = "reconstructed",
sort_key = {
from = {"[áā]", "[éēḗ]", "[íī]", "[óōṓ]", "[úū]", c.acute, c.macron, "ˀ"},
to = {"a", "e", "i", "o", "u"}
},
}
m["ine-grp-pro"] = {
"Proto-Graeco-Phrygian",
nil,
"ine-grp",
"Latn",
type = "reconstructed",
}
m["ine-kal"] = {
"Kalašma",
122770439,
"ine-ana",
"Xsux",
}
m["ine-pae"] = {
"Paeonian",
2705672,
"ine",
"Polyt",
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["ine-pro"] = {
"Proto-Indo-European",
37178,
"ine",
"Latn",
type = "reconstructed",
sort_key = {
from = {"[áā]", "[éēḗ]", "[íī]", "[óōṓ]", "[úū]", "ĺ", "ḿ", "ń", "ŕ", "ǵ", "ḱ", "ʰ", "ʷ", "₁", "₂", "₃", c.ringbelow, c.acute, c.macron},
to = {"a", "e", "i", "o", "u", "l", "m", "n", "r", "g'", "k'", "¯h", "¯w", "1", "2", "3"}
},
}
m["ine-toc-pro"] = {
"Proto-Tocharian",
104841462,
"ine-toc",
"Latn",
type = "reconstructed",
}
m["xme-old"] = {
"Old Median",
36461,
"xme",
"Polyt, Latn",
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["xme-mid"] = {
"Middle Median",
12836150,
"xme",
"Latn",
}
m["xme-ker"] = {
"Kermanic",
129850,
"xme",
"fa-Arab, Latn, Hebr",
ancestors = "xme-mid",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["xme-taf"] = {
"Tafreshi",
nil,
"xme",
"fa-Arab, Latn",
ancestors = "xme-mid",
}
m["xme-ttc-pro"] = {
"Proto-Tatic",
122973870,
"xme-ttc",
"Latn",
ancestors = "xme-mid",
}
m["xme-kls"] = {
"Kalasuri",
nil,
"xme-ttc",
ancestors = "xme-ttc-nor",
}
m["xme-klt"] = {
"Kilit",
3612452,
"xme-ttc",
"Cyrl", -- and fa-Arab?
}
m["xme-ott"] = {
"Old Tati",
434697,
"xme-ttc",
"fa-Arab, Latn",
}
m["ira-kms-pro"] = {
"Proto-Komisenian",
116773777,
"ira-kms",
"Latn",
type = "reconstructed",
}
m["ira-mpr-pro"] = {
"Proto-Medo-Parthian",
116773227,
"ira-mpr",
"Latn",
type = "reconstructed",
}
m["ira-pat-pro"] = {
"Proto-Pathan",
116773255,
"ira-pat",
"Latn",
type = "reconstructed",
}
m["ira-pro"] = {
"Proto-Iranian",
4167865,
"ira",
"Latn",
type = "reconstructed",
}
m["ira-zgr-pro"] = {
"Proto-Zaza-Gorani",
116775031,
"ira-zgr",
"Latn",
type = "reconstructed",
}
m["xsc-pro"] = {
"Proto-Scythian",
116773273,
"xsc",
"Latn",
type = "reconstructed",
}
m["xsc-sar-pro"] = {
"Proto-Sarmatian",
116773249,
"xsc-sar",
"Latn",
type = "reconstructed",
}
m["xsc-skw-pro"] = {
"Proto-Saka-Wakhi",
116773267,
"xsc-skw",
"Latn",
type = "reconstructed",
}
m["xsc-sak-pro"] = {
"Proto-Saka",
116773264,
"xsc-sak",
"Latn",
type = "reconstructed",
}
m["ira-sym-pro"] = {
"Proto-Shughni-Yazghulami-Munji",
116773813,
"ira-sym",
"Latn",
type = "reconstructed",
}
m["ira-sgi-pro"] = {
"Proto-Sanglechi-Ishkashimi",
116773808,
"ira-sgi",
"Latn",
type = "reconstructed",
}
m["ira-mny-pro"] = {
"Proto-Munji-Yidgha",
116773792,
"ira-mny",
"Latn",
type = "reconstructed",
}
m["ira-shy-pro"] = {
"Proto-Shughni-Yazghulami",
116773812,
"ira-shy",
"Latn",
type = "reconstructed",
}
m["ira-shr-pro"] = {
"Proto-Shughni-Roshani",
116773811,
"ira-shr",
"Latn",
type = "reconstructed",
}
m["ira-sgc-pro"] = {
"Proto-Sogdic",
116773276,
"ira-sgc",
"Latn",
type = "reconstructed",
}
m["ira-wnj"] = {
"Vanji",
3398419,
"ira-shy",
"Latn",
}
m["iro-ere"] = {
"Erie",
5388365,
"iro-nor",
"Latn",
}
m["iro-min"] = {
"Mingo",
128531,
"iro-nor",
"Latn",
ietf_subtag = "i-mingo", -- grandfathered IETF tag
}
m["iro-nor-pro"] = {
"Proto-North Iroquoian",
116773242,
"iro-nor",
"Latn",
type = "reconstructed",
}
m["iro-pro"] = {
"Proto-Iroquoian",
7251852,
"iro",
"Latn",
type = "reconstructed",
}
m["itc-pro"] = {
"Proto-Italic",
17102720,
"itc",
"Latn",
type = "reconstructed",
}
m["itc-psa"] = {
"Pre-Samnite",
7239186,
"itc-sbl",
"Ital, Polyt, Latn",
-- Ital translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission)
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["jpx-hcj"] = {
"Hachijō",
5637049,
"jpx",
"Jpan",
ancestors = "ojp-eas",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["jpx-pro"] = {
"Proto-Japonic",
3924309,
"jpx",
"Latn",
type = "reconstructed",
}
m["jpx-ryu-pro"] = {
"Proto-Ryukyuan",
56349069,
"jpx-ryu",
"Latn",
type = "reconstructed",
}
m["kar-pro"] = {
"Proto-Karen",
85794783,
"kar",
"Latn",
type = "reconstructed",
}
m["kca-eas"] = {
"Eastern Khanty",
30304622,
"kca",
"Cyrl",
translit = "kca-translit",
override_translit = true,
-- TODO temporary until MediaWiki supports Unicode 16 (probably requires a PHP update from their side)
sort_key = { Cyrl = { from = {""}, to = {""} } },
}
m["kca-nor"] = {
"Northern Khanty",
30304527,
"kca",
"Cyrl",
translit = "kca-translit",
override_translit = true,
-- TODO temporary until MediaWiki supports Unicode 16 (probably requires a PHP update from their side)
sort_key = { Cyrl = { from = {""}, to = {""} } },
}
m["kca-pro"] = {
"Proto-Khanty",
127505171,
"kca",
"Latn",
type = "reconstructed",
}
m["kca-sou"] = {
"Southern Khanty",
30304618,
"kca",
"Cyrl",
translit = "kca-translit",
override_translit = true,
}
m["khi-kho-pro"] = {
"Proto-Khoe",
116773218,
"khi-kho",
"Latn",
type = "reconstructed",
}
m["khi-kun"] = {
"ǃKung",
32904,
"khi-kxa",
"Latn",
}
m["ko-ear"] = {
"Early Modern Korean",
756014,
"qfa-kor",
"Kore",
ancestors = "okm",
translit = "okm-translit",
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["kro-pro"] = {
"Proto-Kru",
116773778,
"kro",
"Latn",
type = "reconstructed",
}
m["ku-pro"] = {
"Proto-Kurdish",
116773221,
"ku",
"Latn",
type = "reconstructed",
}
m["map-ata-pro"] = {
"Proto-Atayalic",
116773151,
"map-ata",
"Latn",
type = "reconstructed",
}
m["map-bms"] = {
"Banyumasan",
33219,
"map",
"Latn, Java",
}
m["map-pro"] = {
"Proto-Austronesian",
49230,
"map",
"Latn",
type = "reconstructed",
}
m["mis-hkl"] = {
"Kelantan Peranakan Hokkien",
108794818,
"qfa-mix",
ancestors = "nan-hbl, sou, mfa",
}
m["mis-idn"] = {
"Idiom Neutral",
35847,
"art",
"Latn",
type = "appendix-constructed",
}
m["mis-isa"] = {
"Isaurian",
16956868,
nil,
-- "Xsux, Hluw, Latn",
}
m["mis-jie"] = {
"Jie",
124424186,
nil,
"Hani",
sort_key = "Hani-sortkey",
}
m["mis-jzh"] = {
"Jizhao",
45242758,
"qfa-bej",
"Latn",
}
m["mis-kas"] = {
"Kassite",
35612,
nil,
"Xsux",
}
m["mis-mmd"] = {
"Mimi of Decorse",
6862206,
nil,
"Latn",
}
m["mis-mmn"] = {
"Mimi of Nachtigal",
6862207,
nil,
"Latn",
}
m["mis-phi"] = {
"Philistine",
2230924,
nil,
"Phnx",
-- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["mis-rou"] = {
"Rouran",
48816637,
"qfa-xgx",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["mis-tdl"] = {
"Turdulian",
133176492,
}
m["mis-tdt"] = {
"Turdetanian",
133176461,
}
m["mis-tnw"] = {
"Tangwang",
7683179,
"qfa-mix",
"Latn",
ancestors = "cmn, sce",
}
m["mis-tuh"] = {
"Tuyuhun",
48816625,
"qfa-xgx",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["mis-tuo"] = {
"Tuoba",
48816629,
"qfa-xgx",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["mis-wuh"] = {
"Wuhuan",
118976867,
"qfa-xgx",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["mis-xbi"] = {
"Xianbei",
4448647,
"qfa-xgx",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["mis-xnu"] = {
"Xiongnu",
10901674,
nil,
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["mjg-mgl"] = {
"Mongghul",
53765528,
"mjg",
"Latn", -- also Mong, Cyrl ?
}
m["mjg-mgr"] = {
"Mangghuer",
56285392,
"mjg",
"Latn", -- also Mong, Cyrl ?
}
m["mkh-asl-pro"] = {
"Proto-Aslian",
55630680,
"mkh-asl",
"Latn",
type = "reconstructed",
}
m["mkh-ban-pro"] = {
"Proto-Bahnaric",
116773189,
"mkh-ban",
"Latn",
type = "reconstructed",
}
m["mkh-kat-pro"] = {
"Proto-Katuic",
116773772,
"mkh-kat",
"Latn",
type = "reconstructed",
}
m["mkh-khm-pro"] = {
"Proto-Khmuic",
116773774,
"mkh-khm",
"Latn",
type = "reconstructed",
}
m["mkh-kmr-pro"] = {
"Proto-Khmeric",
55630684,
"mkh-kmr",
"Latn",
type = "reconstructed",
}
m["mkh-mmn"] = {
"Middle Mon",
121337926,
"mkh-mnc",
"Latn, Mymr", --and also Pallava
ancestors = "omx",
}
m["mkh-mnc-pro"] = {
"Proto-Monic",
116773231,
"mkh-mnc",
"Latn",
type = "reconstructed",
}
m["mkh-mvi"] = {
"Middle Vietnamese",
9199,
"mkh-vie",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["mkh-pal-pro"] = {
"Proto-Palaungic",
104847372,
"mkh-pal",
"Latn",
type = "reconstructed",
}
m["mkh-pea-pro"] = {
"Proto-Pearic",
116773804,
"mkh-pea",
"Latn",
type = "reconstructed",
}
m["mkh-pkn-pro"] = {
"Proto-Pakanic",
116773803,
"mkh-pkn",
"Latn",
type = "reconstructed",
}
m["mkh-pro"] = { --This will be merged into 2015 aav-pro.
"Proto-Mon-Khmer",
7251859,
"mkh",
"Latn",
type = "reconstructed",
}
m["mnw-tha"] = { -- To be removed.
"Thai Mon",
nil,
"mkh-mnc",
"Mymr, Thai",
ancestors = "mkh-mmn",
sort_key = {
from = {"[%p]", "ျ", "ြ", "ွ", "ှ", "ၞ", "ၟ", "ၠ", "ၚ", "ဿ", "[็-๎]", "([เแโใไ])([ก-ฮ])ฺ?"},
to = {"", "္ယ", "္ရ", "္ဝ", "္ဟ", "္န", "္မ", "္လ", "င", "သ္သ", "", "%2%1"}
},
}
m["mkh-vie-pro"] = {
"Proto-Vietic",
109432616,
"mkh-vie",
"Latn",
type = "reconstructed",
}
m["mns-cen"] = {
"Central Mansi",
128810384,
"mns",
"Cyrl",
translit = "mns-translit",
override_translit = true,
}
m["mns-nor"] = {
"Northern Mansi",
30304537,
"mns",
"Cyrl",
translit = "mns-translit",
override_translit = true,
}
m["mns-pro"] = {
"Proto-Mansi",
128883093,
"mns",
"Latn",
type = "reconstructed",
}
m["mns-sou"] = {
"Southern Mansi",
30304629,
"mns",
"Cyrl",
translit = "mns-translit",
override_translit = true,
}
m["mun-pro"] = {
"Proto-Munda",
105102373,
"mun",
"Latn",
type = "reconstructed",
}
m["myn-chl"] = { -- the stage after ''emy''
"Ch'olti'",
873995,
"myn",
"Latn",
}
m["myn-pro"] = {
"Proto-Mayan",
3321532,
"myn",
"Latn",
type = "reconstructed",
}
m["nai-ala"] = {
"Alazapa",
128810233,
nil,
"Latn",
}
m["nai-bay"] = {
"Bayogoula",
1563704,
nil,
"Latn",
}
m["nai-cal"] = {
"Calusa",
51782,
nil,
"Latn",
}
m["nai-chi"] = {
"Chiquimulilla",
25339627,
"nai-xin",
"Latn",
}
m["nai-chu-pro"] = {
"Proto-Chumash",
116773736,
"nai-chu",
"Latn",
type = "reconstructed",
}
m["nai-cig"] = {
"Ciguayo",
20741700,
nil,
"Latn",
}
m["nai-ckn-pro"] = {
"Proto-Chinookan",
116773735,
"nai-ckn",
"Latn",
type = "reconstructed",
}
m["nai-guz"] = {
"Guazacapán",
19572028,
"nai-xin",
"Latn",
}
m["nai-hit"] = {
"Hitchiti",
1542882,
"nai-mus",
"Latn",
}
m["nai-ipa"] = {
"Ipai",
3027474,
"nai-yuc",
"Latn",
}
m["nai-jtp"] = {
"Jutiapa",
nil,
"nai-xin",
"Latn",
}
m["nai-jum"] = {
"Jumaytepeque",
25339626,
"nai-xin",
"Latn",
}
m["nai-kat"] = {
"Kathlamet",
6376639,
"nai-ckn",
"Latn",
}
m["nai-klp-pro"] = {
"Proto-Kalapuyan",
116773771,
"nai-klp",
"Latn",
type = "reconstructed",
}
m["nai-knm"] = {
"Konomihu",
3198734,
"nai-shs",
"Latn",
}
m["nai-kum"] = {
"Kumeyaay",
4910139,
"nai-yuc",
"Latn",
}
m["nai-mac"] = {
"Macoris",
21070851,
nil,
"Latn",
}
m["nai-mdu-pro"] = {
"Proto-Maidun",
116773784,
"nai-mdu",
"Latn",
type = "reconstructed",
}
m["nai-miz-pro"] = {
"Proto-Mixe-Zoque",
7251858,
"nai-miz",
"Latn",
type = "reconstructed",
}
m["nai-mus-pro"] = {
"Proto-Muskogean",
116775368,
"nai-mus",
"Latn",
type = "reconstructed",
}
m["nai-nao"] = {
"Naolan",
6964594,
nil,
"Latn",
}
m["nai-nrs"] = {
"New River Shasta",
7011254,
"nai-shs",
"Latn",
}
m["nai-okw"] = {
"Okwanuchu",
3350126,
"nai-shs",
"Latn",
}
m["nai-per"] = {
"Pericú",
3375369,
nil,
"Latn",
}
m["nai-pic"] = {
"Picuris",
7191257,
"nai-kta",
"Latn",
}
m["nai-plp-pro"] = {
"Proto-Plateau Penutian",
116773806,
"nai-plp",
"Latn",
type = "reconstructed",
}
m["nai-pom-pro"] = {
"Proto-Pomo",
116773262,
"nai-pom",
"Latn",
type = "reconstructed",
}
m["nai-qng"] = {
"Quinigua",
36360,
nil,
"Latn",
}
m["nai-sca-pro"] = { -- NB 'sio-pro' "Proto-Siouan" which is Proto-Western Siouan
"Proto-Siouan-Catawban",
116773275,
"nai-sca",
"Latn",
type = "reconstructed",
}
m["nai-sin"] = {
"Sinacantán",
24190249,
"nai-xin",
"Latn",
}
m["nai-sln"] = {
"Salvadoran Lenca",
3229434,
"nai-len",
"Latn",
}
m["nai-spt"] = {
"Sahaptin",
3833015,
"nai-shp",
"Latn",
}
m["nai-tap"] = {
"Tapachultec",
7684401,
"nai-miz",
"Latn",
}
m["nai-taw"] = {
"Tawasa",
7689233,
nil,
"Latn",
}
m["nai-teq"] = {
"Tequistlatec",
2964454,
"nai-tqn",
"Latn",
}
m["nai-tip"] = {
"Tipai",
3027471,
"nai-yuc",
"Latn",
}
m["nai-tot-pro"] = {
"Proto-Totozoquean",
116773285,
"nai-tot",
"Latn",
type = "reconstructed",
}
m["nai-tsi-pro"] = {
"Proto-Tsimshianic",
nil,
"nai-tsi",
"Latn",
type = "reconstructed",
}
m["nai-utn-pro"] = {
"Proto-Utian",
116773290,
"nai-utn",
"Latn",
type = "reconstructed",
}
m["nai-wai"] = {
"Waikuri",
3118702,
nil,
"Latn",
}
m["nai-wji"] = {
"Western Jicaque",
3178610,
"nai-jcq",
"Latn",
}
m["nai-yup"] = {
"Yupiltepeque",
25339628,
"nai-xin",
"Latn",
}
m["nan-dat"] = {
"Datian Min",
19855572,
"zhx-nan",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["nan-hbl"] = {
"Hokkien",
1624231,
"zhx-nan",
"Hants, Latn, Bopo, Kana",
wikimedia_codes = "zh-min-nan",
generate_forms = "zh-generateforms",
sort_key = {
Hani = "Hani-sortkey",
Kana = "Kana-sortkey"
},
}
m["nan-hlh"] = {
"Hailufeng Min",
120755728,
"zhx-nan",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["nan-lnx"] = {
"Longyan Min",
6674568,
"zhx-nan",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["nan-tws"] = {
"Teochew",
36759,
"zhx-nan",
"Hants",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["nan-zhe"] = {
"Zhenan Min",
3846710,
"zhx-nan",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["nan-zsh"] = {
"Sanxiang Min",
7420769,
"zhx-nan",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["ngf-bin-pro"] = {
"Proto-Binanderean",
137881672,
"ngf-bin",
"Latn",
type = "reconstructed",
}
m["ngf-pro"] = {
"Proto-Trans-New Guinea",
85794785,
"ngf",
"Latn",
type = "reconstructed",
}
m["nic-bco-pro"] = {
"Proto-Benue-Congo",
116773194,
"nic-bco",
"Latn",
type = "reconstructed",
}
m["nic-bod-pro"] = {
"Proto-Bantoid",
116773190,
"nic-bod",
"Latn",
type = "reconstructed",
}
m["nic-eov-pro"] = {
"Proto-Eastern Oti-Volta",
116773753,
"nic-eov",
"Latn",
type = "reconstructed",
}
m["nic-gns-pro"] = {
"Proto-Gurunsi",
116773759,
"nic-gns",
"Latn",
type = "reconstructed",
}
m["nic-grf-pro"] = {
"Proto-Grassfields",
116773755,
"nic-grf",
"Latn",
type = "reconstructed",
}
m["nic-gur-pro"] = {
"Proto-Gur",
116773758,
"nic-gur",
"Latn",
type = "reconstructed",
}
m["nic-jkn-pro"] = {
"Proto-Jukunoid",
116773769,
"nic-jkn",
"Latn",
type = "reconstructed",
}
m["nic-lcr-pro"] = {
"Proto-Lower Cross River",
116773782,
"nic-lcr",
"Latn",
type = "reconstructed",
}
m["nic-ogo-pro"] = {
"Proto-Ogoni",
116773799,
"nic-ogo",
"Latn",
type = "reconstructed",
}
m["nic-ovo-pro"] = {
"Proto-Oti-Volta",
116773802,
"nic-ovo",
"Latn",
type = "reconstructed",
}
m["nic-plt-pro"] = {
"Proto-Plateau",
116773805,
"nic-plt",
"Latn",
type = "reconstructed",
}
m["nic-pro"] = {
"Proto-Niger-Congo",
108000748,
"nic",
"Latn",
type = "reconstructed",
}
m["nic-ubg-pro"] = {
"Proto-Ubangian",
116773818,
"nic-ubg",
"Latn",
type = "reconstructed",
}
m["nic-ucr-pro"] = {
"Proto-Upper Cross River",
116773819,
"nic-ucr",
"Latn",
type = "reconstructed",
}
m["nic-vco-pro"] = {
"Proto-Volta-Congo",
116773293,
"nic-vco",
"Latn",
type = "reconstructed",
}
m["njo-jgl"] = {
"Chungli Ao",
55607615,
"njo",
"Latn",
}
m["njo-mng"] = {
"Mongsen Ao",
85383221,
"njo",
"Latn",
}
m["nub-har"] = {
"Haraza",
19572059,
"nub",
"Arab, Latn",
}
m["nub-pro"] = {
"Proto-Nubian",
116773246,
"nub",
"Latn",
type = "reconstructed",
}
m["omq-cha-pro"] = {
"Proto-Chatino",
116773202,
"omq-cha",
"Latn",
type = "reconstructed",
}
m["omq-maz-pro"] = {
"Proto-Mazatec",
116773790,
"omq-maz",
"Latn",
type = "reconstructed",
}
m["omq-mix-pro"] = {
"Proto-Mixtecan",
21573423,
"omq-mix",
"Latn",
type = "reconstructed",
}
m["omq-mxt-pro"] = {
"Proto-Mixtec",
21573424,
"omq-mxt",
"Latn",
type = "reconstructed",
}
m["omq-otp-pro"] = {
"Proto-Oto-Pamean",
116773251,
"omq-otp",
"Latn",
type = "reconstructed",
}
m["omq-pro"] = {
"Proto-Oto-Manguean",
33669,
"omq",
"Latn",
type = "reconstructed",
}
m["omq-sjq"] = {
"San Juan Quiahije Chatino",
138330751,
"omq-cha",
"Latn",
}
m["omq-tel"] = {
"Teposcolula Mixtec",
nil,
"omq-mxt",
"Latn",
}
m["omq-teo"] = {
"Teojomulco Chatino",
25340451,
"omq-cha",
"Latn",
}
m["omq-tri-pro"] = {
"Proto-Triqui",
116773817,
"omq-tri",
"Latn",
type = "reconstructed",
}
m["omq-zap-pro"] = {
"Proto-Zapotecan",
116773297,
"omq-zap",
"Latn",
type = "reconstructed",
}
m["omq-zpc-pro"] = {
"Proto-Zapotec",
116773296,
"omq-zpc",
"Latn",
type = "reconstructed",
}
m["omv-aro-pro"] = {
"Proto-Aroid",
116773721,
"omv-aro",
"Latn",
type = "reconstructed",
}
m["omv-diz-pro"] = {
"Proto-Dizoid",
116773750,
"omv-diz",
"Latn",
type = "reconstructed",
}
m["omv-pro"] = {
"Proto-Omotic",
116773800,
"omv",
"Latn",
type = "reconstructed",
}
m["oto-otm-pro"] = {
"Proto-Otomi",
5908710,
"oto-otm",
"Latn",
type = "reconstructed",
}
m["oto-pro"] = {
"Proto-Otomian",
116773252,
"oto",
"Latn",
type = "reconstructed",
}
m["paa-kmn"] = {
"Kómnzo",
18344310,
"paa-wko",
"Latn",
}
m["paa-kwn"] = {
"Kuwani",
6449056,
"qfa-unc", -- poorly attested, possibly the same as or related to Kalabra
"Latn",
}
m["paa-lei"] = {
"Leitre",
85776228,
"paa-isk",
}
m["paa-nha-pro"] = {
"Proto-North Halmahera",
116773241,
"paa-nha",
"Latn",
type = "reconstructed"
}
m["paa-nun"] = {
"Nungon",
128807788,
"ngf-ynu",
"Latn",
}
m["phi-din"] = {
"Dinapigue Agta",
16945774,
"phi",
"Latn",
}
m["phi-kal-pro"] = {
"Proto-Kalamian",
116773213,
"phi-kal",
"Latn",
type = "reconstructed",
}
m["phi-nag"] = {
"Nagtipunan Agta",
16966111,
"phi",
"Latn",
}
m["phi-pro"] = {
"Proto-Philippine",
18204898,
"phi",
"Latn",
type = "reconstructed",
}
m["poz-abi"] = {
"Abai",
19570729,
"poz-san",
"Latn",
}
m["poz-bal"] = {
"Baliledo",
4850912,
"poz",
"Latn",
}
m["poz-btk-pro"] = {
"Proto-Bungku-Tolaki",
116773724,
"poz-btk",
"Latn",
type = "reconstructed",
}
m["poz-cet-pro"] = {
"Proto-Central-Eastern Malayo-Polynesian",
2269883,
"poz-cet",
"Latn",
type = "reconstructed",
}
m["poz-hce-pro"] = {
"Proto-Halmahera-Cenderawasih",
116773209,
"poz-hce",
"Latn",
type = "reconstructed",
}
m["poz-lgx-pro"] = {
"Proto-Lampungic",
116773222,
"poz-lgx",
"Latn",
type = "reconstructed",
}
m["poz-mcm-pro"] = {
"Proto-Malayo-Chamic",
116773225,
"poz-mcm",
"Latn",
type = "reconstructed",
}
m["poz-mic-pro"] = {
"Proto-Micronesian",
111939079,
"poz-mic",
"Latn",
type = "reconstructed",
}
m["poz-mly-pro"] = {
"Proto-Malayic",
98057728,
"poz-mly",
"Latn",
type = "reconstructed",
}
m["poz-msa-pro"] = {
"Proto-Malayo-Sumbawan",
116773226,
"poz-msa",
"Latn",
type = "reconstructed",
}
m["poz-oce-pro"] = {
"Proto-Oceanic",
141741,
"poz-oce",
"Latn",
type = "reconstructed",
}
m["poz-pep-pro"] = {
"Proto-Eastern Polynesian",
113988745,
"poz-pep",
"Latn",
type = "reconstructed",
}
m["poz-pnp-pro"] = {
"Proto-Nuclear Polynesian",
113988746,
"poz-pnp",
"Latn",
type = "reconstructed",
}
m["poz-pol-pro"] = {
"Proto-Polynesian",
1658709,
"poz-pol",
"Latn",
type = "reconstructed",
}
m["poz-pro"] = {
"Proto-Malayo-Polynesian",
3832960,
"poz",
"Latn",
type = "reconstructed",
}
m["poz-sml"] = {
"Sarawak Malay",
4251702,
"poz-mly",
"Latn, ms-Arab",
}
m["poz-ssw-pro"] = {
"Proto-South Sulawesi",
116773279,
"poz-ssw",
"Latn",
type = "reconstructed",
}
m["poz-swa-pro"] = {
"Proto-North Sarawak",
116773243,
"poz-swa",
"Latn",
type = "reconstructed",
}
m["poz-ter"] = {
"Terengganu Malay",
4207412,
"poz-mly",
"Latn, ms-Arab",
}
m["pqe-pro"] = {
"Proto-Eastern Malayo-Polynesian",
2269883,
"pqe",
"Latn",
type = "reconstructed",
}
m["pra-niy"] = {
"Niya Prakrit",
11991601,
"inc-mid",
"Khar",
ancestors = "inc-ash",
translit = "Khar-translit",
}
m["qfa-adm-pro"] = {
"Proto-Great Andamanese",
116773756,
"qfa-adm",
"Latn",
type = "reconstructed",
}
m["qfa-bet-pro"] = {
"Proto-Be-Tai",
116773193,
"qfa-bet",
"Latn",
type = "reconstructed",
}
m["qfa-cka-pro"] = {
"Proto-Chukotko-Kamchatkan",
7251837,
"qfa-cka",
"Latn",
type = "reconstructed",
}
m["qfa-hur-pro"] = {
"Proto-Hurro-Urartian",
116773211,
"qfa-hur",
"Latn",
type = "reconstructed",
}
m["qfa-kad-pro"] = {
"Proto-Kadu",
116773770,
"qfa-kad",
"Latn",
type = "reconstructed",
}
m["qfa-kms-pro"] = {
"Proto-Kam-Sui",
55630682,
"qfa-kms",
"Latn",
type = "reconstructed",
}
m["qfa-kor-pro"] = {
"Proto-Koreanic",
467883,
"qfa-kor",
"Latn",
type = "reconstructed",
}
m["qfa-kra-pro"] = {
"Proto-Kra",
7251854,
"qfa-kra",
"Latn",
type = "reconstructed",
}
m["qfa-lic-pro"] = {
"Proto-Hlai",
7251845,
"qfa-lic",
"Latn",
type = "reconstructed",
}
m["qfa-onb-pro"] = {
"Proto-Be",
116773192,
"qfa-onb",
"Latn",
type = "reconstructed",
}
m["qfa-ong-pro"] = {
"Proto-Ongan",
116773801,
"qfa-ong",
"Latn",
type = "reconstructed",
}
m["qfa-tak-pro"] = {
"Proto-Kra-Dai",
104901616,
"qfa-tak",
"Latn",
type = "reconstructed",
}
m["qfa-yen-pro"] = {
"Proto-Yeniseian",
27639,
"qfa-yen",
"Latn",
type = "reconstructed",
}
m["qfa-yuk-pro"] = {
"Proto-Yukaghir",
116773294,
"qfa-yuk",
"Latn",
type = "reconstructed",
}
m["qwe-kch"] = {
"Kichwa",
1740805,
"qwe",
"Latn",
ancestors = "qu",
}
m["qwe-pro"] = {
"Proto-Quechuan",
5575757,
"qwe",
"Latn",
type = "reconstructed",
}
m["roa-ang"] = {
"Angevin",
56782,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-bbn"] = {
"Bourbonnais-Berrichon",
2899128,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-brg"] = {
"Bourguignon",
508332,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-can"] = {
"Cantabrian",
917021,
"roa-asl",
"Latn",
}
m["roa-cha"] = {
"Champenois",
430018,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-fcm"] = {
"Franc-Comtois",
510561,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-gal"] = {
"Gallo",
37300,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-gib"] = {
"Gallo-Italic of Basilicata",
3094838,
"roa-git",
ancestors = "pms-old",
"Latn",
}
m["roa-gis"] = {
"Gallo-Italic of Sicily",
2629019,
"roa-git",
"Latn",
ancestors = "pms-old",
}
m["roa-leo"] = {
"Leonese",
34108,
"roa-asl",
"Latn",
}
m["roa-lor"] = {
"Lorrain",
671198,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-oca"] = {
"Old Catalan",
15478520,
"roa-ocr",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla .. "·"},
}
m["roa-ole"] = {
"Old Leonese",
125977465,
"roa-asl",
"Latn",
}
m["roa-ona"] = {
"Old Navarro-Aragonese",
2736184,
"roa-nar",
"Latn",
}
m["roa-opt"] = {
"Old Galician-Portuguese",
1072111,
"roa-gap",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
m["roa-orl"] = {
"Orléanais",
28497058,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-poi"] = {
"Poitevin-Saintongeais",
514123,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["roa-tar"] = {
"Tarantino",
695526,
"roa-itr",
"Latn",
wikimedia_codes = "roa-tara",
}
m["sai-all"] = {
"Allentiac",
19570789,
"sai-hrp",
"Latn",
}
m["sai-and"] = { -- not to be confused with 'cbc' or 'ano'
"Andoquero",
16828359,
"sai-wit",
"Latn",
}
m["sai-ayo"] = {
"Ayomán",
16937754,
"sai-jir",
"Latn",
}
m["sai-bae"] = {
"Baenan",
3401998,
"qfa-unc", -- extinct, poorly attested; only known through 9 words
"Latn",
}
m["sai-bag"] = {
"Bagua",
5390321,
"qfa-unc", -- extinct, poorly attested; possibly Cariban
"Latn",
}
m["sai-bet"] = {
"Betoi",
926551,
"qfa-iso",
"Latn",
}
m["sai-bor-pro"] = {
"Proto-Boran",
nil,
"sai-bor",
"Latn",
}
m["sai-cac"] = {
"Cacán",
945482,
"qfa-unc", -- extinct, poorly attested; no consensus on classification
"Latn",
}
m["sai-caq"] = {
"Caranqui",
2937753,
"sai-bar",
"Latn",
}
m["sai-car-pro"] = {
"Proto-Cariban",
116773196,
"sai-car",
"Latn",
type = "reconstructed",
}
m["sai-cat"] = {
"Catacao",
5051136,
"sai-ctc",
"Latn",
}
m["sai-cer-pro"] = {
"Proto-Cerrado",
116773200,
"sai-cer",
"Latn",
type = "reconstructed",
}
m["sai-chi"] = {
"Chirino",
5390321,
"qfa-unc", -- extinct, only four words known; possibly related to Candoshi-Shapra (cbu)
"Latn",
}
m["sai-chn"] = {
"Chaná",
5072718,
"sai-crn",
"Latn",
}
m["sai-chp"] = {
"Chapacura",
5072884,
"sai-cpc",
"Latn",
}
m["sai-chr"] = {
"Charrua",
5086680,
"sai-crn",
"Latn",
}
m["sai-chu"] = {
"Churuya",
5118339,
"sai-guh",
"Latn",
}
m["sai-cje-pro"] = {
"Proto-Central Jê",
116773198,
"sai-cje",
"Latn",
type = "reconstructed",
}
m["sai-cmg"] = {
"Comechingon",
6644203,
"qfa-unc", -- extinct, poorly attested; no consensus on classification
"Latn",
}
m["sai-cno"] = {
"Chono",
5104704,
"qfa-unc", -- extinct, poorly attested; no consensus on classification, possibly spurious
"Latn",
}
m["sai-cnr"] = {
"Cañari",
5055572,
"qfa-unc", -- extinct, poorly attested; possibly Chimuan or Barbacoan
"Latn",
}
m["sai-coe"] = {
"Coeruna",
6425639,
"sai-wit",
"Latn",
}
m["sai-col"] = {
"Colán",
5141893,
"sai-ctc",
"Latn",
}
m["sai-cop"] = {
"Copallén",
5390321,
"qfa-unc", -- extinct, only four words attested; possibly Cholonan
"Latn",
}
m["sai-crd"] = {
"Coroado Puri",
24191321,
"sai-mje",
"Latn",
}
m["sai-ctq"] = {
"Catuquinaru",
16858455,
"qfa-unc", -- extinct, poorly attested; vocabulary does not resemble other languages
"Latn",
}
m["sai-cul"] = {
"Culli",
2879660,
"qfa-unc", -- extinct, poorly attested; often considered an isolate
"Latn",
}
m["sai-cva"] = {
"Cueva",
5192644,
"qfa-unc", -- extinct, poorly attested; possibly Chocoan
"Latn",
}
m["sai-esm"] = {
"Esmeralda",
3058083,
"qfa-unc", -- extinct, poorly attested; possibly related to Yaruro
"Latn",
}
m["sai-ewa"] = {
"Ewarhuyana",
16898104,
nil,
"Latn",
}
m["sai-gam"] = {
"Gamela",
5403661,
"qfa-unc", -- extinct, poorly attested; possibly an isolate
"Latn",
}
m["sai-gay"] = {
"Gayón",
5528902,
"sai-jir",
"Latn",
}
m["sai-gmo"] = {
"Guamo",
5613495,
"qfa-unc", -- extinct; "Kaufman (1990) finds a connection with the Chapacuran languages convincing." [Wikipedia] Considered an isolate by Campbell (2024).
"Latn",
}
m["sai-gua"] = {
"Guachí",
5613172,
"sai-guc",
"Latn",
}
m["sai-gue"] = {
"Güenoa",
5626799,
"sai-crn",
"Latn",
}
m["sai-hau"] = {
"Haush",
3128376,
"sai-cho",
"Latn",
}
m["sai-jee-pro"] = {
"Proto-Jê",
116773212,
"sai-jee",
"Latn",
type = "reconstructed",
}
m["sai-jko"] = {
"Jeikó",
6176527,
"sai-mje",
"Latn",
}
m["sai-jrj"] = {
"Jirajara",
6202966,
"sai-jir",
"Latn",
}
m["sai-kat"] = { -- contrast xoo, kzw, sai-xoc
"Katembri",
6375925,
"qfa-unc", -- extinct, poorly attested; "Kaufman (1990) has linked it with the nearly extinct Taruma, although this has not been accepted by other scholars." [Wikipedia]
"Latn",
}
m["sai-mal"] = {
"Malalí",
6741212,
"sai-mje", -- considered the most divergent Maxakalían language (a subdivision of Macro-Jê), for which we have no entry
"Latn",
}
m["sai-mar"] = {
"Maratino",
6755055,
"qfa-unc", -- extinct, poorly attested; possibly Uto-Aztecan
"Latn",
}
m["sai-mat"] = {
"Matanawi",
6786047,
"qfa-unc", -- extinct; either an isolate or distantly related to the Muran languages; Campbell (2024) lists it as an isolate, Glottolog gives it as unclassified
"Latn",
}
m["sai-mcn"] = {
"Mocana",
3402048,
"qfa-unc", -- extinct, poorly attested; given as part of the Malibu languages (geographic grouping; not a clade)
"Latn",
}
m["sai-men"] = {
"Menien",
16890110,
"sai-mje",
"Latn",
}
m["sai-mil"] = {
"Millcayac",
19573012,
"sai-hrp",
"Latn",
}
m["sai-mlb"] = {
"Malibu",
134374036,
"qfa-unc", -- extinct, poorly attested; given as part of the Malibu languages (geographic grouping; not a clade)
"Latn",
}
m["sai-msk"] = {
"Masakará",
6782426,
"sai-mje",
"Latn",
}
m["sai-muc"] = {
"Mucuchí",
6931290,
nil, -- generally considered Timotean, for which we have no entry
"Latn",
}
m["sai-mue"] = {
"Muellama",
16886936,
"sai-bar",
"Latn",
}
m["sai-muz"] = {
"Muzo",
6644203,
"qfa-unc", -- extinct language of Colombia, poorly attested; may be Pijao (Cariban)
"Latn",
}
m["sai-mys"] = {
"Maynas",
16919393,
"sai-cah", -- per Campbell (2024); formerly considered unclassified
"Latn",
}
m["sai-nat"] = {
"Natú",
9006749,
"qfa-unc", -- extinct, poorly attested; "only Greenberg dares to classify [it]".[Wikipedia, quoting Moseley, Christopher; Asher, R. E.; Tait, Mary (1994), Atlas of the world's languages]
"Latn",
}
m["sai-nje-pro"] = {
"Proto-Northern Jê",
116773245,
"sai-nje",
"Latn",
type = "reconstructed",
}
m["sai-opo"] = {
"Opón",
7099152,
"sai-car",
"Latn",
}
m["sai-oto"] = {
"Otomaco",
16879234,
"sai-otm",
"Latn",
}
m["sai-pal"] = {
"Palta",
3042978,
"qfa-unc", -- extinct, unclassified; possibly Chicham
"Latn",
}
m["sai-pam"] = {
"Pamigua",
5908689,
"sai-tin",
"Latn",
}
m["sai-par"] = {
"Paratió",
16890038,
"qfa-unc", -- extinct, poorly attested; possibly Xukuruan
"Latn",
}
m["sai-peb"] = {
"Peba",
3373890,
"sai-pey",
"Latn",
}
m["sai-pnz"] = {
"Panzaleo",
3123275,
"qfa-unc", -- extinct, unclassified; possibly Paezan
"Latn",
}
m["sai-prh"] = {
"Puruhá",
3410994,
"qfa-unc", -- extinct, poorly attested; possibly in a famil with Cañari
"Latn",
}
m["sai-ptg"] = {
"Patagón",
128807870,
"sai-tar", -- extinct, only known from 4 words, which suggest Cariban lineage (Campbell 2024)
"Latn",
}
m["sai-pur"] = {
"Purukotó",
7261622,
"sai-pem",
"Latn",
}
m["sai-pyg"] = {
"Payaguá",
7156643,
"sai-guc",
"Latn",
}
m["sai-pyk"] = {
"Pykobjê",
98113977,
"sai-nje",
"Latn",
}
m["sai-qmb"] = {
"Quimbaya",
7272043,
"qfa-unc", -- extinct, might not exist; few known words
"Latn",
}
m["sai-qtm"] = {
"Quitemo",
7272651,
"sai-cpc",
"Latn",
}
m["sai-rab"] = {
"Rabona",
6644203,
"qfa-unc", -- extinct, poorly attested, mostly plant names; possibly Candoshi-Shapra
"Latn",
}
m["sai-ram"] = {
"Ramanos",
16902824,
"qfa-unc", -- extinct, poorly attested, possibly an isolate; per Glottolog: "the minuscule wordlist ... shows no convincing resemblances to surrounding languages"
"Latn",
}
m["sai-sac"] = {
"Sácata",
5390321,
"qfa-unc", -- extinct, only 3 words known; possibly Candoshí or Arawakan
"Latn",
}
m["sai-san"] = {
"Sanaviron",
16895999,
"qfa-unc", -- extinct, unclassified; no consensus on classification
"Latn",
}
m["sai-sap"] = {
"Sapará",
7420922,
"sai-car",
"Latn",
}
m["sai-sec"] = {
"Sechura",
7442912,
"qfa-unc", -- extinct, poorly attested; possibly Catacaoan
"Latn",
}
m["sai-sin"] = {
"Sinúfana",
7525275,
"qfa-unc", -- moribund, poorly attested; possibly Chocoan
"Latn",
}
m["sai-sje-pro"] = {
"Proto-Southern Jê",
116773814,
"sai-sje",
"Latn",
type = "reconstructed",
}
m["sai-tab"] = {
"Tabancale",
5390321,
"qfa-unc", -- extinct, only 5 words known; no obvious connections, might be an isolate
"Latn",
}
m["sai-tal"] = {
"Tallán",
16910468,
"qfa-unc", -- extinct, poorly attested; might be Catacaoan
"Latn",
}
m["sai-tap"] = {
"Tapayuna",
30719984,
"sai-nje",
"Latn",
}
m["sai-tar-pro"] = {
"Proto-Taranoan",
116773816,
"sai-tar",
"Latn",
type = "reconstructed",
}
m["sai-teu"] = {
"Teushen",
3519243,
"qfa-unc", -- probably extinct by the 1950's; possibly Chonan
"Latn",
}
m["sai-tim"] = {
"Timote",
7806995,
nil, -- possibly in a small Timotean family
"Latn",
}
m["sai-tpr"] = {
"Taparita",
7684460,
"sai-otm",
"Latn",
}
m["sai-trr"] = {
"Tarairiú",
7685313,
"qfa-unc", -- extinct, too poorly attested to classify
"Latn",
}
m["sai-wai"] = {
"Waitaká",
16918610,
"qfa-unc", -- extinct, possibly Purian
"Latn",
}
m["sai-way"] = {
"Wayumara",
7960726,
"sai-car",
"Latn",
}
m["sai-wit-pro"] = {
"Proto-Witotoan",
116773823,
"sai-wit",
"Latn",
type = "reconstructed",
}
m["sai-wnm"] = {
"Wanham",
16879440,
"sai-cpc",
"Latn",
}
m["sai-xoc"] = { -- contrast xoo, kzw, sai-kat
"Xocó",
12953620,
"qfa-unc", -- extinct and poorly attested; not clear if one or three languages
"Latn",
}
m["sai-yao"] = {
"Yao (South America)",
16979655,
"sai-ven",
"Latn",
}
m["sai-yar"] = { -- not the same family as 'suy'
"Yarumá",
3505859,
"sai-pek",
"Latn",
}
m["sai-yri"] = {
"Yuri",
2669157,
"sai-tyu",
"Latn",
}
m["sai-yup"] = {
"Yupua",
8061430,
"sai-tuc",
"Latn",
}
m["sai-yur"] = {
"Yurumanguí",
1281291,
"qfa-unc", -- extinct, too poorly attested to classify
"Latn",
}
m["sal-pro"] = {
"Proto-Salish",
116773269,
"sal",
"Latn",
type = "reconstructed",
}
m["sdv-daj-pro"] = {
"Proto-Daju",
116773739,
"sdv-daj",
"Latn",
type = "reconstructed",
}
m["sdv-eje-pro"] = {
"Proto-Eastern Jebel",
116773751,
"sdv-eje",
"Latn",
type = "reconstructed",
}
m["sdv-nil-pro"] = {
"Proto-Nilotic",
116773794,
"sdv-nil",
"Latn",
type = "reconstructed",
}
m["sdv-nyi-pro"] = {
"Proto-Nyima",
116773796,
"sdv-nyi",
"Latn",
type = "reconstructed",
}
m["sdv-tmn-pro"] = {
"Proto-Taman",
116773815,
"sdv-tmn",
"Latn",
type = "reconstructed",
}
m["sel-nor"] = {
"Northern Selkup",
30304565,
"sel",
"Cyrl",
translit = "sel-nor-translit",
}
m["sel-pro"] = {
"Proto-Selkup",
128884235,
"sel",
"Latn",
type = "reconstructed",
}
m["sel-sou"] = {
"Southern Selkup",
30304639,
"sel",
"Cyrl",
translit = "sel-sou-translit",
}
m["sem-amm"] = {
"Ammonite",
279181,
"sem-can",
"Phnx",
-- Phnx translit in [[Module:scripts/data]]
}
m["sem-amo"] = {
"Amorite",
35941,
"sem-nwe",
"Xsux, Latn",
}
m["sem-cha"] = {
"Chaha",
35543,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["sem-dad"] = {
"Dadanitic",
21838040,
"sem-cen",
"Narb",
-- Narb translit in [[Module:scripts/data]]
}
m["sem-dum"] = {
"Dumaitic",
128810397,
"sem-cen",
"Narb",
-- Narb translit in [[Module:scripts/data]]
}
m["sem-has"] = {
"Hasaitic",
3541433,
"sem-cen",
"Narb",
-- Narb translit in [[Module:scripts/data]]
}
m["sem-his"] = {
"Hismaic",
22948260,
"sem-cen",
"Narb",
-- Narb translit in [[Module:scripts/data]]
}
m["sem-mhr"] = {
"Muher",
33743,
"sem-eth",
"Latn",
}
m["sem-pro"] = {
"Proto-Semitic",
1658554,
"sem",
"Latn",
type = "reconstructed",
}
m["sem-saf"] = {
"Safaitic",
472586,
"sem-cen",
"Narb",
-- Narb translit in [[Module:scripts/data]]
}
m["sem-sam"] = {
"Samalian",
85847147,
"sem-nwe",
"Phnx",
-- Phnx translit in [[Module:scripts/data]]
}
m["sem-srb"] = {
"Old South Arabian",
35025,
"sem-osa",
"Sarb",
-- Sarb translit in [[Module:scripts/data]]
}
m["sem-tay"] = {
"Taymanitic",
24912301,
"sem-cen",
"Narb",
-- Narb translit in [[Module:scripts/data]]
}
m["sem-tha"] = {
"Thamudic",
843030,
"sem-cen",
"Narb",
-- Narb translit in [[Module:scripts/data]]
}
m["sem-wes-pro"] = {
"Proto-West Semitic",
98021726,
"sem-wes",
"Latn",
type = "reconstructed",
}
m["sio-pro"] = { -- NB this is not Proto-Siouan-Catawban 'nai-sca-pro'
"Proto-Siouan",
34181,
"sio",
"Latn",
type = "reconstructed",
}
m["sit-aao-pro"] = {
"Proto-Central Naga",
nil,
"sit-aao",
"Latn",
type = "reconstructed",
}
m["sit-bai-pro"] = {
"Proto-Bai",
nil,
"sit-bai",
"Latn",
type = "reconstructed",
}
m["sit-ban"] = {
"Bangru",
56071779,
"sit-hrs",
"Latn",
}
m["sit-bdi-pro"] = {
"Proto-Bodish",
nil,
"sit-bdi",
"Latn",
type = "reconstructed",
}
m["sit-bok"] = {
"Bokar",
4938727,
"sit-tan",
"Latn, Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["sit-cai"] = {
"Caijia",
5017528,
"sit-cln",
"Latn"
}
m["sit-cha"] = {
"Chairel",
5068066,
"sit-luu",
"Latn",
}
m["sit-ers-pro"] = {
"Proto-Ersuic",
nil,
"sit-ers",
"Latn",
type = "reconstructed",
}
m["sit-hrs-pro"] = {
"Proto-Hrusish",
116773762,
"sit-hrs",
"Latn",
type = "reconstructed",
}
m["sit-jap"] = {
"Japhug",
3162245,
"sit-egy",
"Latn",
}
m["sit-kha-pro"] = {
"Proto-Kham",
116773773,
"sit-kha",
"Latn",
type = "reconstructed",
}
m["sit-khb-pro"] = {
"Proto-Kho-Bwa",
nil,
"sit-khb",
"Latn",
type = "reconstructed",
}
m["sit-khp-pro"] = {
"Proto-Puroik",
nil,
"sit-khb",
"Latn",
type = "reconstructed",
}
m["sit-khw-pro"] = {
"Proto-Western Kho-Bwa",
nil,
"sit-khw",
"Latn",
type = "reconstructed",
}
m["sit-kon-pro"] = {
"Proto-Northern Naga",
nil,
"sit-kon",
"Latn",
type = "reconstructed",
}
m["sit-liz"] = {
"Lizu",
6660653,
"sit-ers",
"Latn", -- and Ersu Shaba
}
m["sit-lnj"] = {
"Longjia",
17096251,
"sit-cln",
"Latn"
}
m["sit-lrn"] = {
"Luren",
16946370,
"sit-cln",
"Latn"
}
m["sit-luu-pro"] = {
"Proto-Luish",
116773783,
"sit-luu",
"Latn",
type = "reconstructed",
}
m["sit-nas-pro"] = {
"Proto-Naish",
nil,
"sit-nas",
"Latn",
type = "reconstructed",
}
m["sit-prn"] = {
"Puiron",
7259048,
"sit-zem",
}
m["sit-pro"] = {
"Proto-Sino-Tibetan",
24839178,
"sit",
"Latn",
type = "reconstructed",
}
m["sit-sit"] = {
"Situ",
19840830,
"sit-egy",
"Latn",
}
m["sit-tam-pro"] = {
"Proto-Tamangic",
117469295,
"sit-tam",
"Latn",
type = "reconstructed",
}
m["sit-tan-pro"] = {
"Proto-Tani",
116773284,
"sit-tan",
"Latn", -- needs verification
type = "reconstructed",
}
m["sit-tgm"] = {
"Tangam",
17041370,
"sit-tan",
"Latn",
}
m["sit-tng-pro"] = {
"Proto-Tangkhulic",
nil,
"sit-tng",
"Latn",
type = "reconstructed"
}
m["sit-tos"] = {
"Tosu",
7827899,
"sit-ers",
"Latn", -- also Ersu Shaba
}
m["sit-tsh"] = {
"Tshobdun",
19840950,
"sit-egy",
"Latn",
}
m["sit-zbu"] = {
"Zbu",
19841106,
"sit-egy",
"Latn",
}
m["sla-pro"] = {
"Proto-Slavic",
747537,
"sla",
"Latn",
type = "reconstructed",
strip_diacritics = {
remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve,
remove_exceptions = {'ś'},
},
sort_key = {
from = {"č", "ď", "ě", "ę", "ь", "ľ", "ň", "ǫ", "ř", "š", "ś", "ť", "ъ", "ž"},
to = {"c²", "d²", "e²", "e³", "i²", "l²", "nj", "o²", "r²", "s²", "s³", "t²", "u²", "z²"},
}
}
m["smi-pro"] = {
"Proto-Samic",
7251862,
"smi",
"Latn",
type = "reconstructed",
sort_key = {
from = {"ā", "č", "δ", "[ëē]", "ŋ", "ń", "ō", "š", "θ", "%([^()]+%)"},
to = {"a", "c²", "d", "e", "n²", "n³", "o", "s²", "t²"}
},
}
m["son-pro"] = {
"Proto-Songhay",
116773277,
"son",
"Latn",
type = "reconstructed",
}
m["sqj-pro"] = {
"Proto-Albanian",
18210846,
"sqj",
"Latn",
type = "reconstructed",
}
m["ssa-klk-pro"] = {
"Proto-Kuliak",
116773779,
"ssa-klk",
"Latn",
type = "reconstructed",
}
m["ssa-kom-pro"] = {
"Proto-Koman",
116773775,
"ssa-kom",
"Latn",
type = "reconstructed",
}
m["ssa-pro"] = {
"Proto-Nilo-Saharan",
116773236,
"ssa",
"Latn",
type = "reconstructed",
}
m["syd-pro"] = {
"Proto-Samoyedic",
7251863,
"syd",
"Latn",
type = "reconstructed",
}
m["tai-pro"] = {
"Proto-Tai",
6583709,
"tai",
"Latn",
type = "reconstructed",
}
m["tai-swe-pro"] = {
"Proto-Southwestern Tai",
116773280,
"tai-swe",
"Latn",
type = "reconstructed",
}
m["tbq-bdg-pro"] = {
"Proto-Bodo-Garo",
116773195,
"tbq-bdg",
"Latn",
type = "reconstructed",
}
m["tbq-blg"] = {
"Bailang",
2879843,
"tbq-lob",
"Hani",
sort_key = "Hani-sortkey",
}
m["tbq-brm-pro"] = {
"Proto-Burmish",
nil,
"tbq-brm",
"Latn",
type = "reconstructed",
}
m["tbq-gkh"] = {
"Gokhy",
5578069,
"tbq-sil",
"Latn",
}
m["tbq-kuk-pro"] = {
"Proto-Kuki-Chin",
116773220,
"tbq-kuk",
"Latn",
type = "reconstructed",
}
m["tbq-lal-pro"] = {
"Proto-Lalo",
116773781,
"tbq-lal",
"Latn",
type = "reconstructed",
}
m["tbq-laz"] = {
"Laze",
17007626,
"sit-nas",
"Latn",
}
m["tbq-lob-pro"] = {
"Proto-Lolo-Burmese",
116773224,
"tbq-lob",
"Latn",
type = "reconstructed",
}
m["tbq-lol-pro"] = {
"Proto-Loloish",
7251855,
"tbq-lol",
"Latn",
type = "reconstructed",
}
m["tbq-mil"] = {
"Milang",
6850761,
"sit-gsi",
"Deva, Latn",
}
m["tbq-mor"] = {
"Moran",
6909216,
"tbq-bdg",
"Latn",
}
m["tbq-ngo"] = {
"Ngochang",
56582,
"tbq-brm",
"Latn",
}
-- tbq-pro is now etymology-only
m["trk-dkh"] = {
"Dukhan",
12809273,
"trk-ssb",
"Latn, Cyrl, Mong",
-- Mong translit, display_text and strip_diacritics in [[Module:scripts/data]]
}
-- As described in Mahmud al-Kashgari's 11th century ''Dīwān Lughāt al-Turk''.
m["trk-eog"] = {
"Early Old Oghuz",
nil,
"trk-ogz",
"ota-Arab",
strip_diacritics = {["ota-Arab"] = "ar-stripdiacritics"},
}
m["trk-oat"] = {
"Old Anatolian Turkish",
7083390,
"trk-ogz",
"ota-Arab",
strip_diacritics = {["ota-Arab"] = "ar-stripdiacritics"},
ancestors = "trk-eog",
}
m["trk-pro"] = {
"Proto-Turkic",
3657773,
"trk",
"Latn",
type = "reconstructed",
standard_chars = {
Latn = " ()-abdegiklmnoprstuxyzïöüāčēīĺŋōŕšūǖȫẹ" .. c.macron,
}
}
m["tup-gua-pro"] = {
"Proto-Tupi-Guarani",
116773288,
"tup-gua",
"Latn",
type = "reconstructed",
}
m["tup-kab"] = {
"Kabishiana",
15302988,
"tup",
"Latn",
}
m["tup-pro"] = {
"Proto-Tupian",
10354700,
"tup",
"Latn",
type = "reconstructed",
}
m["tuw-alk"] = {
"Alchuka",
113553616,
"tuw-jrc",
"Latn, Hans",
sort_key = {Hans = "Hani-sortkey"},
}
m["tuw-bal"] = {
"Bala",
86730632,
"tuw-jrc",
"Latn, Hans",
sort_key = {Hans = "Hani-sortkey"},
}
m["tuw-kkl"] = {
"Kyakala",
118875708,
"tuw-jrc",
"Latn, Hans",
sort_key = {Hans = "Hani-sortkey"},
}
m["tuw-kli"] = {
"Kili",
6406892,
"tuw-ewe",
"Cyrl",
}
m["tuw-pro"] = {
"Proto-Tungusic",
85872335,
"tuw",
"Latn",
type = "reconstructed",
}
m["tuw-sol"] = {
"Solon",
30004,
"tuw-ewe",
}
m["urj-fin-pro"] = {
"Proto-Finnic",
11883720,
"urj-fin",
"Latn",
type = "reconstructed",
}
m["urj-koo"] = {
"Old Komi",
86679962,
"kv",
"Perm, Cyrs",
translit = "urj-koo-translit",
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]; previously, Cyrs strip_diacritics not present
}
m["urj-kuk"] = {
"Kukkuzi",
107410460,
"urj-fin",
"Latn",
ancestors = "vot",
}
m["urj-kya"] = {
"Komi-Yazva",
2365210,
"kv",
"Cyrl",
translit = "kv-translit",
override_translit = true,
strip_diacritics = {remove_diacritics = c.acute},
}
m["urj-mdv-pro"] = {
"Proto-Mordvinic",
116773232,
"urj-mdv",
"Latn",
type = "reconstructed",
}
m["urj-prm-pro"] = {
"Proto-Permic",
116773257,
"urj-prm",
"Latn",
type = "reconstructed",
}
m["urj-pro"] = {
"Proto-Uralic",
288765,
"urj",
"Latn",
type = "reconstructed",
}
m["urj-ugr-pro"] = {
"Proto-Ugric",
156631,
"urj-ugr",
"Latn",
type = "reconstructed",
}
m["xnd-pro"] = {
"Proto-Na-Dene",
116773233,
"xnd",
"Latn",
type = "reconstructed",
}
m["xgn-pro"] = {
"Proto-Mongolic",
2493677,
"xgn",
"Latn",
type = "reconstructed",
sort_key = {
from = {"č", "i", "ï", "ǰ", "ŋ", "ö", "š", "ü"},
to = {"c", "i" .. p[1], "i", "j", "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1]},
},
}
m["yok-bvy"] = {
"Buena Vista Yokuts",
4985474,
"yok",
"Latn",
}
m["yok-dly"] = {
"Delta Yokuts",
70923266,
"yok",
"Latn",
}
m["yok-gsy"] = {
"Gashowu Yokuts",
3098708,
"yok",
"Latn",
}
m["yok-kry"] = {
"Kings River Yokuts",
6413014,
"yok",
"Latn",
}
m["yok-nvy"] = {
"Northern Valley Yokuts",
85789777,
"yok",
"Latn",
}
m["yok-ply"] = {
"Palewyami Yokuts",
2387391,
"yok",
"Latn",
}
m["yok-svy"] = {
"Southern Valley Yokuts",
12642473,
"yok",
"Latn",
}
m["yok-tky"] = {
"Tule-Kaweah Yokuts",
7851988,
"yok",
"Latn",
}
m["ypk-pro"] = {
"Proto-Yupik",
116773295,
"ypk",
"Latn",
type = "reconstructed",
}
m["yrk-for"] = {
"Forest Nenets",
1295107,
"yrk",
"Cyrl",
translit = "yrk-for-translit",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron .. c.breve .. c.dotabove},
}
m["yrk-tun"] = {
"Tundra Nenets",
36452,
"yrk",
"Cyrl",
strip_diacritics = {
from = {"ӑ", "а̄", "э̇", "ӣ", "ы̄", "ӯ", "ю̄", "я̆", "я̄"},
to = {"а", "а", "э", "и", "ы", "у", "ю", "я", "я"},
},
translit = "yrk-tun-translit",
}
m["zhx-min-pro"] = {
"Proto-Min",
19646347,
"zhx-min",
"Latn",
type = "reconstructed",
}
m["zhx-sht"] = {
"Shaozhou Tuhua",
1920769,
"zhx",
"Nshu, Hants",
generate_forms = "zh-generateforms",
sort_key = {Hani = "Hani-sortkey"},
}
m["zhx-sic"] = {
"Sichuanese",
2278732,
"zhx-man",
"Hants",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["zhx-tai"] = {
"Taishanese",
2208940,
"zhx-yue",
"Hants",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["zle-ono"] = {
"Old Novgorodian",
162013,
"zle",
"Cyrs, Glag",
translit = {Cyrs = "Cyrs-translit", Glag = "Glag-translit"},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["zle-ort"] = {
"Old Ruthenian",
13211,
"zle",
"Arab, Cyrs, Latn",
ancestors = "orv",
translit = {
Cyrs = "zle-ort-translit",
Arab = "zle-ort-Arab-translit",
},
strip_diacritics = {
Cyrs = {
remove_diacritics = m_langdata.chars_substitutions["Cyrs_remove_diacritics"],
remove_exceptions = {"Ї", "ї"},
},
Arab = "ar-stripdiacritics",
},
-- Cyrs sort_key in [[Module:scripts/data]]
}
m["zls-chs"] = {
"Church Slavonic",
33251,
"zls",
"Cyrs, Glag, Latn",
ancestors = "cu",
translit = {
Cyrs = "Cyrs-translit",
Glag = "Glag-translit"
},
-- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["zlw-ocs"] = {
"Old Czech",
593096,
"zlw",
"Latn",
}
m["zlw-opl"] = {
"Old Polish",
149838,
"zlw-lch",
"Latn",
strip_diacritics = {remove_diacritics = c.ringabove},
}
m["zlw-osk"] = {
"Old Slovak",
12776676,
"zlw",
"Latn",
}
m["zlw-slv"] = {
"Slovincian",
36822,
"zlw-pom",
"Latn",
strip_diacritics = {remove_diacritics = c.macron .. c.breve},
}
return require("Module:languages").finalizeData(m, "language")
dta3mfxmgotlnmw6jci99rv4a6o9oox
Mòideal:languages/data/3/w
828
16779
86302
2026-07-22T08:33:05Z
Altronic
4137
Copy from English Wiktionary
86302
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["waa"] = {
"Walla Walla",
12953960,
"nai-shp",
"Latn",
ancestors = "nai-spt",
}
m["wab"] = {
"Wab",
11222271,
"poz-ocw",
"Latn",
}
m["wac"] = {
"Wasco-Wishram",
12645081,
"nai-ckn",
"Latn",
}
m["wad"] = {
"Wandamen",
2806128,
"poz-hce",
"Latn",
}
m["waf"] = {
"Wakoná",
7961205,
}
m["wag"] = {
"Wa'ema",
12953264,
"poz-ocw",
"Latn",
}
m["wah"] = {
"Watubela",
7975070,
"poz-cma",
"Latn",
}
m["waj"] = {
"Waffa",
3565058,
"ngf-tai",
"Latn",
}
m["wal"] = {
"Wolaytta",
36943,
"omv-nom",
"Latn, Ethi",
}
m["wam"] = {
"Massachusett",
56519,
"alg-eas",
"Latn",
}
m["wan"] = {
"Wan",
3913272,
"dmn-nbe",
}
m["wao"] = {
"Wappo",
56530,
"nai-ykn",
"Latn",
}
m["wap"] = {
"Wapishana",
3450493,
"awd",
"Latn",
}
m["waq"] = {
"Wageman",
3436843,
"aus-gun",
"Latn",
}
m["war"] = {
"Waray-Waray",
34279,
"phi",
"Latn",
strip_diacritics = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey",
},
}
m["was"] = {
"Washo",
34198,
"qfa-iso",
"Latn",
}
m["wat"] = {
"Kaninuwa",
12952565,
"poz-ocw",
"Latn",
}
m["wau"] = {
"Wauja",
3450522,
"awd",
"Latn",
}
m["wav"] = {
"Waka",
3913394,
"alv-mye",
}
m["waw"] = {
"Waiwai",
56632,
"sai-prk",
"Latn",
}
m["wax"] = {
"Watam",
3566597,
"paa-ott",
"Latn",
}
m["way"] = {
"Wayana",
5908753,
"sai-gui",
"Latn",
}
m["waz"] = {
"Wampur",
7966957,
"poz-ocw",
"Latn",
}
m["wba"] = {
"Warao",
36946,
"qfa-iso",
"Latn",
}
m["wbb"] = {
"Wabo",
7958701,
"poz-hce",
"Latn",
}
m["wbe"] = {
"Waritai",
7969453,
"paa-clp",
"Latn",
}
m["wbf"] = {
"Wara",
3914052,
"alv-wan",
}
m["wbh"] = {
"Wanda",
7967153,
"bnt-mwi",
}
m["wbi"] = {
"Wanji",
3376818,
"bnt-bki",
"Latn",
}
m["wbj"] = {
"Alagwa",
56621,
"cus-sou",
"Latn",
}
m["wbk"] = {
"Waigali",
34196,
"nur-sou",
"Latn",
}
m["wbl"] = {
"Wakhi",
34208,
"xsc-skw",
"Cyrl, Latn, Arab",
translit = {Cyrl = "tg-translit"},
}
m["wbm"] = {
"Wa",
12644869,
"mkh-pal",
}
m["wbp"] = {
"Warlpiri",
1639998,
"aus-pam",
"Latn",
}
m["wbq"] = {
"Waddar",
6708569,
"dra-tel",
}
m["wbr"] = {
"Wagdi",
7959490,
"inc-bhi",
"Deva",
}
m["wbt"] = {
"Wanman",
7967989,
}
m["wbv"] = {
"Wajarri",
3913856,
"aus-psw",
"Latn",
}
m["wbw"] = {
"Woi",
8029092,
"poz-hce",
"Latn",
}
m["wca"] = {
"Yanomam",
7960056,
"sai-ynm",
"Latn",
}
m["wci"] = {
"Waci Gbe",
36987,
"alv-gbe",
}
m["wdd"] = {
"Wandji",
36976,
"bnt-nze",
}
m["wdg"] = {
"Wadaginam",
7958930,
"ngf-sad",
"Latn",
}
m["wdj"] = {
"Wadjiginy",
7959489,
}
m["wdt"] = {
"Wendat",
3567223,
"iro-nor",
"Latn",
ancestors = "iro-ohu",
}
m["wdu"] = {
"Wadjigu",
10719025,
}
m["wdy"] = {
"Wadjabangayi",
63313681,
}
m["wea"] = {
"Wewaw",
15895870,
}
m["wec"] = {
"Wè Western",
11159067,
"kro-wee",
}
m["wed"] = {
"Wedau",
12953294,
"poz-ocw",
"Latn",
}
m["weh"] = {
"Weh",
7979690,
"nic-rnw",
}
m["wei"] = {
"Kiunum",
7983230,
"paa-tir",
"Latn",
}
m["wem"] = {
"Weme Gbe",
18379970,
"alv-gbe",
}
m["weo"] = {
"Wemale",
7982165,
"poz-cma",
}
m["wer"] = {
"Weri",
11732752,
"paa-kun",
"Latn",
}
m["wes"] = {
"Cameroon Pidgin",
35541,
"crp",
"Latn",
ancestors = "en",
}
m["wet"] = {
"Perai",
12953035,
"poz-tim",
}
m["weu"] = {
"Welaung",
7980503,
"tbq-kuk",
}
m["wew"] = {
"Weyewa",
4314526,
"poz-cet",
"Latn",
}
m["wfg"] = {
"Yafi",
8074520,
"paa-epw",
"Latn",
}
m["wga"] = {
"Wagaya",
7959487,
"aus-pam",
"Latn",
}
m["wgb"] = {
"Wagawaga",
7959485,
"poz-ocw",
"Latn",
}
m["wgg"] = {
"Wangganguru",
7967859,
"aus-kar",
"Latn",
}
m["wgi"] = {
"Wahgi", -- not to be confused with North Wahgi
3565122,
"ngf-wah",
"Latn",
}
m["wgo"] = {
"Waigeo",
7959937,
"poz-hce",
"Latn",
}
m["wgu"] = {
"Wirangu",
2092286,
"aus-pam",
"Latn",
}
m["wgy"] = {
"Warrgamay",
3915942,
"aus-pam",
"Latn",
}
m["wha"] = {
"Manusela",
3287127,
"poz-cma",
"Latn",
}
m["whg"] = {
"North Wahgi",
12953273,
"ngf-wah",
"Latn",
}
m["whk"] = {
"Wahau Kenyah",
7959737,
"poz-swa",
"Latn",
}
m["whu"] = {
"Wahau Kayan",
12473397,
}
m["wib"] = {
"Southern Toussian",
11158982,
"alv-sav",
}
m["wic"] = {
"Wichita",
56513,
"cdd",
"Latn",
}
m["wie"] = {
"Wik-Epa",
10720035,
"aus-pmn",
"Latn",
}
m["wif"] = {
"Wik-Keyangan",
10720037,
"aus-pmn",
"Latn",
}
m["wig"] = {
"Wik-Ngathana",
3915695,
"aus-pmn",
"Latn",
}
m["wih"] = {
"Wik-Me'anha",
10720039,
"aus-pmn",
"Latn",
}
m["wii"] = {
"Minidien",
6865237,
"paa-wap",
"Latn",
}
m["wij"] = {
"Wik-Iiyanh",
10720036,
"aus-pmn",
"Latn",
}
m["wik"] = {
"Wikalkan",
7999800,
"aus-pmn",
"Latn",
}
m["wil"] = {
"Wilawila",
10720050,
"aus-wor",
"Latn",
}
m["wim"] = {
"Wik-Mungkan",
2092246,
"aus-pmn",
"Latn",
}
m["win"] = {
"Winnebago",
1957108,
"sio-msv",
"Latn",
}
m["wir"] = {
"Wiraféd",
12953970,
"tup-gua",
"Latn",
}
m["wiu"] = {
"Wiru",
8027044,
"qfa-dis", -- Papuan; isolate in Glottolog; grouped with Teberan by Usher (2020)
"Latn",
}
m["wiv"] = {
"Muduapa",
3121040,
"poz-ocw",
"Latn",
}
m["wiy"] = {
"Wiyot",
36937,
"aql",
"Latn",
}
m["wja"] = {
"Waja",
3914415,
"alv-wjk",
}
m["wji"] = {
"Warji",
3440381,
"cdc-wst",
"Latn",
}
m["wka"] = {
"Kw'adza",
3807652,
"cus-sou",
}
m["wkb"] = {
"Kumbaran",
16878146,
"dra-sdo",
}
m["wkd"] = {
"Mo",
7960881,
"poz-ocw",
"Latn",
}
m["wkl"] = {
"Kalanadi",
6350515,
"dra-mal",
}
m["wku"] = {
"Kunduvadi",
6444383,
"dra-mal",
}
m["wkw"] = {
"Wakawaka",
10719110,
"aus-pam",
"Latn",
}
m["wky"] = {
"Wangkayutyuru",
33060533,
"aus-kar",
"Latn",
}
m["wla"] = {
"Walio",
7961958,
"paa-wal",
"Latn",
}
m["wlc"] = {
"Mwali Comorian",
3319155,
"bnt-com",
"Latn",
sort_key = "bnt-com-sortkey",
}
m["wle"] = {
"Wolane",
12645275,
"sem-eth",
"Ethi",
}
m["wlg"] = {
"Kunbarlang",
5618523,
"aus-gun",
"Latn",
}
m["wli"] = {
"Waioli",
7960241,
"paa-sah",
"Latn",
}
m["wlk"] = {
"Wailaki",
20832,
"ath-pco",
"Latn",
}
m["wll"] = {
"Wali (Sudan)",
30597440,
"nub-hil",
}
m["wlm"] = {
"Middle Welsh",
2487263,
"cel-brw",
"Latn",
ancestors = "owl",
strip_diacritics = {
from = {"Ð", "ð"},
to = {"D", "d"}
},
sort_key = "wlm-sortkey",
}
m["wlo"] = {
"Wolio",
1185114,
"poz-wot",
"Latn, Arab",
}
m["wlr"] = {
"Wailapa",
7960062,
"poz-vnn",
"Latn",
}
m["wls"] = {
"Wallisian",
36979,
"poz-pnp",
"Latn",
}
m["wlu"] = {
"Wuliwuli",
8039208,
}
m["wlv"] = {
"Wichí Lhamtés Vejoz",
13526867,
"sai-wic",
"Latn",
}
m["wlw"] = {
"Walak",
7961258,
"ngf-gvd",
"Latn",
}
m["wlx"] = {
"Wali (Ghana)",
36895,
"nic-mre",
"Latn",
}
m["wly"] = {
"Waling",
7961957,
"sit-kic",
ancestors = "bap",
}
m["wmb"] = {
"Wambaya",
2083197,
"aus-mir",
"Latn",
}
m["wmc"] = {
"Wamas",
7966909,
"ngf-nwh",
"Latn",
}
m["wmd"] = {
"Mamaindé",
3284890,
"sai-nmk",
"Latn",
}
m["wme"] = {
"Wambule",
56785,
"sit-kiw",
"Latn",
}
m["wmh"] = {
"Waima'a",
7960132,
"poz-tim",
"Latn",
}
m["wmi"] = {
"Wamin",
7966934,
}
m["wmm"] = {
"Maiwa (Indonesia)",
6737226,
"poz",
"Latn",
}
m["wmn"] = {
"Waamwang",
7958575,
"poz-cln",
"Latn",
}
m["wmo"] = {
"Wam",
8030620,
"paa-trr",
"Latn",
}
m["wms"] = {
"Wambon",
7966922,
"ngf-dum",
"Latn",
}
m["wmt"] = {
"Walmajarri",
2232696,
"aus-pam",
"Latn",
}
m["wmw"] = {
"Mwani",
3042206,
"bnt-swh",
"Latn",
}
m["wmx"] = {
"Womo",
8031646,
"paa-shi",
"Latn",
}
m["wnb"] = {
"Mokati",
7967057,
"ngf-tib",
"Latn",
}
m["wnc"] = {
"Wantoat",
7968184,
"ngf-waa",
"Latn",
}
m["wnd"] = {
"Wandarang",
3913767,
"aus-arn",
"Latn",
}
m["wne"] = {
"Waneci",
7967334,
"ira-pat",
"ps-Arab",
}
m["wng"] = {
"Wanggom",
11732736,
"ngf-nde",
"Latn",
}
m["wni"] = {
"Ndzwani Comorian",
2850262,
"bnt-com",
"Latn",
sort_key = "bnt-com-sortkey",
}
m["wnk"] = {
"Wanukaka",
2370136,
"poz",
"Latn",
}
m["wnm"] = {
"Wanggamala",
7967860,
"aus-kar",
"Latn",
}
m["wno"] = {
"Wano",
3566166,
"ngf-dan",
"Latn",
}
m["wnp"] = {
"Wanap",
7967060,
"paa-wpa",
"Latn",
}
m["wnu"] = {
"Usan",
7901709,
"ngf-num",
"Latn",
}
m["wnw"] = {
"Wintu",
56754,
"nai-wtq",
"Latn",
}
m["wny"] = {
"Wanyi",
7968201,
"aus-gar",
"Latn",
}
m["woa"] = {
"Tyaraity",
10706951,
}
m["wob"] = {
"Wobé",
3915363,
"kro-wee",
}
m["woc"] = {
"Wogeo",
8029061,
"poz-ocw",
"Latn",
}
m["wod"] = {
"Wolani",
8029704,
"ngf-pan",
"Latn",
}
m["woe"] = {
"Woleaian",
34037,
"poz-mic",
"Latn, Wole",
}
m["wog"] = {
"Wogamusin",
56991,
"paa-sep",
"Latn",
}
m["woi"] = {
"Kamang",
8029096,
"paa-alp",
"Latn",
}
m["wok"] = {
"Longto",
35795,
"alv-dur",
"Latn",
}
m["wom"] = {
"Perema",
3913378,
"alv-lek",
"Latn",
}
m["won"] = {
"Wongo",
8032058,
"bnt-bsh",
"Latn",
}
m["woo"] = {
"Manombai",
6751253,
"poz",
"Latn",
}
m["wor"] = {
"Woria",
8034514,
"paa-egb",
"Latn",
}
m["wos"] = {
"Hanga Hundi",
6450232,
"paa-nnd",
"Latn",
}
m["wow"] = {
"Wawonii",
3566780,
"poz-btk",
"Latn",
}
m["woy"] = {
"Weyto",
3915918,
"qfa-unc", -- speculated to have been Agaw
}
m["wpc"] = {
"Wirö",
12953684,
nil,
"Latn",
}
m["wra"] = {
"Warapu",
56739,
"paa-sko",
"Latn",
}
m["wrb"] = {
"Warluwara",
3913761,
"aus-pam",
"Latn",
}
m["wrg"] = {
"Warungu",
7970854,
"aus-pam",
"Latn",
}
m["wrh"] = {
"Wiradjuri",
3913840,
"aus-cww",
"Latn",
}
m["wri"] = {
"Wariyangga",
10719289,
"aus-psw",
"Latn",
}
m["wrk"] = {
"Garawa",
2524022,
"aus-gar",
"Latn",
}
m["wrl"] = {
"Warlmanpa",
3913823,
"aus-pam",
"Latn",
}
m["wrm"] = {
"Warumungu",
1764544,
"aus-pam",
"Latn",
}
m["wrn"] = {
"Warnang",
36971,
"alv-hei",
}
m["wro"] = {
"Worora",
3504106,
"aus-wor",
"Latn",
}
m["wrp"] = {
"Waropen",
7969851,
"poz-hce",
"Latn",
}
m["wrr"] = {
"Wardaman",
3913842,
"aus-yng",
"Latn",
}
m["wrs"] = {
"Waris",
3502610,
"paa-war",
"Latn",
}
m["wru"] = {
"Waru",
3566463,
}
m["wrv"] = {
"Waruna",
7971078,
"ngf-gsu",
"Latn",
}
m["wrw"] = {
"Gugu Warra",
5615286,
}
m["wrx"] = {
"Wae Rana",
7959375,
}
m["wrz"] = {
"Warray",
7969971,
"aus-gun",
"Latn",
}
m["wsa"] = {
"Warembori",
56459,
nil,
"Latn",
}
m["wsi"] = {
"Wusi",
8039349,
"poz-vnn",
"Latn",
}
m["wsk"] = {
"Waskia",
7972683,
"ngf-kow",
"Latn",
}
m["wsr"] = {
"Owenia",
7114727,
"ngf-gau",
"Latn",
}
-- "wss" Wasa is treated as "ak" Akan, see [[WT:LT]]
m["wsu"] = {
"Wasu",
7972892,
}
m["wsv"] = {
"Wotapuri-Katarqalai",
3877569,
"inc-koh",
}
m["wtf"] = {
"Watiwa",
35316,
"ngf-eva",
"Latn",
}
m["wth"] = {
"Wathaurong",
7974656,
"aus-pam",
"Latn",
}
m["wti"] = {
"Berta",
33178,
"qfa-iso", -- may be ssa
"Latn",
}
m["wtk"] = {
"Watakataui",
7972975,
"paa-sep",
"Latn",
}
m["wtm"] = {
"Mewati",
2605943,
"raj",
"Deva",
translit = "hi-translit",
}
m["wtw"] = {
"Wotu",
12473488,
"poz-wot",
"Latn",
}
m["wua"] = {
"Wikngenchera",
10720045,
"aus-pmn",
"Latn",
}
m["wub"] = {
"Wunambal",
3913805,
"aus-wor",
"Latn",
}
m["wud"] = {
"Wudu",
36972,
"alv-gbe",
"Latn",
}
m["wuh"] = {
"Wutunhua",
1012917,
"qfa-mix",
"Latn",
ancestors = "cmn, bo, peh",
}
m["wul"] = {
"Silimo",
11732514,
"ngf-ngn",
"Latn",
}
m["wum"] = {
"Wumbvu",
36891,
"bnt-kel",
"Latn",
}
m["wun"] = {
"Bungu",
4997686,
"bnt-mby",
"Latn",
}
m["wur"] = {
"Wurrugu",
8039305,
"aus-wdj",
"Latn",
}
m["wut"] = {
"Wutung",
56743,
"paa-isk",
"Latn",
}
m["wuu"] = {
"Wu",
34290,
"zhx",
"Hants",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["wuv"] = {
"Wuvulu-Aua",
3062746,
"poz-aay",
"Latn",
}
m["wux"] = {
"Wulna",
13591670,
}
m["wuy"] = {
"Wauyai",
12953295,
"poz-hce",
"Latn",
}
m["wwa"] = {
"Waama",
7958576,
"nic-eov",
"Latn",
}
m["wwo"] = {
"Dorig",
3037047,
"poz-vnn",
"Latn",
}
m["wwr"] = {
"Warrwa",
7970852,
}
m["www"] = {
"Wawa",
36889,
"nic-mmb",
"Latn",
}
m["wxa"] = {
"Waxiang",
2252191,
"zhx",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["wxw"] = {
"Wardandi",
61999705,
}
m["wya"] = {
"Wyandot",
1185119,
"iro-nor",
"Latn",
}
m["wyb"] = {
"Ngiyambaa",
3913825,
"aus-cww",
"Latn",
}
m["wyi"] = {
"Woiwurrung",
8029099,
"aus-pam",
"Latn",
}
m["wym"] = {
"Vilamovian",
56485,
"gmw-hgm",
"Latn",
ancestors = "gmh",
strip_diacritics = {remove_diacritics = c.dotabove},
}
m["wyr"] = {
"Wayoró",
2875044,
"tup",
}
m["wyy"] = {
"Western Fijian",
3062751,
"poz-pcc",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
cfhpbn3sajoez0tfffvnbp4os4648vf
86303
86302
2026-07-22T08:33:37Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:languages/data/w]] gu [[Mòideal:languages/data/3/w]]
86302
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["waa"] = {
"Walla Walla",
12953960,
"nai-shp",
"Latn",
ancestors = "nai-spt",
}
m["wab"] = {
"Wab",
11222271,
"poz-ocw",
"Latn",
}
m["wac"] = {
"Wasco-Wishram",
12645081,
"nai-ckn",
"Latn",
}
m["wad"] = {
"Wandamen",
2806128,
"poz-hce",
"Latn",
}
m["waf"] = {
"Wakoná",
7961205,
}
m["wag"] = {
"Wa'ema",
12953264,
"poz-ocw",
"Latn",
}
m["wah"] = {
"Watubela",
7975070,
"poz-cma",
"Latn",
}
m["waj"] = {
"Waffa",
3565058,
"ngf-tai",
"Latn",
}
m["wal"] = {
"Wolaytta",
36943,
"omv-nom",
"Latn, Ethi",
}
m["wam"] = {
"Massachusett",
56519,
"alg-eas",
"Latn",
}
m["wan"] = {
"Wan",
3913272,
"dmn-nbe",
}
m["wao"] = {
"Wappo",
56530,
"nai-ykn",
"Latn",
}
m["wap"] = {
"Wapishana",
3450493,
"awd",
"Latn",
}
m["waq"] = {
"Wageman",
3436843,
"aus-gun",
"Latn",
}
m["war"] = {
"Waray-Waray",
34279,
"phi",
"Latn",
strip_diacritics = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey",
},
}
m["was"] = {
"Washo",
34198,
"qfa-iso",
"Latn",
}
m["wat"] = {
"Kaninuwa",
12952565,
"poz-ocw",
"Latn",
}
m["wau"] = {
"Wauja",
3450522,
"awd",
"Latn",
}
m["wav"] = {
"Waka",
3913394,
"alv-mye",
}
m["waw"] = {
"Waiwai",
56632,
"sai-prk",
"Latn",
}
m["wax"] = {
"Watam",
3566597,
"paa-ott",
"Latn",
}
m["way"] = {
"Wayana",
5908753,
"sai-gui",
"Latn",
}
m["waz"] = {
"Wampur",
7966957,
"poz-ocw",
"Latn",
}
m["wba"] = {
"Warao",
36946,
"qfa-iso",
"Latn",
}
m["wbb"] = {
"Wabo",
7958701,
"poz-hce",
"Latn",
}
m["wbe"] = {
"Waritai",
7969453,
"paa-clp",
"Latn",
}
m["wbf"] = {
"Wara",
3914052,
"alv-wan",
}
m["wbh"] = {
"Wanda",
7967153,
"bnt-mwi",
}
m["wbi"] = {
"Wanji",
3376818,
"bnt-bki",
"Latn",
}
m["wbj"] = {
"Alagwa",
56621,
"cus-sou",
"Latn",
}
m["wbk"] = {
"Waigali",
34196,
"nur-sou",
"Latn",
}
m["wbl"] = {
"Wakhi",
34208,
"xsc-skw",
"Cyrl, Latn, Arab",
translit = {Cyrl = "tg-translit"},
}
m["wbm"] = {
"Wa",
12644869,
"mkh-pal",
}
m["wbp"] = {
"Warlpiri",
1639998,
"aus-pam",
"Latn",
}
m["wbq"] = {
"Waddar",
6708569,
"dra-tel",
}
m["wbr"] = {
"Wagdi",
7959490,
"inc-bhi",
"Deva",
}
m["wbt"] = {
"Wanman",
7967989,
}
m["wbv"] = {
"Wajarri",
3913856,
"aus-psw",
"Latn",
}
m["wbw"] = {
"Woi",
8029092,
"poz-hce",
"Latn",
}
m["wca"] = {
"Yanomam",
7960056,
"sai-ynm",
"Latn",
}
m["wci"] = {
"Waci Gbe",
36987,
"alv-gbe",
}
m["wdd"] = {
"Wandji",
36976,
"bnt-nze",
}
m["wdg"] = {
"Wadaginam",
7958930,
"ngf-sad",
"Latn",
}
m["wdj"] = {
"Wadjiginy",
7959489,
}
m["wdt"] = {
"Wendat",
3567223,
"iro-nor",
"Latn",
ancestors = "iro-ohu",
}
m["wdu"] = {
"Wadjigu",
10719025,
}
m["wdy"] = {
"Wadjabangayi",
63313681,
}
m["wea"] = {
"Wewaw",
15895870,
}
m["wec"] = {
"Wè Western",
11159067,
"kro-wee",
}
m["wed"] = {
"Wedau",
12953294,
"poz-ocw",
"Latn",
}
m["weh"] = {
"Weh",
7979690,
"nic-rnw",
}
m["wei"] = {
"Kiunum",
7983230,
"paa-tir",
"Latn",
}
m["wem"] = {
"Weme Gbe",
18379970,
"alv-gbe",
}
m["weo"] = {
"Wemale",
7982165,
"poz-cma",
}
m["wer"] = {
"Weri",
11732752,
"paa-kun",
"Latn",
}
m["wes"] = {
"Cameroon Pidgin",
35541,
"crp",
"Latn",
ancestors = "en",
}
m["wet"] = {
"Perai",
12953035,
"poz-tim",
}
m["weu"] = {
"Welaung",
7980503,
"tbq-kuk",
}
m["wew"] = {
"Weyewa",
4314526,
"poz-cet",
"Latn",
}
m["wfg"] = {
"Yafi",
8074520,
"paa-epw",
"Latn",
}
m["wga"] = {
"Wagaya",
7959487,
"aus-pam",
"Latn",
}
m["wgb"] = {
"Wagawaga",
7959485,
"poz-ocw",
"Latn",
}
m["wgg"] = {
"Wangganguru",
7967859,
"aus-kar",
"Latn",
}
m["wgi"] = {
"Wahgi", -- not to be confused with North Wahgi
3565122,
"ngf-wah",
"Latn",
}
m["wgo"] = {
"Waigeo",
7959937,
"poz-hce",
"Latn",
}
m["wgu"] = {
"Wirangu",
2092286,
"aus-pam",
"Latn",
}
m["wgy"] = {
"Warrgamay",
3915942,
"aus-pam",
"Latn",
}
m["wha"] = {
"Manusela",
3287127,
"poz-cma",
"Latn",
}
m["whg"] = {
"North Wahgi",
12953273,
"ngf-wah",
"Latn",
}
m["whk"] = {
"Wahau Kenyah",
7959737,
"poz-swa",
"Latn",
}
m["whu"] = {
"Wahau Kayan",
12473397,
}
m["wib"] = {
"Southern Toussian",
11158982,
"alv-sav",
}
m["wic"] = {
"Wichita",
56513,
"cdd",
"Latn",
}
m["wie"] = {
"Wik-Epa",
10720035,
"aus-pmn",
"Latn",
}
m["wif"] = {
"Wik-Keyangan",
10720037,
"aus-pmn",
"Latn",
}
m["wig"] = {
"Wik-Ngathana",
3915695,
"aus-pmn",
"Latn",
}
m["wih"] = {
"Wik-Me'anha",
10720039,
"aus-pmn",
"Latn",
}
m["wii"] = {
"Minidien",
6865237,
"paa-wap",
"Latn",
}
m["wij"] = {
"Wik-Iiyanh",
10720036,
"aus-pmn",
"Latn",
}
m["wik"] = {
"Wikalkan",
7999800,
"aus-pmn",
"Latn",
}
m["wil"] = {
"Wilawila",
10720050,
"aus-wor",
"Latn",
}
m["wim"] = {
"Wik-Mungkan",
2092246,
"aus-pmn",
"Latn",
}
m["win"] = {
"Winnebago",
1957108,
"sio-msv",
"Latn",
}
m["wir"] = {
"Wiraféd",
12953970,
"tup-gua",
"Latn",
}
m["wiu"] = {
"Wiru",
8027044,
"qfa-dis", -- Papuan; isolate in Glottolog; grouped with Teberan by Usher (2020)
"Latn",
}
m["wiv"] = {
"Muduapa",
3121040,
"poz-ocw",
"Latn",
}
m["wiy"] = {
"Wiyot",
36937,
"aql",
"Latn",
}
m["wja"] = {
"Waja",
3914415,
"alv-wjk",
}
m["wji"] = {
"Warji",
3440381,
"cdc-wst",
"Latn",
}
m["wka"] = {
"Kw'adza",
3807652,
"cus-sou",
}
m["wkb"] = {
"Kumbaran",
16878146,
"dra-sdo",
}
m["wkd"] = {
"Mo",
7960881,
"poz-ocw",
"Latn",
}
m["wkl"] = {
"Kalanadi",
6350515,
"dra-mal",
}
m["wku"] = {
"Kunduvadi",
6444383,
"dra-mal",
}
m["wkw"] = {
"Wakawaka",
10719110,
"aus-pam",
"Latn",
}
m["wky"] = {
"Wangkayutyuru",
33060533,
"aus-kar",
"Latn",
}
m["wla"] = {
"Walio",
7961958,
"paa-wal",
"Latn",
}
m["wlc"] = {
"Mwali Comorian",
3319155,
"bnt-com",
"Latn",
sort_key = "bnt-com-sortkey",
}
m["wle"] = {
"Wolane",
12645275,
"sem-eth",
"Ethi",
}
m["wlg"] = {
"Kunbarlang",
5618523,
"aus-gun",
"Latn",
}
m["wli"] = {
"Waioli",
7960241,
"paa-sah",
"Latn",
}
m["wlk"] = {
"Wailaki",
20832,
"ath-pco",
"Latn",
}
m["wll"] = {
"Wali (Sudan)",
30597440,
"nub-hil",
}
m["wlm"] = {
"Middle Welsh",
2487263,
"cel-brw",
"Latn",
ancestors = "owl",
strip_diacritics = {
from = {"Ð", "ð"},
to = {"D", "d"}
},
sort_key = "wlm-sortkey",
}
m["wlo"] = {
"Wolio",
1185114,
"poz-wot",
"Latn, Arab",
}
m["wlr"] = {
"Wailapa",
7960062,
"poz-vnn",
"Latn",
}
m["wls"] = {
"Wallisian",
36979,
"poz-pnp",
"Latn",
}
m["wlu"] = {
"Wuliwuli",
8039208,
}
m["wlv"] = {
"Wichí Lhamtés Vejoz",
13526867,
"sai-wic",
"Latn",
}
m["wlw"] = {
"Walak",
7961258,
"ngf-gvd",
"Latn",
}
m["wlx"] = {
"Wali (Ghana)",
36895,
"nic-mre",
"Latn",
}
m["wly"] = {
"Waling",
7961957,
"sit-kic",
ancestors = "bap",
}
m["wmb"] = {
"Wambaya",
2083197,
"aus-mir",
"Latn",
}
m["wmc"] = {
"Wamas",
7966909,
"ngf-nwh",
"Latn",
}
m["wmd"] = {
"Mamaindé",
3284890,
"sai-nmk",
"Latn",
}
m["wme"] = {
"Wambule",
56785,
"sit-kiw",
"Latn",
}
m["wmh"] = {
"Waima'a",
7960132,
"poz-tim",
"Latn",
}
m["wmi"] = {
"Wamin",
7966934,
}
m["wmm"] = {
"Maiwa (Indonesia)",
6737226,
"poz",
"Latn",
}
m["wmn"] = {
"Waamwang",
7958575,
"poz-cln",
"Latn",
}
m["wmo"] = {
"Wam",
8030620,
"paa-trr",
"Latn",
}
m["wms"] = {
"Wambon",
7966922,
"ngf-dum",
"Latn",
}
m["wmt"] = {
"Walmajarri",
2232696,
"aus-pam",
"Latn",
}
m["wmw"] = {
"Mwani",
3042206,
"bnt-swh",
"Latn",
}
m["wmx"] = {
"Womo",
8031646,
"paa-shi",
"Latn",
}
m["wnb"] = {
"Mokati",
7967057,
"ngf-tib",
"Latn",
}
m["wnc"] = {
"Wantoat",
7968184,
"ngf-waa",
"Latn",
}
m["wnd"] = {
"Wandarang",
3913767,
"aus-arn",
"Latn",
}
m["wne"] = {
"Waneci",
7967334,
"ira-pat",
"ps-Arab",
}
m["wng"] = {
"Wanggom",
11732736,
"ngf-nde",
"Latn",
}
m["wni"] = {
"Ndzwani Comorian",
2850262,
"bnt-com",
"Latn",
sort_key = "bnt-com-sortkey",
}
m["wnk"] = {
"Wanukaka",
2370136,
"poz",
"Latn",
}
m["wnm"] = {
"Wanggamala",
7967860,
"aus-kar",
"Latn",
}
m["wno"] = {
"Wano",
3566166,
"ngf-dan",
"Latn",
}
m["wnp"] = {
"Wanap",
7967060,
"paa-wpa",
"Latn",
}
m["wnu"] = {
"Usan",
7901709,
"ngf-num",
"Latn",
}
m["wnw"] = {
"Wintu",
56754,
"nai-wtq",
"Latn",
}
m["wny"] = {
"Wanyi",
7968201,
"aus-gar",
"Latn",
}
m["woa"] = {
"Tyaraity",
10706951,
}
m["wob"] = {
"Wobé",
3915363,
"kro-wee",
}
m["woc"] = {
"Wogeo",
8029061,
"poz-ocw",
"Latn",
}
m["wod"] = {
"Wolani",
8029704,
"ngf-pan",
"Latn",
}
m["woe"] = {
"Woleaian",
34037,
"poz-mic",
"Latn, Wole",
}
m["wog"] = {
"Wogamusin",
56991,
"paa-sep",
"Latn",
}
m["woi"] = {
"Kamang",
8029096,
"paa-alp",
"Latn",
}
m["wok"] = {
"Longto",
35795,
"alv-dur",
"Latn",
}
m["wom"] = {
"Perema",
3913378,
"alv-lek",
"Latn",
}
m["won"] = {
"Wongo",
8032058,
"bnt-bsh",
"Latn",
}
m["woo"] = {
"Manombai",
6751253,
"poz",
"Latn",
}
m["wor"] = {
"Woria",
8034514,
"paa-egb",
"Latn",
}
m["wos"] = {
"Hanga Hundi",
6450232,
"paa-nnd",
"Latn",
}
m["wow"] = {
"Wawonii",
3566780,
"poz-btk",
"Latn",
}
m["woy"] = {
"Weyto",
3915918,
"qfa-unc", -- speculated to have been Agaw
}
m["wpc"] = {
"Wirö",
12953684,
nil,
"Latn",
}
m["wra"] = {
"Warapu",
56739,
"paa-sko",
"Latn",
}
m["wrb"] = {
"Warluwara",
3913761,
"aus-pam",
"Latn",
}
m["wrg"] = {
"Warungu",
7970854,
"aus-pam",
"Latn",
}
m["wrh"] = {
"Wiradjuri",
3913840,
"aus-cww",
"Latn",
}
m["wri"] = {
"Wariyangga",
10719289,
"aus-psw",
"Latn",
}
m["wrk"] = {
"Garawa",
2524022,
"aus-gar",
"Latn",
}
m["wrl"] = {
"Warlmanpa",
3913823,
"aus-pam",
"Latn",
}
m["wrm"] = {
"Warumungu",
1764544,
"aus-pam",
"Latn",
}
m["wrn"] = {
"Warnang",
36971,
"alv-hei",
}
m["wro"] = {
"Worora",
3504106,
"aus-wor",
"Latn",
}
m["wrp"] = {
"Waropen",
7969851,
"poz-hce",
"Latn",
}
m["wrr"] = {
"Wardaman",
3913842,
"aus-yng",
"Latn",
}
m["wrs"] = {
"Waris",
3502610,
"paa-war",
"Latn",
}
m["wru"] = {
"Waru",
3566463,
}
m["wrv"] = {
"Waruna",
7971078,
"ngf-gsu",
"Latn",
}
m["wrw"] = {
"Gugu Warra",
5615286,
}
m["wrx"] = {
"Wae Rana",
7959375,
}
m["wrz"] = {
"Warray",
7969971,
"aus-gun",
"Latn",
}
m["wsa"] = {
"Warembori",
56459,
nil,
"Latn",
}
m["wsi"] = {
"Wusi",
8039349,
"poz-vnn",
"Latn",
}
m["wsk"] = {
"Waskia",
7972683,
"ngf-kow",
"Latn",
}
m["wsr"] = {
"Owenia",
7114727,
"ngf-gau",
"Latn",
}
-- "wss" Wasa is treated as "ak" Akan, see [[WT:LT]]
m["wsu"] = {
"Wasu",
7972892,
}
m["wsv"] = {
"Wotapuri-Katarqalai",
3877569,
"inc-koh",
}
m["wtf"] = {
"Watiwa",
35316,
"ngf-eva",
"Latn",
}
m["wth"] = {
"Wathaurong",
7974656,
"aus-pam",
"Latn",
}
m["wti"] = {
"Berta",
33178,
"qfa-iso", -- may be ssa
"Latn",
}
m["wtk"] = {
"Watakataui",
7972975,
"paa-sep",
"Latn",
}
m["wtm"] = {
"Mewati",
2605943,
"raj",
"Deva",
translit = "hi-translit",
}
m["wtw"] = {
"Wotu",
12473488,
"poz-wot",
"Latn",
}
m["wua"] = {
"Wikngenchera",
10720045,
"aus-pmn",
"Latn",
}
m["wub"] = {
"Wunambal",
3913805,
"aus-wor",
"Latn",
}
m["wud"] = {
"Wudu",
36972,
"alv-gbe",
"Latn",
}
m["wuh"] = {
"Wutunhua",
1012917,
"qfa-mix",
"Latn",
ancestors = "cmn, bo, peh",
}
m["wul"] = {
"Silimo",
11732514,
"ngf-ngn",
"Latn",
}
m["wum"] = {
"Wumbvu",
36891,
"bnt-kel",
"Latn",
}
m["wun"] = {
"Bungu",
4997686,
"bnt-mby",
"Latn",
}
m["wur"] = {
"Wurrugu",
8039305,
"aus-wdj",
"Latn",
}
m["wut"] = {
"Wutung",
56743,
"paa-isk",
"Latn",
}
m["wuu"] = {
"Wu",
34290,
"zhx",
"Hants",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["wuv"] = {
"Wuvulu-Aua",
3062746,
"poz-aay",
"Latn",
}
m["wux"] = {
"Wulna",
13591670,
}
m["wuy"] = {
"Wauyai",
12953295,
"poz-hce",
"Latn",
}
m["wwa"] = {
"Waama",
7958576,
"nic-eov",
"Latn",
}
m["wwo"] = {
"Dorig",
3037047,
"poz-vnn",
"Latn",
}
m["wwr"] = {
"Warrwa",
7970852,
}
m["www"] = {
"Wawa",
36889,
"nic-mmb",
"Latn",
}
m["wxa"] = {
"Waxiang",
2252191,
"zhx",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["wxw"] = {
"Wardandi",
61999705,
}
m["wya"] = {
"Wyandot",
1185119,
"iro-nor",
"Latn",
}
m["wyb"] = {
"Ngiyambaa",
3913825,
"aus-cww",
"Latn",
}
m["wyi"] = {
"Woiwurrung",
8029099,
"aus-pam",
"Latn",
}
m["wym"] = {
"Vilamovian",
56485,
"gmw-hgm",
"Latn",
ancestors = "gmh",
strip_diacritics = {remove_diacritics = c.dotabove},
}
m["wyr"] = {
"Wayoró",
2875044,
"tup",
}
m["wyy"] = {
"Western Fijian",
3062751,
"poz-pcc",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
cfhpbn3sajoez0tfffvnbp4os4648vf
Mòideal:languages/data/3/z
828
16781
86305
2026-07-22T08:35:07Z
Altronic
4137
Copy from English Wiktionary
86305
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["zaa"] = {
"Sierra de Juárez Zapotec",
12953989,
"omq-zap",
"Latn",
}
m["zab"] = {
"San Juan Guelavía Zapotec",
5614751,
"omq-zpc",
"Latn",
}
m["zac"] = {
"Ocotlán Zapotec",
7076643,
"omq-zap",
"Latn",
}
m["zad"] = {
"Cajonos Zapotec",
5017997,
"omq-zpc",
"Latn",
}
m["zae"] = {
"Yareni Zapotec",
12645368,
"omq-zap",
"Latn",
}
m["zaf"] = {
"Ayoquesco Zapotec",
4831570,
"omq-zpc",
"Latn",
}
m["zag"] = {
"Zaghawa",
37007,
"ssa-sah",
"Latn", -- also Beria
}
m["zah"] = {
"Zangwal",
3441387,
"cdc-wst",
"Latn",
}
m["zai"] = {
"Isthmus Zapotec",
56728,
"omq-zpc",
"Latn",
}
m["zaj"] = {
"Zaramo",
8066599,
"bnt-ruv",
"Latn",
}
m["zak"] = {
"Zanaki",
8066018,
"bnt-lok",
"Latn",
}
m["zal"] = {
"Zauzou",
3616358,
"tbq-nus",
"Latn, Hani",
sort_key = {Hani = "Hani-sortkey"},
}
m["zam"] = {
"Central Mahuatlán Zapotec",
13541830,
"omq-zap",
"Latn",
}
m["zao"] = {
"Ozolotepec Zapotec",
7116610,
"omq-zap",
"Latn",
}
m["zap"] = {
"Zapotec",
13214,
"omq-zap",
"Latn",
}
m["zaq"] = {
"Aloápam Zapotec",
4734726,
"omq-zap",
"Latn",
}
m["zar"] = {
"Rincón Zapotec",
7334628,
"omq-zap",
"Latn",
}
m["zas"] = {
"Santo Domingo Albarradas Zapotec",
4709425,
"omq-zap",
"Latn",
}
m["zat"] = {
"Tabaa Zapotec",
7672849,
"omq-zap",
"Latn",
}
m["zau"] = {
"Zangskari",
771203,
"sit-lab",
"Tibt",
ancestors = "lbj",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["zav"] = {
"Yatzachi Zapotec",
8050301,
"omq-zpc",
"Latn",
}
m["zaw"] = {
"Mitla Zapotec",
3053288,
"omq-zpc",
"Latn",
}
m["zax"] = {
"Xadani Zapotec",
8042823,
"omq-zap",
"Latn",
}
m["zay"] = {
"Zayse-Zergulla",
673895,
"omv-eom",
"Latn",
}
m["zaz"] = {
"Zari",
3914398,
"cdc-wst",
"Latn",
}
m["zbt"] = {
"Batui",
16839143,
"poz-slb",
"Latn",
}
m["zca"] = {
"Coatecas Altas Zapotec",
5138603,
"omq-zap",
"Latn",
}
m["zdj"] = {
"Ngazidja Comorian",
3114653,
"bnt-com",
"Latn",
sort_key = "bnt-com-sortkey",
}
m["zea"] = {
"Zealandic",
237409,
"gmw-frk",
"Latn",
ancestors = "dum",
sort_key = {
from = {"^'([aeiouy].*)$"},
to = {"%1'"}
}
}
m["zeg"] = {
"Zenag",
12953345,
"poz-ocw",
"Latn",
}
m["zen"] = {
"Zenaga",
37005,
"ber",
"Latn",
}
m["zga"] = {
"Kinga",
11005332,
"bnt-bki",
"Latn",
}
m["zgh"] = {
"Moroccan Amazigh",
7598268,
"ber",
"Tfng",
translit = "Tfng-translit",
}
m["zgr"] = {
"Magori",
3277370,
"poz-ocw",
"Latn",
}
m["zhb"] = {
"Zhaba",
56334,
"sit-qia",
}
m["zhi"] = {
"Zhire",
3914910,
"nic-plc",
"Latn",
}
m["zhn"] = {
"Nong Zhuang",
7049385,
"tai-cen",
"Latn",
sort_key = {remove_diacritics = "%p"},
}
m["zhw"] = {
"Zhoa",
8070885,
"nic-rnw",
"Latn",
}
m["zia"] = {
"Zia",
3038636,
"ngf-nbi",
"Latn",
}
m["zib"] = {
"Zimbabwe Sign Language",
8072097,
"sgn",
}
m["zik"] = {
"Zimakani",
56740,
"paa-boa",
"Latn",
}
m["zil"] = {
"Zialo",
36991,
"dmn-msw",
"Latn",
}
m["zim"] = {
"Mesme",
56282,
"cdc-mas",
"Latn",
}
m["zin"] = {
"Zinza",
8072460,
"bnt-haj",
"Latn",
}
m["zir"] = {
"Ziriya",
3913943,
"nic-jer",
"Latn",
}
m["ziw"] = {
"Zigula",
37010,
"bnt-seu",
"Latn",
}
m["ziz"] = {
"Zizilivakan",
56300,
"cdc-cbm",
"Latn",
}
m["zka"] = {
"Kaimbulawa",
6348011,
"poz-mun",
"Latn",
}
m["zkb"] = {
"Koibal",
949259,
"syd",
"Latn, Cyrl",
}
m["zkd"] = {
"Kadu (Myanmar)", -- The name is duplicated with Kadu languages in Africa.
54324451,
"sit-luu",
"Latn", -- and also unencoded Kadu script
}
m["zkg"] = {
"Goguryeo",
706327,
"qfa-kor",
"Hani",
sort_key = "Hani-sortkey",
}
m["zkh"] = {
"Khorezmian Turkic",
25502,
"trk-kar",
"Arab",
ancestors = "xqa",
}
m["zkk"] = {
"Karankawa",
3192947,
"qfa-unc", -- extinct Texas coast language; fairly poorly attested, nearby languages poorly attested; maybe an isolate
"Latn",
}
m["zko"] = {
"Kott",
34163,
"qfa-yko",
"Latn, Cyrl",
}
m["zkp"] = {
"São Paulo Kaingáng",
7665661,
"sai-jee",
"Latn",
}
m["zkr"] = {
"Zakhring",
56996,
"sit-mdz",
"Latn, Hani",
sort_key = {Hani = "Hani-sortkey"},
}
m["zkt"] = {
"Khitan",
1064482,
"qfa-xgx",
"Kitl, Kits, Hani",
translit = {Kits = "zkt-translit"},
sort_key = {Hani = "Hani-sortkey"},
}
m["zku"] = {
"Kaurna",
6378899,
"aus-psw",
"Latn",
}
m["zkv"] = {
"Krevinian",
6436902,
"urj-fin",
"Latn",
ancestors = "vot",
}
m["zkz"] = {
"Khazar",
1067986,
"trk-ogr",
"Orkh",
-- Orkh translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["zma"] = {
"Manda (Australia)",
18650060,
"aus-dal",
"Latn",
}
m["zmb"] = {
"Zimba",
8071960,
"bnt-lgb",
"Latn",
}
m["zmc"] = {
"Margany",
10577017,
"aus-pam",
"Latn",
}
m["zmd"] = {
"Maridan",
10577273,
"aus-dal",
"Latn",
}
m["zme"] = {
"Mangerr",
10576387,
nil,
"Latn",
}
m["zmf"] = {
"Mfinu",
35915,
"bnt-tek",
"Latn",
}
m["zmg"] = {
"Marti Ke",
10577823,
"aus-dal",
"Latn",
}
m["zmh"] = {
"Makolkol",
12636052,
"paa-bai",
"Latn",
}
m["zmi"] = {
"Negeri Sembilan Malay",
3915909,
"poz-mly",
"Latn",
}
m["zmj"] = {
"Maridjabin",
10577274,
"aus-dal",
"Latn",
}
m["zmk"] = {
"Mandandanyi",
10576338,
"aus-pam",
"Latn",
}
m["zml"] = {
"Madngele",
10575155,
"aus-dal",
"Latn",
}
m["zmm"] = {
"Marimanindji",
10577424,
"aus-dal",
"Latn",
}
m["zmn"] = {
"Mbangwe",
35928,
"bnt-kel",
"Latn",
}
m["zmo"] = {
"Molo",
15974357,
"sdv-eje",
"Latn",
}
m["zmp"] = {
"Mbuun",
106249400,
"bnt",
"Latn",
}
m["zmq"] = {
"Mituku",
6883590,
"bnt-mbe",
"Latn",
}
m["zmr"] = {
"Maranungku",
6772792,
"aus-dal",
"Latn",
}
m["zms"] = {
"Mbesa",
6799676,
"bnt-ske",
"Latn",
}
m["zmt"] = {
"Maringarr",
10577443,
"aus-dal",
"Latn",
}
m["zmu"] = {
"Muruwari",
3915442,
"aus-pam",
"Latn",
}
m["zmv"] = {
"Mbariman-Gudhinma",
3915672,
"aus-pmn",
"Latn",
}
m["zmw"] = {
"Mbo (Congo)",
6799710,
"bnt-nya",
"Latn",
}
m["zmx"] = {
"Bomitaba",
35063,
"bnt-ngn",
"Latn",
}
m["zmy"] = {
"Mariyedi",
10577501,
"aus-dal",
"Latn",
}
m["zmz"] = {
"Mbandja",
3915310,
"bad",
"Latn",
}
m["zna"] = {
"Zan Gula",
863726,
"alv-bua",
"Latn",
}
m["zne"] = {
"Zande",
35015,
"znd",
"Latn",
}
m["zng"] = {
"Mang",
720192,
"mkh-mng",
"Latn",
}
m["znk"] = {
"Manangkari",
6746906,
"aus-wdj",
"Latn",
}
m["zns"] = {
"Mangas",
3438780,
"cdc-wst",
"Latn",
}
m["zoc"] = {
"Copainalá Zoque",
12954017,
"nai-miz",
"Latn",
}
m["zoh"] = {
"Chimalapa Zoque",
5099289,
"nai-miz",
"Latn",
}
m["zom"] = {
"Zou",
37011,
"tbq-kuk",
"Latn",
strip_diacritics = {remove_diacritics = c.circ .. c.acute .. c.grave .. c.dacute .. c.dgrave},
}
m["zoo"] = {
"Asunción Mixtepec Zapotec",
4811888,
"omq-zap",
"Latn",
}
m["zoq"] = {
"Tabasco Zoque",
323325,
"nai-miz",
"Latn",
}
m["zor"] = {
"Rayón Zoque",
12954015,
"nai-miz",
"Latn",
}
m["zos"] = {
"Francisco León Zoque",
12954011,
"nai-miz",
"Latn",
}
m["zpa"] = {
"Lachiguiri Zapotec",
6468403,
"omq-zap",
"Latn",
}
m["zpb"] = {
"Yautepec Zapotec",
7413392,
"omq-zap",
"Latn",
}
m["zpc"] = {
"Choapan Zapotec",
5103425,
"omq-zap",
"Latn",
}
m["zpd"] = {
"Southeastern Ixtlán Zapotec",
8050392,
"omq-zap",
"Latn",
}
m["zpe"] = {
"Petapa Zapotec",
7171675,
"omq-zap",
"Latn",
}
m["zpf"] = {
"San Pedro Quiatoni Zapotec",
7271640,
"omq-zpc",
"Latn",
}
m["zpg"] = {
"Guevea de Humboldt Zapotec",
13459953,
"omq-zap",
"Latn",
}
m["zph"] = {
"Totomachapan Zapotec",
7828390,
"omq-zap",
"Latn",
}
m["zpi"] = {
"Santa María Quiegolani Zapotec",
7271823,
"omq-zpc",
"Latn",
}
m["zpj"] = {
"Quiavicuzas Zapotec",
7271642,
"omq-zap",
"Latn",
}
m["zpk"] = {
"Tlacolulita Zapotec",
7810685,
"omq-zpc",
"Latn",
}
m["zpl"] = {
"Lachixío Zapotec",
6468420,
"omq-zap",
"Latn",
}
m["zpm"] = {
"Mixtepec Zapotec",
7414598,
"omq-zpc",
"Latn",
}
m["zpn"] = {
"Santa Inés Yatzechi Zapotec",
8050300,
"omq-zap",
"Latn",
}
m["zpo"] = {
"Amatlán Zapotec",
4740613,
"omq-zpc",
"Latn",
}
m["zpp"] = {
"El Alto Zapotec",
5350733,
"omq-zap",
"Latn",
}
m["zpq"] = {
"Zoogocho Zapotec",
8074100,
"omq-zpc",
"Latn",
}
m["zpr"] = {
"Santiago Xanica Zapotec",
8042924,
"omq-zap",
"Latn",
}
m["zps"] = {
"Coatlán Zapotec",
7420514,
"omq-zap",
"Latn",
}
m["zpt"] = {
"San Vicente Coatlán Zapotec",
13541831,
"omq-zap",
"Latn",
}
m["zpu"] = {
"Yalálag Zapotec",
8047534,
"omq-zpc",
"Latn",
}
m["zpv"] = {
"Chichicapan Zapotec",
5096050,
"omq-zap",
"Latn",
}
m["zpw"] = {
"Zaniza Zapotec",
8066220,
"omq-zpc",
"Latn",
}
m["zpx"] = {
"San Baltazar Loxicha Zapotec",
7413390,
"omq-zap",
"Latn",
}
m["zpy"] = {
"Mazaltepec Zapotec",
6798223,
"omq-zap",
"Latn",
}
m["zpz"] = {
"Texmelucan Zapotec",
7708357,
"omq-zpc",
"Latn",
}
m["zra"] = {
"Gaya",
5528695,
"qfa-kor",
"Hani",
sort_key = "Hani-sortkey",
}
m["zrg"] = {
"Mirgan",
6873206,
"inc-eas",
}
m["zrn"] = {
"Zirenkel",
3441365,
"cdc-est",
"Latn",
}
m["zro"] = {
"Záparo",
10206,
"sai-zap",
"Latn",
}
m["zrs"] = {
"Mairasi",
3038645,
"paa-mai",
"Latn",
}
m["zsa"] = {
"Sarasira",
57333197,
"poz-ocw",
}
m["zsk"] = { -- attested?
"Kaskean",
6374586,
}
m["zsl"] = {
"Zambian Sign Language",
8065713,
"sgn",
}
m["zsr"] = {
"Southern Rincon Zapotec",
12954000,
"omq-zpc",
"Latn",
}
m["zsu"] = {
"Sukurum",
57333741,
"poz-ocw",
}
m["zte"] = {
"Elotepec Zapotec",
5367223,
"omq-zap",
"Latn",
}
m["ztg"] = {
"Xanaguía Zapotec",
8042887,
"omq-zpc",
"Latn",
}
m["ztl"] = {
"Lapaguía-Guivini Zapotec",
6488084,
"omq-zap",
"Latn",
}
m["ztm"] = {
"San Agustín Mixtepec Zapotec",
7413220,
"omq-zap",
"Latn",
}
m["ztn"] = {
"Santa Catarina Albarradas Zapotec",
7419277,
"omq-zap",
"Latn",
}
m["ztp"] = {
"Loxicha Zapotec",
6694268,
"omq-zap",
"Latn",
}
m["ztq"] = {
"Quioquitani-Quierí Zapotec",
3574818,
"omq-zpc",
"Latn",
}
m["zts"] = {
"Tilquiapan Zapotec",
7802959,
"omq-zpc",
"Latn",
}
m["ztt"] = {
"Tejalapan Zapotec",
13510225,
"omq-zap",
"Latn",
}
m["ztu"] = {
"San Pablo Güilá Zapotec",
5626813,
"omq-zap",
"Latn",
}
m["ztx"] = {
"Zaachila Zapotec",
8063390,
"omq-zap",
"Latn",
}
m["zty"] = {
"Yatee Zapotec",
3574815,
"omq-zpc",
"Latn",
}
m["zua"] = {
"Zeem",
3450131,
"cdc-wst",
"Latn",
}
m["zuh"] = {
"Tokano",
7813481,
"ngf-gah",
"Latn",
}
m["zum"] = {
"Kumzari",
36158,
"ira-swi",
"Arab",
ancestors = "pal",
}
m["zun"] = {
"Zuni",
10188,
"qfa-iso",
"Latn",
}
m["zuy"] = {
"Zumaya",
56626,
"cdc-mas",
"Latn",
}
m["zwa"] = {
"Zay",
10195,
"sem-eth",
"Ethi",
}
m["zyp"] = {
"Zyphe",
57004,
"tbq-kuk",
"Latn",
}
m["zza"] = {
"Zazaki",
10199,
"ira-zgr",
"Latn",
dotted_dotless_i = true,
sort_key = "zza-sortkey",
wikimedia_codes = "diq",
}
m["zzj"] = {
"Zuojiang Zhuang",
13848149,
"tai-cen",
"Latn",
sort_key = {remove_diacritics = "%p"},
}
return require("Module:languages").finalizeData(m, "language")
iprbne0zsebhn4gs15vhe8q01btiaj3
Mòideal:languages/data/3/v
828
16782
86306
2026-07-22T08:36:20Z
Altronic
4137
Copy from English Wiktionary
86306
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["vaa"] = {
"Vaagri Booli",
7907798,
"inc",
"Taml",
}
m["vae"] = {
"Vale",
3450194,
"csu-val",
}
m["vag"] = {
"Vagla",
36637,
"nic-gnw",
}
m["vah"] = {
"Varhadi",
155645,
"inc-sou",
"Deva, Modi",
ancestors = "omr",
translit = {
Deva = "mr-translit",
Modi = "mr-Modi-translit",
},
}
m["vai"] = {
"Vai",
36939,
"dmn-vak",
"Vaii",
translit = "Vaii-translit",
}
m["vaj"] = {
"Sekele",
56528,
}
m["val"] = {
"Vehes",
7918407,
}
m["vam"] = {
"Vanimo",
3327415,
"paa-isk",
"Latn",
}
m["van"] = {
"Valman",
7912479,
"paa-trr",
"Latn",
}
m["vao"] = {
"Vao",
2160405,
"poz-vnc",
"Latn",
}
m["vap"] = {
"Vaiphei",
56368,
"tbq-kuk",
}
m["var"] = {
"Huarijio",
10974017,
"azc-trc",
"Latn",
}
m["vas"] = {
"Vasavi",
765418,
}
m["vau"] = {
"Vanuma",
7915259,
"bnt-nya",
}
m["vav"] = {
"Varli",
7915983,
"inc-sou",
"Deva, Gujr",
}
m["vay"] = {
"Vayu",
7917585,
"sit-kiw",
}
m["vbb"] = {
"Southeast Babar",
12952247,
"poz-tim",
}
m["vbk"] = {
"Southwestern Bontoc",
63313677,
"phi",
"Latn",
}
m["vec"] = {
"Venetan",
32724,
"roa-iwr",
ancestors = "vec-old",
"Latn, Armn",
-- Armn translit in [[Module:scripts/data]]
}
m["ved"] = {
"Veddah",
2567934,
"crp",
"Sinh"
}
m["vem"] = {
"Vemgo-Mabas",
56268,
}
m["veo"] = {
"Ventureño",
56712,
"nai-chu",
"Latn",
}
m["vep"] = {
"Veps",
32747,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"ʹ"}
},
strip_diacritics = {
from = {"'"},
to = {"ʹ"}
},
sort_key = {
from = {
"č", "š", "ž", "ü", "ä", "ö", -- 2 chars
"z", "ʹ" -- 1 char
},
to = {
"c" .. p[1], "s" .. p[1], "s" .. p[3], "y" .. p[1], "y" .. p[2], "y" .. p[3],
"s" .. p[2], "y" .. p[4],
}
},
}
m["ver"] = {
"Mom Jango",
35862,
"alv-dur",
}
m["vgr"] = {
"Vaghri",
7908480,
"inc-bhi",
"Gujr",
translit = "gu-translit",
}
m["vgt"] = {
"Flemish Sign Language",
2107617,
"sgn",
}
m["vic"] = {
"Virgin Islands Creole",
7933935,
"crp",
"Latn",
ancestors = "en",
}
m["vid"] = {
"Vidunda",
7928151,
"bnt-ruv",
}
m["vif"] = {
"Vili",
3558409,
"bnt-kng",
"Latn",
}
m["vig"] = {
"Viemo",
36912,
"alv-sav",
}
m["vil"] = {
"Vilela",
3409297,
}
m["vis"] = {
"Vishavan",
14916908,
"dra-mal",
}
m["vit"] = {
"Viti",
11011055,
"nic-grf",
}
m["viv"] = {
"Iduna",
5989839,
"poz-ocw",
"Latn",
}
m["vjk"] = {
"Bajjika",
3636001,
"inc-bih",
"Deva, Kthi",
translit = {
Deva = "hi-translit",
Kthi = "bho-Kthi-translit",
},
}
m["vka"] = {
"Kariyarra",
13586632,
"aus-nga",
"Latn",
}
m["vki"] = {
"Ija-Zuba",
11011389,
"nic-pls",
ancestors = "uji",
}
m["vkj"] = {
"Kujarge",
33448,
"qfa-unc", -- Chadic, Cushitic or an isolate; still living but only 200 words known
}
m["vkk"] = {
"Kaur",
6378867,
"poz-mly", -- per Wikipedia
}
m["vkl"] = {
"Kulisusu",
3200326,
"poz-btk",
"Latn",
}
m["vkm"] = {
"Kamakan",
3192316,
"sai-mje",
"Latn",
}
m["vko"] = {
"Kodeoha",
3198209,
"poz-btk", -- per Wikipedia
}
m["vkp"] = {
"Korlai Creole Portuguese",
3915520,
"crp",
"Latn",
ancestors = "idb",
}
m["vkt"] = {
"Tenggarong Kutai Malay",
12683226,
"poz-mly", -- per Wikipedia
}
m["vku"] = {
"Kurrama",
3915684,
"aus-nga",
"Latn",
}
m["vlp"] = {
"Valpei",
7912582,
"poz-vnn",
"Latn",
}
m["vls"] = {
"West Flemish",
100103,
"gmw-frk",
"Latn",
ancestors = "dum",
}
m["vma"] = {
"Martuthunira",
975399,
"aus-nga",
"Latn",
}
m["vmb"] = {
"Mbabaram",
3303475,
"aus-pam",
"Latn",
}
m["vmc"] = {
"Juxtlahuaca Mixtec",
25559582,
"omq-mxt",
"Latn",
}
m["vmd"] = {
"Mudu Koraga",
12952656,
"dra-kor",
"Knda",
-- Knda translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["vme"] = {
"East Masela",
18487451,
"poz-tim",
"Latn",
}
m["vmf"] = {
"East Franconian",
497345,
"gmw-hgm",
"Latn",
ancestors = "gmh",
sort_key = "vmf-sortkey",
}
m["vmg"] = {
"Vinitiri",
17053237,
"poz-ocw",
"Latn",
}
m["vmh"] = {
"Maraghei",
36220,
"xme-ttc",
ancestors = "xme-ttc-eas",
}
m["vmi"] = {
"Miwa",
10586712,
"aus-wor",
"Latn",
}
m["vmj"] = {
"Ixtayutla Mixtec",
6101163,
"omq-mxt",
"Latn",
}
m["vmk"] = {
"Makhuwa-Shirima",
2963909,
"bnt-mak",
"Latn",
ancestors = "vmw",
}
m["vml"] = {
"Malgana",
6743201,
"aus-psw",
"Latn",
}
m["vmm"] = {
"Mitlatongo Mixtec",
6881813,
"omq-mxt",
"Latn",
}
m["vmp"] = {
"Soyaltepec Mazatec",
7572000,
"omq-maz", -- per Wikipedia
"Latn",
}
m["vmq"] = {
"Soyaltepec Mixtec",
7572001,
"omq-mxt",
"Latn",
}
m["vmr"] = {
"Marenje",
11128833,
ancestors = "vmw",
"bnt-mak",
}
-- vms "Moskela" is extinct and unattested; see Wikipedia
m["vmu"] = {
"Muluridyi",
10590149,
"aus-pam", -- Yalanjic but we don't have that family
"Latn",
}
m["vmv"] = {
"Valley Maidu",
5096458,
"nai-mdu",
"Latn",
}
m["vmw"] = {
"Makhuwa",
33882,
"bnt-mak",
"Latn",
strip_diacritics = { remove_diacritics = c.acute },
}
m["vmx"] = {
"Tamazola Mixtec",
12953734,
"omq-mxt",
"Latn",
}
m["vmy"] = {
"Ayautla Mazatec",
14916912,
"omq-maz",
"Latn",
}
m["vmz"] = {
"Mazatlán Mazatec",
12953706,
"omq-maz",
"Latn",
}
m["vnk"] = {
"Lovono",
3211090,
"poz-tem",
"Latn",
}
m["vnm"] = {
"Neve'ei",
2157431,
"poz-vnc",
"Latn",
}
m["vnp"] = {
"Vunapu",
7943647,
"poz-vnn",
"Latn",
}
m["vor"] = {
"Voro",
3914407,
"alv-yun",
"Latn",
}
m["vot"] = {
"Votic",
32858,
"urj-fin",
"Latn",
display_text = {
from = {"'"},
to = {"ʹ"}
},
strip_diacritics = {
from = {"'"},
to = {"ʹ"}
},
sort_key = {
from = {
"tš",
"č", "š", "ž", "õ", "ä", "ö", "ü",
"z",
"ʹ"
},
to = {
"t" .. p[1],
"c" .. p[1], "s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4],
"s" .. p[2],
""
}
},
standard_chars = "AaBbČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšZzŽžTtUuVvÕõÄäÖöÜüʹ" .. c.punc,
}
m["vra"] = {
"Vera'a",
3555689,
"poz-vnn",
"Latn",
}
m["vro"] = {
"Võro",
32762,
"urj-fin",
"Latn",
wikimedia_codes = "fiu-vro",
strip_diacritics = { remove_diacritics = c.caronbelow },
sort_key = {
from = {
"ǵ", "ḿ", "ń", "ṕ", "ŕ", "ś", "v́"
},
to = {
"g'", "m'", "n'", "p'", "r'", "s'", "v'"
}
},
}
m["vrs"] = {
"Varisi",
3554807,
"poz-ocw",
}
m["vrt"] = {
"Burmbar",
2928522,
"poz-vnc",
"Latn",
}
m["vsi"] = {
"Moldova Sign Language",
12953478,
"sgn",
}
m["vsl"] = {
"Venezuelan Sign Language",
3322064,
"sgn",
}
m["vsv"] = {
"Valencian Sign Language",
32663,
"sgn",
}
m["vto"] = {
"Vitou",
7937210,
"paa-bvi",
"Latn",
}
m["vum"] = {
"Vumbu",
36629,
"bnt-sir",
}
m["vun"] = {
"Vunjo",
12953261,
"bnt-chg",
"Latn",
}
m["vut"] = {
"Vute",
36897,
"nic-mmb",
"Latn",
}
m["vwa"] = {
"Awa (China)",
2874642,
"mkh-pal",
"Latn, Mymr",
}
return require("Module:languages").finalizeData(m, "language")
jwcnz673j14x3p9coetlvxtqx17k128
Mòideal:languages/JSON
828
16783
86307
2026-07-22T08:38:43Z
Altronic
4137
Copy from English Wiktionary
86307
Scribunto
text/plain
local export = {}
function export.getByCode(frame)
local args = frame.args
local langcode = args[1] or error("Language code has not been specified. Please pass parameter 1 to the module invocation.")
local lang = require("Module:languages").getByCode(langcode) or error("Language code not found")
return lang:toJSON()
end
return export
9c7x38jshnxocdc7q9gr6z997z6dnq4
Mòideal:languages/error
828
16784
86308
2026-07-22T08:48:01Z
Altronic
4137
Copy from English Wiktionary
86308
Scribunto
text/plain
--[=[
Throw an error for an invalid language code or script code.
`code` (required) is the bad code and can be nil or a non-string.
`param` (required) is the name of the parameter in which the code was contained. It can be a string, a number (for a
numeric param, in which case the param will show up in the error message as an ordinal such as "first" or "second"),
or `true` if no parameter can be clearly identified. It can also be a function of one argument (an error message) or
two arguments (an error message and a number of stack frames to ignore, same as in the error() function itself), in
which case the function will be called with the same error message as if `true` were passed in. (This is useful e.g.
when parsing inline modifiers, where the parameter name may not be available or may not be so clearly identifiable,
but an error function is often available.)
`code_desc` (optional) is text describing what the code is; by default, "language code".
`template_text` (optional) is a string specifying the template that generated the error, or a function
to generate this string. If given, it will be displayed in the error message.
]=]
local dump = mw.dumpObject
local function internal_err(param, types, param_type)
error(("Internal error: the parameter %s must be %s, but received %s"):format(dump(param), types, param_type))
end
return function(code, param, code_desc, template_tag)
local is_callable = require("Module:fun").is_callable
if param == nil then
param = true
end
if not code_desc then
code_desc = "language code"
end
if template_tag then
if is_callable(template_tag) then
template_tag = template_tag()
else
local template_tag_type = type(template_tag)
if template_tag_type ~= "string" then
internal_err("template_tag", "a function, callable table or nil", "a " .. template_tag_type)
end
end
template_tag = (" (original template: %s)"):format(template_tag)
else
template_tag = ""
end
local param_is_callable = is_callable(param)
local function err(msg)
msg = msg .. template_tag
if not(param_is_callable) then
error(require("Module:string utilities").ucfirst(msg) .. ".", 3)
end
param(msg, 3)
end
if not (param == true or param_is_callable) then
local param_type = type(param)
if not (param_type == "string" or param_type == "number") then
internal_err("param", "a number, string, function, callable table, true or nil", param == false and "false" or "a " .. param_type)
end
param = ("parameter %s "):format(dump(param))
end
if code == nil or code == "" then
if param == true or param_is_callable then
err(code_desc .. " is missing")
else
err(param .. "(" .. code_desc .. ") is missing")
end
else
local code_type = type(code)
if code_type ~= "string" then
internal_err("code", "a string or nil", "a " .. code_type)
end
end
err(("%smust be a valid %s; the value %s is not valid (see [[Wiktionary:List of languages]])"):format(
(param == true or param_is_callable) and "" or param, code_desc, dump(code)
))
end
68uzi96qzi6p7xo9o94htn1wi1zdfbk
Mòideal:languages/error/doc
828
16785
86309
2026-07-22T08:48:21Z
Altronic
4137
Copy from English Wiktionary
86309
wikitext
text/x-wiki
{{maintenance box|yellow<!--
-->| title = Use the second parameter of <code>getByCode()</code> instead of directly invoking this module.<!--
-->| image = [[File:Text-x-generic with pencil.svg|40px]]<!--
-->| text = The preferred way to generate an error message for an invalid language code is to pass the parameter name holding the language code as the parameter <code>getByCode()</code> rather than directly invoking this module. Code in some modules directly invokes this module, but this is generally old code that should be cleaned up.<!--
-->}}
==Preferred calling convention==
<syntaxhighlight lang="lua">
local m_languages = require("Module:languages")
local lang = m_languages.getByCode(frame.args[1], 1)
</syntaxhighlight>
Here, we call <code>getByCode</code> with the parameter name in the second parameter.
==Old (obsolete) calling convention==
<code><span class="n">require</span><span class="p">(</span><span class="s2">"Module:languages/error"</span><span class="p">)</span><span class="p">(</span><span class="n">lang</span><span class="p">,</span> <span class="n">param</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></code>
Looks at a supposed language code passed through a template parameter and returns a helpful error message depending on whether the language code has a valid form (two or three lowercase basic Latin letters, two or three groups of three lowercase basic Latin letters separated by hyphens).
Add the parameter value in argument #1 and the parameter name in argument #2. For instance, if parameter {{code|lua|1}} of the template is supposed to be a language code, this function can be called the following way:
<syntaxhighlight lang="lua">
local m_languages = require("Module:languages")
local lang = m_languages.getByCode(frame.args[1]) or require("Module:languages/error")(frame.args[1], 1)
</syntaxhighlight>
If you would like the error message to say something other than "language code", place the phrase in argument #3.
<includeonly>
[[Category:Language and script modules]]
</includeonly>
bxt40v93gn3ls6ysnlu4302aw6w00hm
Mòideal:languages/data/3/r
828
16786
86310
2026-07-22T08:50:17Z
Altronic
4137
Copy from English Wiktionary
86310
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["raa"] = {
"Dungmali",
56871,
"sit-kic",
}
m["rab"] = {
"Chamling",
3436664,
"sit-kic",
"Deva",
}
m["rac"] = {
"Rasawa",
56443,
"paa-rsa",
"Latn",
}
m["rad"] = {
"Rade",
3429088,
"cmc",
"Latn",
}
m["raf"] = {
"Western Meohang",
17442461,
"sit-kie",
}
m["rag"] = {
"Logooli",
6667767,
"bnt-lok",
"Latn",
}
m["rah"] = {
"Rabha",
7278686,
"tbq-bdg",
"Beng, Latn",
}
m["rai"] = {
"Ramoaaina",
3418509,
"poz-ocw",
"Latn",
}
m["rak"] = {
"Tulu-Bohuai",
2908807,
"poz-aay",
"Latn",
}
m["ral"] = {
"Ralte",
7288392,
"tbq-kuk",
"Latn",
}
m["ram"] = {
"Canela",
2936334,
"sai-nje",
"Latn",
}
m["ran"] = {
"Riantana",
7322169,
"paa-kol",
"Latn",
}
m["rao"] = {
"Rao",
11732596,
"paa-ram",
"Latn",
}
m["rap"] = {
"Rapa Nui",
36746,
"poz-pep",
"Latn",
}
m["raq"] = {
"Saam",
7395644,
"sit-kic",
}
m["rar"] = {
"Rarotongan",
36745,
"poz-pep",
"Latn",
}
m["ras"] = {
"Tegali",
36522,
"nic-ras",
"Latn",
}
m["rat"] = {
"Razajerdi",
7299461,
"xme-ttc",
ancestors = "xme-ttc-eas",
}
m["rau"] = {
"Raute",
7296262,
"sit-gma",
"Deva, Latn",
}
m["rav"] = {
"Sampang",
3449115,
"sit-kic",
}
m["raw"] = {
"Rawang",
542564,
"sit-nng",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.macron},
}
m["rax"] = {
"Rang",
3913345,
"alv-mum",
}
m["ray"] = {
"Rapa",
36417,
"poz-pep",
"Latn",
}
m["raz"] = {
"Rahambuu",
3417555,
"poz-btk",
}
m["rbb"] = {
"Rumai Palaung",
12953797,
"mkh-pal",
"Mymr",
}
m["rbk"] = {
"Northern Bontoc",
63311016,
"phi",
"Latn",
}
m["rbl"] = {
"East Miraya Bikol",
18664557,
"phi",
"Latn",
}
m["rcf"] = {
"Réunion Creole French",
13198,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["rdb"] = {
"Rudbari",
12953072,
"xme",
ancestors = "xme-mid",
}
m["rea"] = {
"Rerau",
7314883,
"ngf-rai", -- placed in Nuru subfamily by Pawley-Hammarström
"Latn",
}
m["reb"] = {
"Rembong",
7311570,
"poz-cet",
"Latn",
}
m["ree"] = {
"Rejang Kayan",
3423957,
"poz",
"Latn",
}
m["reg"] = {
"Kara (Tanzania)",
6367567,
"bnt-haj",
}
m["rei"] = {
"Reli",
7310982,
}
m["rej"] = {
"Rejang",
3056339,
"poz",
"Rjng, Latn",
}
m["rel"] = {
"Rendille",
3447297,
"cus-som",
"Latn",
}
m["rem"] = {
"Remo",
3501825,
"sai-pan",
"Latn",
}
m["ren"] = {
"Rengao",
6583692,
"mkh",
"Latn",
}
m["rer"] = {
"Rer Bare",
12953857,
"qfa-unc", -- extinct, might not exist
}
m["res"] = {
"Reshe",
36258,
"nic-knj",
}
m["ret"] = {
"Retta",
7317113,
"paa-alp",
"Latn",
}
m["rey"] = {
"Reyesano",
3111857,
"sai-tac",
"Latn",
}
m["rga"] = {
"Roria",
7366825,
"poz-vnn",
"Latn",
}
m["rge"] = {
"Romano-Greek",
3915435,
"qfa-mix",
"Latn", -- and/or Grek?
ancestors = "rom, el",
}
m["rgk"] = {
"Rangkas",
7292645,
"sit-alm",
}
m["rgn"] = {
"Romagnol",
1641543,
"roa-emr",
ancestors = "rgn-old",
"Latn",
wikimedia_codes = "eml",
}
m["rgr"] = {
"Resígaro",
3450504,
"awd",
"Latn",
}
m["rgs"] = {
"Southern Roglai",
12953069,
"cmc",
"Latn",
}
m["rgu"] = {
"Ringgou",
7334886,
"poz-tim",
}
m["rhg"] = {
"Rohingya",
3241177,
"inc-bas",
"Rohg, Arab, Mymr, Latn, Beng",
ancestors = "inc-obn",
translit = {
Rohg = "Rohg-translit",
},
}
m["rhp"] = {
"Yahang",
8046792,
"paa-hya",
"Latn",
}
m["ria"] = {
"Reang",
12953063,
"tbq-bdg",
}
m["rif"] = {
"Tarifit",
34174,
"ber",
"Latn, Tfng, Arab",
translit = { Tfng = "Tfng-translit" },
standard_chars = {
Latn = "AaBbCcDdḌḍEeƐɛFfGgƔɣĞğHhḤḥIiJjKkLlMmNnPpQqRrŘřSsṢṣTtṬṭUuWwXxYyZzẒẓʷ",
Tfng = "ⴰⴳⴷⴹⴼⵖⵉⴽⵍⵎⵏⵓⵔⵙⵛⵜⵡⵢⵣⵥⴱⵀⵅⵊⴳⵯⵕⵚⵟⵇⵃⵄⴻⴽⵯ",
c.punc
},
}
m["ril"] = {
"Riang",
2741615,
"mkh-pal",
}
m["rim"] = {
"Nyaturu",
7193418,
"bnt-tkm",
"Latn",
}
m["rin"] = {
"Nungu",
3913350,
"nic-nin",
"Latn",
}
m["rir"] = {
"Ribun",
7322443,
"day",
"Latn",
}
m["rit"] = {
"Ritarungo",
7336730,
"aus-yol",
"Latn",
}
m["riu"] = {
"Riung",
7336938,
"poz-cet",
"Latn",
}
m["rjg"] = {
"Rajong",
7286370,
"poz-cet",
"Latn",
}
m["rji"] = {
"Raji",
7286138,
"sit-gma",
}
m["rjs"] = {
"Rajbanshi",
12640969,
"inc-krd",
"Deva",
}
m["rka"] = {
"Kraol",
3199593,
"mkh-ban",
"Khmr", -- also Latn?
}
m["rkb"] = {
"Rikbaktsa",
2585357,
"sai-mje",
"Latn",
}
m["rkh"] = {
"Rakahanga-Manihiki",
3119695,
"poz-pep",
"Latn",
}
m["rki"] = {
"Rakhine",
3450749,
"tbq-brm",
"Mymr",
ancestors = "obr",
}
m["rkm"] = {
"Marka",
36030,
"dmn-wmn",
"Latn",
}
m["rkt"] = {
"Kamta",
3241618,
"inc-krd",
"as-Beng, Latn",
translit = "as-translit",
}
m["rkw"] = {
"Arakwal",
34295800,
"aus-pam",
"Latn",
}
m["rma"] = {
"Rama",
3444486,
"cba",
}
m["rmb"] = {
"Rembarunga",
7311553,
"aus-gun",
"Latn",
}
m["rmc"] = {
"Carpathian Romani",
5045611,
"inc-rom",
"Latn",
}
m["rmd"] = {
"Traveller Danish",
12640779,
"qfa-mix",
"Latn",
ancestors = "rom, da",
}
m["rme"] = {
"Angloromani",
541279,
"qfa-mix",
"Latn",
ancestors = "rom, en",
}
m["rmf"] = {
"Kalo Finnish Romani",
2093214,
"inc-rom",
"Latn",
}
m["rmg"] = {
"Traveller Norwegian",
3177352,
"qfa-mix",
"Latn",
ancestors = "rom, no",
}
m["rmh"] = {
"Murkim",
4308074,
"paa-lmu",
"Latn",
}
m["rmi"] = {
"Lomavren",
2495696,
"qfa-mix",
"Latn, Armn",
ancestors = "pra-sau, hy",
-- Armn translit in [[Module:scripts/data]]
override_translit = true,
}
m["rmk"] = {
"Romkun",
7363236,
"paa-tam",
"Latn",
}
m["rml"] = {
"Baltic Romani",
513736,
"inc-rom",
"Latn",
}
m["rmm"] = {
"Roma",
4414831,
}
m["rmn"] = {
"Balkan Romani",
1256701,
"inc-rom",
"Latn",
}
m["rmo"] = {
"Sinte Romani",
1793299,
"inc-rom",
"Latn",
}
m["rmp"] = {
"Rempi",
7312214,
"ngf-han",
"Latn",
}
m["rmq"] = {
"Caló",
35466,
"qfa-mix",
"Latn",
ancestors = "rom, osp, roa-opt",
}
m["rms"] = {
"Romanian Sign Language",
7362575,
"sgn",
}
m["rmt"] = {
"Domari",
35394,
"inc-cen",
"Latn, Arab, Hebr",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["rmu"] = {
"Tavringer Romani",
27808413,
"qfa-mix",
"Latn",
ancestors = "rom, sv",
}
m["rmv"] = {
"Romanova",
1298715,
"art",
type = "appendix-constructed",
}
m["rmw"] = {
"Welsh Romani",
2097387,
"inc-rom",
"Latn",
}
m["rmx"] = {
"Romam",
22694600,
"mkh",
}
m["rmy"] = {
"Vlax Romani",
2669199,
"inc-rom",
"Latn",
}
m["rmz"] = {
"Marma",
21403256,
"tbq-brm",
"Mymr",
ancestors = "obr",
}
m["rnd"] = {
"Ruwund",
7383564,
"bnt-lun",
"Latn",
}
m["rng"] = {
"Ronga",
2520717,
"bnt-tsr",
"Latn",
}
m["rnl"] = {
"Ranglong",
7292878,
}
m["rnn"] = {
"Roon",
7366335,
"poz-hce",
"Latn",
}
m["rnp"] = {
"Rongpo",
7365672,
"sit-whm",
}
m["rnw"] = {
"Rungwa",
7379873,
"bnt-mwi",
"Latn",
}
m["rob"] = {
"Tae'",
12473476,
"poz-ssw",
"Latn",
}
m["roc"] = {
"Cacgia Roglai",
2932485,
"cmc",
"Latn",
}
m["rod"] = {
"Rogo",
3914894,
"nic-kmk",
"Latn",
}
m["roe"] = {
"Ronji",
3441763,
"poz-ocw",
"Latn",
}
m["rof"] = {
"Rombo",
33330,
"bnt-chg",
"Latn",
}
m["rog"] = {
"Northern Roglai",
3439680,
"cmc",
"Latn",
}
m["rol"] = {
"Romblomanon",
13202,
"phi",
"Latn",
}
m["rom"] = {
"Romani",
13201,
"inc-rom",
"Latn, Cyrl",
}
m["roo"] = {
"Rotokas",
13203,
"paa-nbo",
"Latn",
}
m["rop"] = {
"Australian Kriol",
35671,
"crp",
"Latn",
ancestors = "en",
}
m["ror"] = {
"Rongga",
12473464,
"poz-cet",
"Latn",
}
m["rou"] = {
"Runga",
56793,
}
m["row"] = {
"Dela-Oenale",
5253046,
"poz-tim",
"Latn",
}
m["rpn"] = {
"Repanbitip",
7313900,
"poz-vnc",
"Latn",
}
m["rpt"] = {
"Rapting",
7294362,
"ngf-han",
"Latn",
}
m["rri"] = {
"Ririo",
2404190,
"poz-ocw",
}
m["rrm"] = {
"Moriori",
2741879,
"poz-pep",
"Latn",
}
m["rro"] = {
"Roro",
34197,
"poz-ocw",
"Latn",
}
m["rrt"] = {
"Arritinngithigh",
4796002,
nil,
"Latn",
}
m["rsb"] = {
"Romano-Serbian",
1268244,
"qfa-mix",
"Latn", -- and Cyrl?
ancestors = "rom, sh",
}
m["rsl"] = {
"Russian Sign Language",
13210,
"sgn",
}
m["rsk"] = {
"Pannonian Rusyn",
35660,
"zlw",
"Cyrl",
ancestors = "zlw-osk",
translit = "rsk-translit",
sort_key = {
Cyrl = {
from = {"ґ", "є", "ї", "ь"},
to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "я" .. p[1]}
}
},
standard_chars = "АаБбВвГ㥴ДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe.
}
m["rsm"] = {
"Miriwoong Sign Language",
24090240,
"sgn",
}
m["rsn"] = {
"Rwandan Sign Language",
25041935,
"sgn",
}
m["rtc"] = {
"Rungtu",
7379867,
"tbq-kuk",
}
m["rth"] = {
"Ratahan",
3420026,
"phi",
"Latn",
}
m["rtm"] = {
"Rotuman",
36754,
"poz-pcc",
"Latn",
}
m["rtw"] = {
"Rathawi",
12953854,
"inc-bhi",
}
m["rub"] = {
"Gungu",
11165235,
"bnt-glb",
"Latn",
}
m["ruc"] = {
"Ruuli",
7383562,
"bnt-nyg",
}
m["rue"] = {
"Carpathian Rusyn",
26245,
"zle",
"Cyrl",
ancestors = "zle-ort",
translit = "rue-translit",
strip_diacritics = {remove_diacritics = c.grave .. c.acute},
sort_key = "rue-sortkey",
}
m["ruf"] = {
"Luguru",
3437661,
"bnt-ruv",
"Latn",
}
m["rug"] = {
"Roviana",
3445546,
"poz-ocw",
"Latn",
}
m["ruh"] = {
"Ruga",
7378127,
}
m["rui"] = {
"Rufiji",
7377946,
"bnt-mbi",
}
m["ruk"] = {
"Che",
3915445,
"nic-nin",
"Latn",
}
m["ruo"] = {
"Istro-Romanian",
33622,
"roa-eas",
"Latn",
}
m["rup"] = {
"Aromanian",
29316,
"roa-eas",
"Latn, Polyt",
translit = {
-- FIXME: formerly no translit specified for Polyt; unclear if the default [[Module:grc-translit]] is
-- acceptable, so we disable it for now
Polyt = false,
},
sort_key = {
Latn = { from = {"ã"}, to = {"a"..p[1]} },
},
-- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
wikimedia_codes = "roa-rup",
}
m["ruq"] = {
"Megleno-Romanian",
13358,
"roa-eas",
"Latn",
}
m["rut"] = {
"Rutul",
36757,
"cau-wsm",
"Cyrl, Latn",
translit = "rut-translit",
override_translit = true,
display_text = {
Cyrl = s["cau-Cyrl-displaytext"]
},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
}
m["ruu"] = {
"Lanas Lobu",
12953676,
}
m["ruy"] = {
"Mala (Nigeria)",
3913381,
"nic-kau",
}
m["ruz"] = {
"Ruma",
3913326,
"nic-kau",
}
m["rwa"] = {
"Rawo",
3504269,
"paa-shi",
"Latn",
}
m["rwk"] = {
"Rwa",
7985624,
"bnt-chg",
}
m["rwm"] = {
"Amba",
788423,
"bnt-kbi",
"Latn",
}
m["rwo"] = {
"Rawa",
11732598,
"ngf-gmo",
"Latn",
}
m["rxd"] = {
"Ngardi",
7022063,
}
m["rxw"] = {
"Karuwali",
6881575,
}
m["ryn"] = {
"Northern Amami Ōshima",
2840988,
"jpx-nry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["rys"] = {
"Yaeyama",
34203,
"jpx-sry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["ryu"] = {
"Okinawan",
34233,
"jpx-nry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["rzh"] = {
"Razihi",
16911222,
"sem-osa",
"Arab",
ancestors = "sem-srb",
}
return require("Module:languages").finalizeData(m, "language")
4sqvlkfu9j1fe65tdv7qe3y6hskgdff
Mòideal:languages/data/3/b
828
16787
86311
2026-07-22T08:51:26Z
Altronic
4137
Copy from English Wiktionary
86311
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["baa"] = {
"Babatana",
2877785,
"poz-ocw",
"Latn",
}
m["bab"] = {
"Bainouk-Gunyuño",
35508,
"alv-bny",
"Latn",
}
m["bac"] = {
"Baduy",
3449885,
"poz-msa",
"Latn, Sund",
ancestors = "osn",
translit = {
Sund = "Sund-translit"
},
}
m["bae"] = {
"Baré",
3504087,
"awd",
"Latn",
}
m["baf"] = {
"Nubaca",
36270,
"nic-ymb",
"Latn",
}
m["bag"] = {
"Tuki",
36621,
"nic-mba",
"Latn",
}
m["bah"] = {
"Bahamian Creole",
2669229,
"crp",
"Latn",
ancestors = "en",
}
m["baj"] = {
"Barakai",
3502030,
"poz-cet",
"Latn",
}
m["bal"] = {
"Baluchi",
33049,
"ira-nwi",
"fa-Arab",
}
m["ban"] = {
"Balinese",
33070,
"poz-bss",
"Latn, Bali",
}
m["bao"] = {
"Waimaha",
2883738,
"sai-tuc",
"Latn",
}
m["bap"] = {
"Bantawa",
56500,
"sit-kic",
"Krai, Deva",
}
m["bar"] = {
"Bavarian",
29540,
"gmw-hgm",
"Latn",
ancestors = "gmh",
}
m["bas"] = {
"Basaa",
33093,
"bnt-bsa",
"Latn",
}
m["bau"] = {
"Badanchi",
11001650,
"nic-jrw",
"Latn",
}
m["bav"] = {
"Babungo",
34885,
"nic-rnn",
"Latn",
}
m["baw"] = {
"Bambili-Bambui",
34880,
"nic-nge",
"Latn",
}
m["bax"] = {
"Bamum",
35280,
"nic-nun",
"Latn, Bamu",
}
m["bay"] = {
"Batuley",
8828787,
"poz",
"Latn",
}
m["bba"] = {
"Baatonum",
34889,
"alv-sav",
"Latn",
}
m["bbb"] = {
"Barai",
4858206,
"ngf-koi",
"Latn",
}
m["bbc"] = {
"Toba Batak",
33017,
"btk",
"Latn, Batk",
}
m["bbd"] = {
"Bau",
4873415,
"ngf-gum",
"Latn",
}
m["bbe"] = {
"Bangba",
34895,
"nic-nke",
"Latn",
}
m["bbf"] = {
"Baibai",
56902,
"paa-fas",
"Latn",
}
m["bbg"] = {
"Barama",
34884,
"bnt-sir",
"Latn",
}
m["bbh"] = {
"Bugan",
3033554,
"mkh-pkn",
"Latn",
}
m["bbi"] = {
"Barombi",
34985,
"bnt-bsa",
"Latn",
}
m["bbj"] = {
"Ghomala'",
35271,
"bai",
"Latn",
}
m["bbk"] = {
"Babanki",
34790,
"nic-rnc",
"Latn",
}
m["bbl"] = {
"Bats",
33259,
"cau-nkh",
"Geor",
-- Geor translit in [[Module:scripts/data]]
override_translit = true,
strip_diacritics = {
remove_diacritics = c.tilde .. c.macron .. c.breve,
from = {"<sup>ნ</sup>"},
to = {"ნ"}
},
}
m["bbm"] = { -- name includes prefix
"Babango",
34819,
"bnt-bta",
"Latn",
}
m["bbn"] = {
"Uneapa",
7884126,
"poz-ocw",
"Latn",
}
m["bbo"] = {
"Konabéré",
35371,
"dmn-snb",
"Latn",
}
m["bbp"] = {
"West Central Banda",
7984377,
"bad",
"Latn",
}
m["bbq"] = {
"Bamali",
34901,
"nic-nun",
"Latn",
}
m["bbr"] = {
"Girawa",
5564185,
"ngf-kok",
"Latn",
}
m["bbs"] = {
"Bakpinka",
3515061,
"nic-ucr",
"Latn",
}
m["bbt"] = {
"Mburku",
3441324,
"cdc-wst",
"Latn",
}
m["bbu"] = {
"Bakulung",
35580,
"nic-jrn",
"Latn",
}
m["bbv"] = {
"Karnai",
6372803,
"poz-ocw",
"Latn",
}
m["bbw"] = {
"Baba",
34822,
"nic-nun",
"Latn",
}
m["bbx"] = { -- cf bvb
"Bubia",
34953,
"nic-bds",
"Latn",
ancestors = "bvb",
}
m["bby"] = {
"Befang",
34960,
"nic-bds",
"Latn",
}
m["bca"] = {
"Central Bai",
12628803,
"sit-bai",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["bcb"] = {
"Bainouk-Samik",
36390,
"alv-bny",
"Latn",
}
m["bcd"] = {
"North Babar",
7054041,
"poz-tim",
"Latn",
}
m["bce"] = {
"Bamenyam",
34968,
"nic-nun",
"Latn",
}
m["bcf"] = {
"Bamu",
3503788,
"paa-kiw",
"Latn",
}
m["bcg"] = {
"Baga Pokur",
31172660,
"alv-nal",
"Latn",
}
m["bch"] = {
"Bariai",
2884502,
"poz-ocw",
"Latn",
}
m["bci"] = {
"Baoule",
35107,
"alv-ctn",
"Latn",
}
m["bcj"] = {
"Bardi",
3913852,
"aus-nyu",
"Latn",
}
m["bck"] = {
"Bunaba",
580923,
"aus-bub",
"Latn",
}
m["bcl"] = {
"Central Bikol",
33284,
"phi",
"Latn, Tglg",
translit = {
Tglg = "bcl-translit",
},
override_translit = true,
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ,
}
},
sort_key = {
Latn = "tl-sortkey",
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy" .. c.punc,
},
}
m["bcm"] = {
"Banoni",
2882857,
"poz-ocw",
"Latn",
}
m["bcn"] = {
"Bibaali",
34892,
"alv-mye",
"Latn",
}
m["bco"] = {
"Kaluli",
6354586,
"ngf-bos",
"Latn",
}
m["bcp"] = {
"Bali",
3515074,
"bnt-kbi",
"Latn",
}
m["bcq"] = {
"Bench",
35108,
"omv",
"Latn",
}
m["bcr"] = {
"Babine-Witsuwit'en",
27864,
"ath-nor",
"Latn",
}
m["bcs"] = {
"Kohumono",
35590,
"nic-ucn",
"Latn",
}
m["bct"] = {
"Bendi",
8836662,
"csu-mle",
"Latn",
}
m["bcu"] = {
"Biliau",
2874658,
"poz-ocw",
"Latn",
}
m["bcv"] = {
"Shoo-Minda-Nye",
36548,
"nic-jkn",
"Latn",
}
m["bcw"] = {
"Bana",
56272,
"cdc-cbm",
"Latn",
}
m["bcy"] = {
"Bacama",
56274,
"cdc-cbm",
"Latn",
}
m["bcz"] = {
"Bainouk-Gunyaamolo",
35506,
"alv-bny",
"Latn",
}
m["bda"] = {
"Bayot",
35019,
"alv-jol",
"Latn",
}
m["bdb"] = {
"Basap",
3504208,
"poz-bnn",
"Latn",
}
m["bdc"] = {
"Emberá-Baudó",
11173166,
"sai-chc",
"Latn",
}
m["bdd"] = {
"Bunama",
4997416,
"poz-ocw",
"Latn",
}
m["bde"] = {
"Bade",
56239,
"cdc-wst",
"Latn",
}
m["bdf"] = {
"Biage",
48037487,
"ngf-koi",
"Latn",
}
m["bdg"] = {
"Bonggi",
2910053,
"poz-bnn",
"Latn",
}
m["bdh"] = {
"Tara Baka",
2880165,
"csu-bbk",
"Latn",
}
m["bdi"] = {
"Burun",
35040,
"sdv-niw",
"Latn",
}
m["bdj"] = {
"Bai (South Sudan)",
34894,
"nic-ser",
"Latn",
}
m["bdk"] = {
"Budukh",
35397,
"cau-ssm",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["bdl"] = {
"Indonesian Bajau",
2880038,
"poz",
"Latn",
}
m["bdm"] = {
"Buduma",
56287,
"cdc-cbm",
"Latn",
}
m["bdn"] = {
"Baldemu",
56280,
"cdc-cbm",
"Latn",
}
m["bdo"] = {
"Morom",
759770,
"csu-bgr",
"Latn",
}
m["bdp"] = {
"Bende",
8836490,
"bnt",
"Latn",
}
m["bdq"] = {
"Bahnar",
32924,
"mkh-ban",
"Latn",
}
m["bdr"] = {
"West Coast Bajau",
2880037,
"poz-sbj",
"Latn",
}
m["bds"] = {
"Burunge",
56617,
"cus-sou",
"Latn",
}
m["bdt"] = {
"Bokoto",
4938812,
"gba-wes",
"Latn",
}
m["bdu"] = {
"Oroko",
36278,
"bnt-saw",
"Latn",
}
m["bdv"] = {
"Bodo Parja",
8845881,
"inc-eas",
"Orya",
}
m["bdw"] = {
"Baham",
3513309,
"paa-mbi",
"Latn",
}
m["bdx"] = {
"Budong-Budong",
4985158,
"poz-ssw",
"Latn",
}
m["bdy"] = {
"Bandjalang",
2980386,
"aus-pam",
"Latn",
}
m["bdz"] = {
"Badeshi",
33028,
"iir",
"Arab, Latn",
}
m["bea"] = {
"Beaver",
20826,
"ath-nor",
"Latn",
}
m["beb"] = {
"Bebele",
34976,
"bnt-btb",
"Latn",
}
m["bec"] = {
"Iceve-Maci",
35449,
"nic-tvc",
"Latn",
}
m["bed"] = {
"Bedoanas",
4879330,
"poz-hce",
"Latn",
}
m["bee"] = {
"Byangsi",
56904,
"sit-alm",
"Deva",
}
m["bef"] = {
"Benabena",
2895638,
"ngf-gor",
"Latn",
}
m["beg"] = {
"Belait",
2894198,
"poz-swa",
"Latn",
}
m["beh"] = {
"Biali",
34961,
"nic-eov",
"Latn",
}
m["bei"] = {
"Bekati'",
3441683,
"day",
"Latn",
}
m["bej"] = {
"Beja",
33025,
"cus",
"Arab, Latn",
strip_diacritics = {
Latn = {
remove_diacritics = c.acute,
}
},
}
m["bek"] = {
"Bebeli",
4878430,
"poz-ocw",
"Latn",
}
m["bem"] = {
"Bemba",
33052,
"bnt-sbi",
"Latn",
}
m["beo"] = {
"Beami",
3504079,
"ngf-bos",
"Latn",
}
m["bep"] = {
"Besoa",
8840465,
"poz-kal",
"Latn",
}
m["beq"] = {
"Beembe",
3196320,
"bnt-kng",
"Latn",
}
m["bes"] = {
"Besme",
289832,
"alv-kim",
"Latn",
}
m["bet"] = {
"Guiberoua Bété",
11019185,
"kro-bet",
"Latn",
}
m["beu"] = {
"Blagar",
4923846,
"paa-alp",
"Latn",
}
m["bev"] = {
"Daloa Bété",
11155819,
"kro-bet",
"Latn",
}
m["bew"] = {
"Betawi",
33014,
"crp",
"Latn",
ancestors = "ms",
}
m["bex"] = {
"Jur Modo",
56682,
"csu-bbk",
"Latn",
}
m["bey"] = {
"Beli (New Guinea)",
3504170,
"paa-trr",
"Latn",
}
m["bez"] = {
"Kibena",
2502949,
"bnt-bki",
"Latn",
}
m["bfa"] = {
"Bari",
35042,
"sdv-bri",
"Latn",
}
m["bfb"] = {
"Pauri Bareli",
7155462,
"inc-bhi",
"Deva",
}
m["bfc"] = {
"Panyi Bai",
12642165,
"sit-nba",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["bfd"] = {
"Bafut",
34888,
"nic-nge",
"Latn",
}
m["bfe"] = {
"Betaf",
4897329,
"paa-bvi",
"Latn",
}
m["bff"] = {
"Bofi",
34914,
"gba-eas",
"Latn",
}
m["bfg"] = {
"Busang Kayan",
9231909,
"poz",
"Latn",
}
m["bfh"] = {
"Blafe",
12628007,
"paa-ton",
"Latn",
}
m["bfi"] = {
"British Sign Language",
33000,
"sgn",
"Latn", -- when documented
}
m["bfj"] = {
"Bafanji",
34890,
"nic-nun",
"Latn",
}
m["bfk"] = {
"Ban Khor Sign Language",
3441103,
"sgn",
}
m["bfl"] = {
"Banda-Ndélé",
34850,
"bad-cnt",
"Latn",
}
m["bfm"] = {
"Mmen",
36132,
"nic-rnc",
"Latn",
}
m["bfn"] = {
"Bunak",
35101,
"paa-tap",
"Latn",
}
m["bfo"] = {
"Malba Birifor",
11150710,
"nic-mre",
"Latn",
}
m["bfp"] = {
"Beba",
35050,
"nic-nge",
"Latn",
}
m["bfq"] = {
"Badaga",
33205,
"dra-kan",
"Taml, Knda, Mlym",
translit = {
--Taml = "Taml-translit",
},
-- Knda translit in [[Module:scripts/data]]
-- Mlym translit in [[Module:scripts/data]]
}
m["bfr"] = {
"Bazigar",
8829558,
"inc",
}
m["bfs"] = {
"Southern Bai",
12952250,
"sit-bai",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["bft"] = {
"Balti",
33086,
"sit-lab",
"fa-Arab, Deva, Tibt",
override_translit = "Tibt",
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
strip_diacritics = {
["fa-Arab"] = {
from = {"هٔ", "ٱ"},
to = {"ه", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.kashida .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
},
},
}
m["bfu"] = {
"Gahri",
5516952,
"sit-whm",
"Takr, Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["bfw"] = {
"Bondo",
2567942,
"mun",
"Orya",
}
m["bfx"] = {
"Bantayanon",
16837866,
"phi",
"Latn",
}
m["bfy"] = {
"Bagheli",
2356364,
"inc-hie",
"Deva",
ancestors = "inc-oaw",
translit = "hi-translit",
}
m["bfz"] = {
"Mahasu Pahari",
6733460,
"him",
"Deva, Takr",
translit = "hi-translit",
}
m["bga"] = {
"Gwamhi-Wuri",
6707102,
"nic-knn",
"Latn",
}
m["bgb"] = {
"Bobongko",
4935896,
"poz-slb",
"Latn",
}
m["bgc"] = {
"Haryanvi",
33410,
"inc-hiw",
"Deva",
translit = "hi-translit",
}
m["bgd"] = {
"Rathwi Bareli",
7295692,
"inc-bhi",
"Deva",
}
m["bge"] = {
"Bauria",
4873579,
"inc-bhi",
"Deva",
}
m["bgf"] = {
"Bangandu",
34938,
"gba-sou",
"Latn",
}
m["bgg"] = {
"Bugun",
3514220,
"sit-khb",
"Latn",
}
m["bgi"] = {
"Giangan",
4842057,
"phi",
"Latn",
}
m["bgj"] = {
"Bangolan",
34862,
"nic-nun",
"Latn",
}
m["bgk"] = {
"Bit",
2904868,
"mkh-pal",
"Latn", -- also Hani?
}
m["bgl"] = {
"Bo",
8845514,
"mkh-vie",
}
m["bgo"] = {
"Baga Koga",
35695,
"alv-bag",
"Latn",
}
m["bgq"] = {
"Bagri",
2426319,
"raj",
"Deva",
}
m["bgr"] = {
"Bawm Chin",
56765,
"tbq-kuk",
"Latn",
}
m["bgs"] = {
"Tagabawa",
7675121,
"mno",
"Latn",
}
m["bgt"] = {
"Bughotu",
2927723,
"poz-sls",
"Latn",
}
m["bgu"] = {
"Mbongno",
36141,
"nic-mmb",
"Latn",
}
m["bgv"] = {
"Warkay-Bipim",
4915439,
"paa-yaq",
"Latn",
}
m["bgw"] = {
"Bhatri",
8841054,
"inc-eas",
"Deva",
}
m["bgx"] = {
"Balkan Gagauz Turkish",
2360396,
"trk-ogz",
"Latn",
ancestors = "trk-oat",
}
m["bgy"] = {
"Benggoi",
4887742,
"poz-cma",
"Latn",
}
m["bgz"] = {
"Banggai",
3441692,
"poz-slb",
"Latn",
}
m["bha"] = {
"Bharia",
4901287,
"inc",
"Deva",
}
m["bhb"] = {
"Bhili",
33229,
"inc-bhi",
"Deva, Gujr",
translit = {
Deva = "hi-translit",
Gujr = "gu-translit",
},
}
m["bhc"] = {
"Biga",
2902375,
"poz-hce",
"Latn",
}
m["bhd"] = {
"Bhadrawahi",
4900565,
"him",
"Arab, Deva",
translit = {Deva = "hi-translit"},
}
m["bhe"] = {
"Bhaya",
8841168,
"raj",
}
m["bhf"] = {
"Odiai",
56690,
"qfa-dis", -- Papuan; no consensus; may be in the Kwomtari family, an isolate and/or distantly related to the
-- Torricelli family.
"Latn",
}
m["bhg"] = {
"Binandere",
3503802,
"ngf-bin",
"Latn",
}
m["bhh"] = {
"Bukhari",
56469,
"ira-swi",
"Cyrl, Hebr, Latn, fa-Arab",
ancestors = "tg",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["bhi"] = {
"Bhilali",
4901729,
"inc-bhi",
"Deva",
}
m["bhj"] = {
"Bahing",
56442,
"sit-kiw",
"Deva, Latn",
}
m["bhl"] = {
"Bimin",
4913743,
"ngf-mok",
"Latn",
}
m["bhm"] = {
"Bathari",
2586893,
"sem-sar",
"Arab, Latn",
}
m["bhn"] = {
"Bohtan Neo-Aramaic",
33230,
"sem-nna",
"Syrc",
}
m["bho"] = {
"Bhojpuri",
33268,
"inc-bih",
"Deva, Kthi",
wikimedia_codes = "bh",
translit = {
Deva = "bho-translit",
Kthi = "bho-Kthi-translit",
},
}
m["bhp"] = {
"Bima",
2796873,
"poz-cet",
"Latn",
}
m["bhq"] = {
"South Tukang Besi",
12643975,
"poz-mun",
"Latn",
}
m["bhs"] = {
"Buwal",
3515065,
"cdc-cbm",
"Latn",
}
m["bht"] = {
"Bhattiyali",
4901452,
"him",
"Deva",
}
m["bhu"] = {
"Bhunjia",
8841766,
"inc-hal",
"Deva, Orya",
}
m["bhv"] = {
"Bahau",
3502039,
"poz",
"Latn",
}
m["bhw"] = {
"Biak",
1961488,
"poz-hce",
"Latn",
}
m["bhx"] = { -- spurious?
"Bhalay",
8840773,
"inc",
}
m["bhy"] = {
"Bhele",
4901671,
"bnt-kbi",
"Latn",
}
m["bhz"] = {
"Bada",
4840520,
"poz-kal",
"Latn",
}
m["bia"] = {
"Badimaya",
3442745,
"aus-psw",
"Latn",
}
m["bib"] = {
"Bissa",
32934,
"dmn-bbu",
"Latn",
}
--- Bikaru [bic] is spurious
m["bid"] = {
"Bidiyo",
56258,
"cdc-est",
"Latn",
}
m["bie"] = {
"Bepour",
4890914,
"ngf-kum",
"Latn",
}
m["bif"] = {
"Biafada",
35099,
"alv-ten",
"Latn",
}
m["big"] = {
"Biangai",
8842027,
"paa-kun",
"Latn",
}
m["bij"] = {
"Kwanka",
35598,
"nic-tar",
"Latn",
}
m["bil"] = {
"Bile",
34987,
"nic-jrn",
"Latn",
}
m["bim"] = {
"Bimoba",
34971,
"nic-grm",
"Latn",
}
m["bin"] = {
"Edo",
35375,
"alv-eeo",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.grave .. c.macron .. c.dgrave},
sort_key = {
from = {"ẹ", "gb", "gh", "kh", "kp", "mw", "nw", "ny", "ọ", "rh", "rr", "vb"},
to = {"e" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "k" .. p[2], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "r" .. p[1], "r" .. p[1], "v" .. p[1]}
},
}
m["bio"] = {
"Nai",
3508074,
"paa-kwo",
"Latn",
}
m["bip"] = {
"Bila",
2902626,
"bnt-kbi",
"Latn",
}
m["biq"] = {
"Bipi",
2904312,
"poz-aay",
"Latn",
}
m["bir"] = {
"Bisorio",
8844749,
"ngf-oen",
"Latn",
}
m["bit"] = {
"Berinomo",
56447,
"paa-sep",
"Latn",
}
m["biu"] = {
"Biete",
4904687,
"tbq-kuk",
"Latn",
}
m["biv"] = {
"Southern Birifor",
32859745,
"nic-mre",
"Latn",
}
m["biw"] = {
"Kol (Cameroon)",
35582,
"bnt-mka",
"Latn",
}
m["bix"] = {
"Bijori",
3450686,
"mun",
"Deva",
}
m["biy"] = {
"Birhor",
3450469,
"mun",
"Deva",
}
m["biz"] = {
"Baloi",
3450590,
"bnt-ngn",
"Latn",
}
m["bja"] = {
"Budza",
3046889,
"bnt-bun",
"Latn",
}
m["bjb"] = {
"Barngarla",
3439071,
"aus-pam",
"Latn",
}
m["bjc"] = {
"Bariji",
4690919,
"ngf-yar",
"Latn",
}
m["bje"] = {
"Biao-Jiao Mien",
3503800,
"hmx-mie",
"Hani, Latn",
sort_key = {Hani = "Hani-sortkey"},
}
m["bjf"] = {
"Barzani Jewish Neo-Aramaic",
33234,
"sem-nna",
"Hebr", -- maybe others
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["bjg"] = {
"Bidyogo",
35365,
"alv-bak",
"Latn",
}
m["bjh"] = {
"Bahinemo",
56361,
"paa-sep",
"Latn",
}
m["bji"] = {
"Burji",
34999,
"cus-hec",
"Latn, Ethi",
}
m["bjj"] = {
"Kannauji",
2726867,
"inc-hiw",
"Deva",
}
m["bjk"] = {
"Barok",
2884743,
"poz-ocw",
"Latn",
}
m["bjl"] = {
"Bulu (New Guinea)",
4997162,
"poz-ocw",
"Latn",
}
m["bjm"] = {
"Bajelani",
4848866,
"ira-zgr",
"Latn, Arab",
ancestors = "hac",
}
m["bjn"] = {
"Banjarese",
33151,
"poz-mly",
"Latn, Arab",
}
m["bjo"] = {
"Mid-Southern Banda",
42303990,
"bad-cnt",
"Latn",
}
m["bjp"] = {
"Fanamaket",
56704263,
"poz-oce",
"Latn",
}
m["bjr"] = {
"Binumarien",
538364,
"ngf-tai",
"Latn",
}
m["bjs"] = {
"Bajan",
2524014,
"crp",
"Latn",
ancestors = "en",
}
m["bjt"] = {
"Balanta-Ganja",
19359034,
"alv-bak",
"Arab, Latn",
}
m["bju"] = {
"Busuu",
35046,
"nic-fru",
"Latn",
}
m["bjv"] = {
"Bedjond",
8829831,
"csu-sar",
"Latn",
}
m["bjw"] = {
"Bakwé",
34899,
"kro-ekr",
"Latn",
}
m["bjx"] = {
"Banao Itneg",
12627559,
"phi",
"Latn",
}
m["bjy"] = {
"Bayali",
4874263,
"aus-pam",
"Latn",
}
m["bjz"] = {
"Baruga",
2886189,
"ngf-bin",
"Latn",
}
m["bka"] = {
"Kyak",
35653,
"alv-bwj",
"Latn",
}
m["bkc"] = {
"Baka",
34905,
"nic-nkb",
"Latn",
}
m["bkd"] = {
"Binukid",
4914553,
"mno",
"Latn",
}
m["bkf"] = {
"Beeke",
3441375,
"bnt-kbi",
"Latn",
}
m["bkg"] = {
"Buraka",
35066,
"nic-nkg",
"Latn",
}
m["bkh"] = {
"Bakoko",
34866,
"bnt-bsa",
"Latn",
}
m["bki"] = {
"Baki",
11024697,
"poz-vnc",
"Latn",
}
m["bkj"] = {
"Pande",
36263,
"bnt-ngn",
"Latn",
}
m["bkk"] = { -- written in Balti script
"Brokskat",
2925988,
"inc-shn",
"Tibt, Arab",
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- (NOTE: formerly not present, probably an accidental omission)
}
m["bkl"] = {
"Berik",
378743,
"paa-tor",
"Latn",
}
m["bkm"] = {
"Kom (Cameroon)",
1656595,
"nic-rnc",
"Latn",
}
m["bkn"] = {
"Bukitan",
3446774,
"poz-bnn",
"Latn",
}
m["bko"] = {
"Kwa'",
35567,
"bai",
"Latn",
}
m["bkp"] = {
"Iboko",
35089,
"bnt-ngn",
"Latn",
}
m["bkq"] = {
"Bakairí",
56846,
"sai-pek",
"Latn",
}
m["bkr"] = {
"Bakumpai",
3436626,
"poz-brw",
"Latn",
}
m["bks"] = {
"Masbate Sorsogon",
16113356,
"phi",
"Latn",
}
m["bkt"] = {
"Boloki",
4144560,
"bnt-zbi",
"Latn",
ancestors = "lse",
}
m["bku"] = {
"Buhid",
1002956,
"phi",
"Latn, Buhd",
translit = {
Buhd = "bku-translit",
},
override_translit = true,
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ,
}
},
sort_key = {
Latn = "tl-sortkey",
},
standard_chars = {
Latn = "AaBbKkDdEeFfGgHhIiLlMmNnOoPpRrSsTtUuWwYy" .. c.punc,
},
}
m["bkv"] = {
"Bekwarra",
34954,
"nic-ben",
"Latn",
}
m["bkw"] = {
"Bekwel",
34950,
"bnt-bek",
"Latn",
}
m["bkx"] = {
"Baikeno",
11200640,
"poz-tim",
"Latn",
}
m["bky"] = {
"Bokyi",
35087,
"nic-ben",
"Latn",
}
m["bkz"] = {
"Bungku",
2928207,
"poz-btk",
"Latn",
}
m["bla"] = {
"Blackfoot",
33060,
"alg",
"Latn, Cans",
}
m["blb"] = {
"Bilua",
35003,
"qfa-dis", -- Papuan; isolate per Glottolog, Central Solomon per Ross (2005) and Pedrós (2015)
"Latn",
}
m["blc"] = {
"Bella Coola",
977808,
"sal",
"Latn",
}
m["bld"] = {
"Bolango",
3450578,
"phi",
"Latn",
}
m["ble"] = {
"Balanta-Kentohe",
56789,
"alv-bak",
"Latn",
}
m["blf"] = {
"Buol",
2928278,
"phi",
"Latn",
}
m["blg"] = {
"Balau",
4850134,
"poz-mly",
"Latn",
}
m["blh"] = {
"Kuwaa",
35579,
"kro",
"Latn",
}
m["bli"] = {
"Bolia",
34910,
"bnt-mon",
"Latn",
}
m["blj"] = {
"Bulungan",
9229310,
"poz",
"Latn",
}
m["blk"] = {
"Pa'o Karen",
7121294,
"kar",
"Mymr",
}
m["bll"] = {
"Biloxi",
2903780,
"sio-ohv",
"Latn",
}
m["blm"] = {
"Beli (South Sudan)",
56821,
"csu-bbk",
"Latn",
}
m["bln"] = {
"Southern Catanduanes Bikol",
7569754,
"phi",
"Latn",
}
m["blo"] = {
"Anii",
34838,
"alv-ntg",
"Latn",
}
m["blp"] = {
"Blablanga",
2905245,
"poz-ocw",
"Latn",
}
m["blq"] = {
"Baluan-Pam",
2881675,
"poz-aay",
"Latn",
}
m["blr"] = {
"Blang",
4925096,
"mkh-pal",
"Latn, Tale, Lana, Thai",
sort_key = { -- FIXME: This needs to be converted into the current standardized format.
from = {"[%pᪧๆ]", "[᩠ᩳ-᩿]", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", "[็-๎]", "([เแโใไ])([ก-ฮ])"},
to = {"", "", "ᩈᩈ", "ᩁ", "ᩃ", "ᨦ", "%1ᨮ", "%1ᨻ", "ᩣ", "", "%2%1"}
},
}
m["bls"] = {
"Balaesang",
4849796,
"poz",
"Latn",
}
m["blt"] = {
"Tai Dam",
56407,
"tai-swe",
"Tavt, Latn",
--translit = "Tavt-translit",
sort_key = {
Tavt = {
from = {"[꪿ꫀ꫁ꫂ]", "([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])"},
to = {"", "%2%1"}
},
},
}
m["blv"] = {
"Kibala",
4939959,
"bnt-kmb",
"Latn",
}
m["blw"] = {
"Balangao",
4850033,
"phi",
"Latn",
}
m["blx"] = {
"Mag-Indi Ayta",
1931221,
"phi",
"Latn",
}
m["bly"] = {
"Notre",
11009194,
"nic-wov",
"Latn",
}
m["blz"] = {
"Balantak",
4850053,
"poz-slb",
"Latn",
}
m["bma"] = {
"Lame",
3913997,
"nic-jrn",
"Latn",
}
m["bmb"] = {
"Bembe",
4885023,
"bnt-lgb",
"Latn",
}
m["bmc"] = {
"Biem",
4904523,
"poz-ocw",
"Latn",
}
m["bmd"] = {
"Baga Manduri",
35815,
"alv-bag",
"Latn",
}
m["bme"] = {
"Limassa",
11004666,
"nic-nkb",
"Latn",
}
m["bmf"] = {
"Bom",
35088,
"alv-mel",
"Latn",
}
m["bmg"] = {
"Bamwe",
34867,
"bnt-bun",
"Latn",
}
m["bmh"] = {
"Kein",
6383764,
"ngf-kok",
"Latn",
}
m["bmi"] = {
"Bagirmi",
34903,
"csu-bgr",
"Latn",
}
m["bmj"] = {
"Bote-Majhi",
9229570,
"inc-bih",
"Deva",
}
m["bmk"] = {
"Ghayavi",
5555976,
"poz-ocw",
"Latn",
}
m["bml"] = {
"Bomboli",
35055,
"bnt-ngn",
"Latn",
}
m["bmn"] = {
"Bina",
8843664,
"poz-ocw",
"Latn",
}
m["bmo"] = {
"Bambalang",
34868,
"nic-nun",
"Latn",
}
m["bmp"] = {
"Bulgebi",
4996380,
"ngf-war",
"Latn",
}
m["bmq"] = {
"Bomu",
35065,
"nic-bwa",
"Latn",
}
m["bmr"] = {
"Muinane",
3027894,
"sai-bor",
"Latn",
}
m["bmt"] = {
"Biao Mon",
8842159,
"hmx-mie",
}
m["bmu"] = {
"Somba-Siawari",
5000983,
"ngf-kbm",
"Latn",
}
m["bmv"] = {
"Bum",
35058,
"nic-rnc",
"Latn",
}
m["bmw"] = {
"Bomwali",
34984,
"bnt-ndb",
"Latn",
}
m["bmx"] = {
"Baimak",
3450546,
"ngf-han",
"Latn",
}
m["bmz"] = {
"Baramu",
4858315,
"paa-tir",
"Latn",
}
m["bna"] = {
"Bonerate",
4941729,
"poz-mun",
"Latn",
}
m["bnb"] = {
"Bookan",
4943150,
"poz-san",
"Latn",
}
m["bnd"] = {
"Banda",
3504147,
"poz-cma",
"Latn",
}
m["bne"] = {
"Bintauna",
4914533,
"phi",
"Latn",
}
m["bnf"] = {
"Masiwang",
6783305,
"poz-cma",
"Latn",
}
m["bng"] = {
"Benga",
34952,
"bnt-saw",
"Latn",
}
m["bni"] = {
"Bangi",
34936,
"bnt-bmo",
"Latn",
}
m["bnj"] = {
"Eastern Tawbuid",
18757427,
"phi",
"Latn",
}
m["bnk"] = {
"Bierebo",
2902029,
"poz-vnc",
"Latn",
}
m["bnl"] = {
"Boon",
56616,
"cus-eas",
"Latn",
}
m["bnm"] = {
"Batanga",
34979,
"bnt-saw",
"Latn",
}
m["bnn"] = {
"Bunun",
56505,
"map",
"Latn",
}
m["bno"] = {
"Asi",
29490,
"phi",
"Latn",
}
m["bnp"] = {
"Bola",
4938876,
"poz-ocw",
"Latn",
}
m["bnq"] = {
"Bantik",
2883521,
"poz",
"Latn",
}
m["bnr"] = {
"Butmas-Tur",
2928942,
"poz-vnn",
"Latn",
}
m["bns"] = {
"Bundeli",
56399,
"inc-hiw",
"Deva",
translit = "hi-translit",
}
m["bnu"] = {
"Bentong",
4890644,
"poz-ssw",
"Latn",
}
m["bnv"] = {
"Beneraf",
4941733,
"paa-tor",
"Latn",
}
m["bnw"] = {
"Bisis",
56356,
"paa-sep",
"Latn",
}
m["bnx"] = {
"Bangubangu",
3438330,
"bnt-lbn",
"Latn",
}
m["bny"] = {
"Bintulu",
3450775,
"poz-swa",
"Latn",
}
m["bnz"] = {
"Beezen",
35083,
"nic-ykb",
"Latn",
}
m["boa"] = {
"Bora",
2375468,
"sai-bor",
"Latn",
}
m["bob"] = {
"Aweer",
56526,
"cus-som",
"Latn",
}
m["boe"] = {
"Mundabli",
36127,
"nic-beb",
"Latn",
}
m["bof"] = {
"Bolon",
3913301,
"dmn-emn",
"Latn",
}
m["bog"] = {
"Bamako Sign Language",
4853284,
"sgn",
}
m["boh"] = {
"North Boma",
35080,
"bnt-bdz",
"Latn",
}
m["boi"] = {
"Barbareño",
56391,
"nai-chu",
"Latn",
}
m["boj"] = {
"Anjam",
3504136,
"ngf-min",
"Latn",
}
m["bok"] = {
"Bonjo",
34942,
"alv",
"Latn",
}
m["bol"] = {
"Bole",
3436680,
"cdc-wst",
"Latn",
}
m["bom"] = {
"Berom",
35013,
"nic-beo",
"Latn",
}
m["bon"] = {
"Bine",
4914077,
"paa-etf",
"Latn",
}
m["boo"] = {
"Tiemacèwè Bozo",
12643582,
"dmn-snb",
"Latn", -- and others?
}
m["bop"] = {
"Bonkiman",
4942134,
"ngf-yup",
"Latn",
}
m["boq"] = {
"Bogaya",
7207578,
"qfa-dis", -- Papuan; isolate per Glottolog, grouped in Duna-Pogaya family by Voorhoeve (1975), Ross (2005) and Usher (2018)
"Latn",
}
m["bor"] = {
"Borôro",
32986,
"sai-mje",
"Latn",
}
m["bot"] = {
"Bongo",
2910067,
"csu-bbk",
"Latn",
}
m["bou"] = {
"Bondei",
4941378,
"bnt-seu",
"Latn",
}
m["bov"] = {
"Tuwuli",
36974,
"alv-ktg",
"Latn",
}
m["bow"] = {
"Rema",
7311502,
"paa-ton",
"Latn",
}
m["box"] = {
"Buamu",
35157,
"nic-bwa",
"Latn",
}
m["boy"] = {
"Bodo (Central Africa)",
4936715,
"bnt-leb",
"Latn",
}
m["boz"] = {
"Tiéyaxo Bozo",
32860401,
"dmn-snb",
"Latn",
}
m["bpa"] = {
"Daakaka",
1157729,
"poz-vnc",
"Latn",
}
m["bpd"] = {
"Banda-Banda",
3450674,
"bad-cnt",
"Latn",
}
m["bpe"] = {
"Bauni",
105150962,
"paa-pio",
"Latn",
}
m["bpg"] = {
"Bonggo",
4941860,
"poz-ocw",
"Latn",
}
m["bph"] = {
"Botlikh",
56560,
"cau-and",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["bpi"] = {
"Bagupi",
3450697,
"ngf-han",
"Latn",
}
m["bpj"] = {
"Binji",
4914403,
"bnt-lbn",
"Latn",
}
m["bpk"] = {
"Orowe",
7103905,
"poz-cln",
"Latn",
}
m["bpl"] = {
"Broome Pearling Lugger Pidgin",
4975277,
"crp",
"Latn",
ancestors = "ms",
}
m["bpm"] = {
"Biyom",
4919327,
"ngf-rai",
"Latn",
}
m["bpn"] = {
"Dzao Min",
3042189,
"hmx-mie",
}
m["bpo"] = {
"Anasi",
11207813,
"paa-egb",
"Latn",
}
m["bpp"] = {
"Kaure",
20526532,
"paa-kko",
"Latn",
}
m["bpq"] = {
"Banda Malay",
12473442,
"crp",
"Latn",
ancestors = "ms",
}
m["bpr"] = {
"Koronadal Blaan",
16115430,
"phi",
"Latn",
}
m["bps"] = {
"Sarangani Blaan",
16117272,
"phi",
"Latn",
}
m["bpt"] = {
"Barrow Point",
2567916,
"aus-pmn",
"Latn",
}
m["bpu"] = {
"Bongu",
4941930,
"ngf-min",
"Latn",
}
m["bpv"] = {
"Bian Marind",
8841889,
"paa-mri",
"Latn",
}
-- bpw: Bo (Papua New Guinea): excluded in 2012 and re-evaluated in 2025 with the same conclusion; per Wikipedia: "It is
-- essentially undocumented, and its status as a separate language is unconfirmed."
m["bpx"] = {
"Palya Bareli",
7128872,
"inc-bhi",
"Deva",
translit = "hi-translit",
}
m["bpy"] = {
"Bishnupriya Manipuri",
37059,
"inc-bas",
"Beng",
ancestors = "inc-obn",
}
m["bpz"] = {
"Bilba",
8843362,
"poz-tim",
"Latn",
}
m["bqa"] = {
"Tchumbuli",
11008162,
"alv-ctn",
"Latn",
ancestors = "ak",
}
m["bqb"] = {
"Bagusa",
4842178,
"paa-kwe",
"Latn",
}
m["bqc"] = {
"Boko",
34983,
"dmn-bbu",
"Latn",
}
m["bqd"] = {
"Bung",
3436612,
"nic-bdn",
"Latn",
}
m["bqf"] = {
"Baga Kaloum",
3502293,
"alv-bag",
"Latn",
}
m["bqg"] = {
"Bago-Kusuntu",
34878,
"nic-gne",
}
m["bqh"] = {
"Baima",
674990,
"sit-qia",
}
m["bqi"] = {
"Bakhtiari",
257829,
"ira-swi",
"fa-Arab",
ancestors = "pal",
}
m["bqj"] = {
"Bandial",
34872,
"alv-jol",
"Latn",
}
m["bqk"] = {
"Banda-Mbrès",
3450724,
"bad-cnt",
"Latn",
}
m["bql"] = {
"Karian",
4907504,
"ngf-num",
"Latn",
}
m["bqm"] = {
"Wumboko",
37051,
"bnt-kpw",
"Latn",
}
m["bqn"] = {
"Bulgarian Sign Language",
3438325,
"sgn",
}
m["bqo"] = {
"Balo",
34865,
"nic-grs",
"Latn",
}
m["bqp"] = {
"Busa",
35185,
"dmn-bbu",
"Latn",
}
m["bqq"] = {
"Biritai",
56382,
"paa-clp",
"Latn",
}
m["bqr"] = {
"Burusu",
5001028,
"poz-san",
"Latn",
}
m["bqs"] = {
"Bosngun",
56838,
"paa-baw",
"Latn",
}
m["bqt"] = {
"Bamukumbit",
35078,
"nic-nge",
"Latn",
}
m["bqu"] = {
"Boguru",
3438444,
"bnt-boa",
"Latn",
}
m["bqv"] = {
"Begbere-Ejar",
7194098,
"nic-plc",
"Latn",
}
m["bqw"] = {
"Buru (Nigeria)",
1017152,
"nic-bds",
"Latn",
}
m["bqx"] = {
"Baangi",
3450648,
"nic-kam",
"Latn",
}
m["bqy"] = {
"Bengkala Sign Language",
3322119,
"sgn",
}
m["bqz"] = {
"Bakaka",
34855,
"bnt-mne",
"Latn",
}
m["bra"] = {
"Braj",
35243,
"inc-hiw",
"Deva",
translit = "hi-translit",
}
m["brb"] = {
"Lave",
4957737,
"mkh-ban",
}
m["brc"] = {
"Berbice Creole Dutch",
35215,
"crp",
"Latn",
ancestors = "nl",
}
m["brd"] = {
"Baraamu",
56804,
"sit-new",
"Deva",
}
m["brf"] = {
"Bera",
2896850,
"bnt-kbi",
"Latn",
}
m["brg"] = {
"Baure",
2839722,
"awd",
"Latn",
}
m["brh"] = {
"Brahui",
33202,
"dra-nor",
"ur-Arab, Latn",
translit = {["ur-Arab"] = "ur-translit"},
strip_diacritics = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
}
m["bri"] = {
"Mokpwe",
36428,
"bnt-kpw",
"Latn",
}
m["brj"] = {
"Bieria",
4904607,
"poz-vnc",
"Latn",
}
m["brk"] = {
"Birgid",
56823,
"nub",
"Latn",
}
m["brl"] = {
"Birwa",
3501019,
"bnt-sts",
"Latn",
}
m["brm"] = {
"Barambu",
34893,
"znd",
"Latn",
}
m["brn"] = {
"Boruca",
4946773,
"cba",
"Latn",
}
m["bro"] = {
"Brokkat",
56605,
"sit-tib",
"Tibt, Latn",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["brp"] = {
"Barapasi",
56995,
"paa-egb",
"Latn",
}
m["brq"] = {
"Breri",
4961835,
"paa-tam",
"Latn",
}
m["brr"] = {
"Birao",
2904383,
"poz-sls",
"Latn",
}
m["brs"] = {
"Baras",
8827053,
"poz",
"Latn",
}
m["brt"] = {
"Bitare",
34946,
"nic-tvn",
"Latn",
}
m["bru"] = {
"Eastern Bru",
16115463,
"mkh-kat",
"Latn, Laoo, Thai",
sort_key = {
Laoo = "Laoo-sortkey",
Thai = "Thai-sortkey",
},
}
m["brv"] = {
"Western Bru",
13018531,
"mkh-kat",
"Latn, Laoo, Thai",
sort_key = {
Laoo = "Laoo-sortkey",
Thai = "Thai-sortkey",
},
}
m["brw"] = {
"Bellari",
4883496,
"dra-tlk",
"Knda, Mlym",
-- Knda translit in [[Module:scripts/data]]
-- Mlym translit in [[Module:scripts/data]]
}
m["brx"] = {
"Bodo (India)",
33223,
"tbq-bdg",
"Deva, Latn",
translit = {Deva = "brx-translit"},
}
m["bry"] = {
"Burui",
5000976,
"paa-nnd",
"Latn",
}
m["brz"] = {
"Bilbil",
4907473,
"poz-ocw",
"Latn",
}
m["bsa"] = {
"Abinomn",
56648,
"qfa-iso", -- Papuan
"Latn",
}
m["bsb"] = {
"Brunei Bisaya",
3450611,
"poz-san",
"Latn",
}
m["bsc"] = {
"Bassari",
35098,
"alv-ten",
"Latn",
}
m["bse"] = {
"Wushi",
36973,
"nic-rnn",
"Latn",
}
m["bsf"] = {
"Bauchi",
34974,
"nic-shi",
"Latn",
}
m["bsg"] = {
"Bashkardi",
33030,
"ira-swi",
"fa-Arab, Latn",
}
m["bsh"] = {
"Kamkata-viri",
2605045,
"nur-nor",
"Latn, Arab",
}
m["bsi"] = {
"Bassossi",
34940,
"bnt-mne",
"Latn",
}
m["bsj"] = {
"Bangwinji",
3446631,
"alv-wjk",
"Latn",
}
m["bsk"] = {
"Burushaski",
216286,
"qfa-iso",
"Arab",
strip_diacritics = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
}
m["bsl"] = {
"Basa-Gumna",
4866150,
"nic-bas",
"Latn",
}
m["bsm"] = {
"Busami",
5001255,
"poz-hce",
"Latn",
}
m["bsn"] = {
"Barasana",
2883843,
"sai-tuc",
"Latn",
}
m["bso"] = {
"Buso",
3441370,
"cdc-est",
"Latn",
}
m["bsp"] = {
"Baga Sitemu",
36466,
"alv-bag",
"Latn",
}
m["bsq"] = {
"Bassa",
34949,
"kro-wkr",
"Latn, Bass",
}
m["bsr"] = {
"Bassa-Kontagora",
4866152,
"nic-bas",
"Latn",
}
m["bss"] = {
"Akoose",
34806,
"bnt-mne",
"Latn",
}
m["bst"] = {
"Basketo",
56531,
"omv-ome",
"Ethi",
}
m["bsu"] = {
"Bahonsuai",
2879298,
"poz-btk",
"Latn",
}
m["bsv"] = {
"Baga Sobané",
3450433,
"alv-bag",
"Latn",
}
m["bsw"] = {
"Baiso",
56615,
"cus-som",
"Latn",
}
m["bsx"] = {
"Yangkam",
36922,
"nic-tar",
"Latn",
}
m["bsy"] = {
"Sabah Bisaya",
12641557,
"poz-san",
"Latn",
}
m["bta"] = {
"Bata",
56254,
"cdc-cbm",
"Latn",
}
m["btc"] = {
"Bati (Cameroon)",
34944,
"nic-mbw",
"Latn",
}
m["btd"] = {
"Dairi Batak",
2891045,
"btk",
"Latn, Batk",
}
m["bte"] = {
"Gamo-Ningi",
5520366,
"nic-jer",
"Latn",
}
m["btf"] = {
"Birgit",
56302,
"cdc-est",
"Latn",
}
m["btg"] = {
"Gagnoa Bété",
5005069,
"kro-bet",
"Latn",
}
m["bth"] = {
"Biatah Bidayuh",
2900881,
"day",
"Latn",
}
m["bti"] = {
"Burate",
56900,
"paa-egb",
"Latn",
}
m["btj"] = {
"Bacanese Malay",
8828608,
"poz-mly",
"Latn",
}
m["btm"] = {
"Mandailing Batak",
2891049,
"btk",
"Latn, Batk",
}
m["btn"] = {
"Ratagnon",
13197,
"phi",
"Latn",
}
m["bto"] = {
"Rinconada Bikol",
12633026,
"phi",
"Latn",
}
m["btp"] = {
"Budibud",
4985086,
"poz-ocw",
"Latn",
}
m["btq"] = {
"Batek",
860315,
"mkh-asl",
"Latn",
}
m["btr"] = {
"Baetora",
2878874,
"poz-vnn",
"Latn",
}
m["bts"] = {
"Simalungun Batak",
2891054,
"btk",
"Latn, Batk",
}
m["btt"] = {
"Bete-Bendi",
4887064,
"nic-ben",
"Latn",
}
m["btu"] = {
"Batu",
34964,
"nic-tvn",
"Latn",
}
m["btv"] = {
"Bateri",
3812564,
"inc-koh",
"Deva",
}
m["btw"] = {
"Butuanon",
5003156,
"phi",
"Latn",
}
m["btx"] = {
"Karo Batak",
33012,
"btk",
"Latn, Batk",
}
m["bty"] = {
"Bobot",
3446788,
"poz-cma",
"Latn",
}
m["btz"] = {
"Alas-Kluet Batak",
2891042,
"btk",
"Latn, Batk",
}
m["bua"] = {
"Buryat",
33120,
"xgn-cen",
"Cyrl, Mong, Latn",
wikimedia_codes = "bxr",
ancestors = "cmg",
translit = {
Cyrl = "bua-translit",
-- Mong translit in [[Module:scripts/data]]
},
override_translit = true,
-- Mong display_text and strip_diacritics in [[Module:scripts/data]]
strip_diacritics = {
Cyrl = {remove_diacritics = c.grave .. c.acute},
},
sort_key = {
Cyrl = {
from = {"ё", "ө", "ү", "һ"},
to = {"е" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]}
},
},
}
m["bub"] = {
"Bua",
32928,
"alv-bua",
"Latn",
}
m["bud"] = {
"Ntcham",
36266,
"nic-grm",
"Latn",
}
m["bue"] = {
"Beothuk",
56234,
"qfa-unc", -- extinct since 1829, poorly attested; possibly a divergent Algonquian language
"Latn",
}
m["buf"] = {
"Bushoong",
3449964,
"bnt-bsh",
"Latn",
}
m["bug"] = {
"Buginese",
33190,
"poz-ssw",
"Bugi, Latn",
}
m["buh"] = {
"Younuo Bunu",
56299,
"hmn",
"Latn",
}
m["bui"] = {
"Bongili",
35084,
"bnt-ngn",
"Latn",
}
m["buj"] = {
"Basa-Gurmana",
6432515,
"nic-bas",
"Latn",
}
m["buk"] = {
"Bukawa",
35043,
"poz-ocw",
"Latn",
}
m["bum"] = {
"Bulu (Cameroon)",
35028,
"bnt-btb",
"Latn",
}
m["bun"] = {
"Sherbro",
36339,
"alv-mel",
"Latn",
}
m["buo"] = {
"Terei",
56831,
"paa-sbo",
"Latn",
}
m["bup"] = {
"Busoa",
5002001,
"poz",
"Latn",
}
m["buq"] = {
"Brem",
4960502,
"ngf-nad",
"Latn",
}
m["bus"] = {
"Bokobaru",
9228931,
"dmn-bbu",
"Latn",
}
m["but"] = {
"Bungain",
3450623,
"paa-mar",
"Latn",
}
m["buu"] = {
"Budu",
3450207,
"bnt-nya",
"Latn",
}
m["buv"] = {
"Bun",
56351,
"paa-yua",
"Latn",
}
m["buw"] = {
"Bubi",
35017,
"bnt-tso",
"Latn",
}
m["bux"] = {
"Boghom",
3440412,
"cdc-wst",
"Latn",
}
m["buy"] = {
"Mmani",
35061,
"alv-mel",
"Latn",
}
m["bva"] = {
"Barein",
56285,
"cdc-est",
"Latn",
}
m["bvb"] = {
"Bube",
35110,
"nic-bds",
"Latn",
}
m["bvc"] = {
"Baelelea",
2878833,
"poz-sls",
"Latn",
}
m["bvd"] = {
"Baeggu",
2878850,
"poz-sls",
"Latn",
}
m["bve"] = {
"Berau Malay",
3915770,
"poz-mly",
"Latn",
}
m["bvf"] = {
"Boor",
56250,
"cdc-est",
"Latn",
}
m["bvg"] = {
"Bonkeng",
34958,
"bnt-bbo",
"Latn",
}
m["bvh"] = {
"Bure",
56294,
"cdc-wst",
"Latn",
}
m["bvi"] = {
"Belanda Viri",
35247,
"nic-ser",
"Latn",
}
m["bvj"] = {
"Baan",
3515067,
"nic-ogo",
"Latn",
}
m["bvk"] = {
"Bukat",
4986814,
"poz-bnn",
"Latn",
}
m["bvl"] = {
"Bolivian Sign Language",
1783590,
"sgn-asl",
"Latn", -- when documented
}
m["bvm"] = {
"Bamunka",
34882,
"nic-rnn",
"Latn",
}
m["bvn"] = {
"Buna",
3450516,
"paa-mar",
"Latn",
}
m["bvo"] = {
"Bolgo",
35038,
"alv-bua",
"Latn",
}
m["bvp"] = {
"Bumang",
4997235,
"mkh-pal",
}
m["bvq"] = {
"Birri",
56514,
"csu-bkr",
"Latn",
}
m["bvr"] = {
"Burarra",
4998124,
"aus-arn",
"Latn",
}
m["bvt"] = {
"Bati (Indonesia)",
4869253,
"poz-cma",
"Latn",
}
m["bvu"] = {
"Bukit Malay",
9230148,
"poz-mly",
"Latn",
}
m["bvv"] = {
"Baniva",
3515198,
"awd",
"Latn",
}
m["bvw"] = {
"Boga",
56262,
"cdc-cbm",
"Latn",
}
m["bvx"] = {
"Babole",
35180,
"bnt-ngn",
"Latn",
}
m["bvy"] = {
"Baybayanon",
16839275,
"phi",
"Latn",
}
m["bvz"] = {
"Bauzi",
56360,
"paa-egb",
"Latn",
}
m["bwa"] = {
"Bwatoo",
9232446,
"poz-cln",
"Latn",
}
m["bwb"] = {
"Namosi-Naitasiri-Serua",
3130290,
"poz-pcc",
"Latn",
}
m["bwc"] = {
"Bwile",
3447440,
"bnt-sbi",
"Latn",
}
m["bwd"] = {
"Bwaidoka",
2929111,
"poz-ocw",
"Latn",
}
m["bwe"] = {
"Bwe Karen",
56994,
"kar",
"Mymr, Latn",
}
m["bwf"] = {
"Boselewa",
4947229,
"poz-ocw",
"Latn",
}
m["bwg"] = {
"Barwe",
8826802,
"bnt-sna",
"Latn",
}
m["bwh"] = {
"Bishuo",
34973,
"nic-fru",
"Latn",
}
m["bwi"] = {
"Baniwa",
3501735,
"awd-nwk",
"Latn",
}
m["bwj"] = {
"Láá Láá Bwamu",
11017275,
"nic-bwa",
"Latn",
}
m["bwk"] = {
"Bauwaki",
4873607,
"paa-mal",
"Latn",
}
m["bwl"] = {
"Bwela",
5003678,
"bnt-bun",
"Latn",
}
m["bwm"] = {
"Biwat",
56352,
"paa-yua",
"Latn",
}
m["bwn"] = {
"Wunai Bunu",
56452,
"hmn",
}
m["bwo"] = {
"Shinasha",
56260,
"omv-gon",
"Latn",
}
m["bwp"] = {
"Lower Mandobo",
12636155,
"ngf-dum",
"Latn",
}
m["bwq"] = {
"Southern Bobo",
11001714,
"dmn-snb",
"Latn",
}
m["bwr"] = {
"Bura",
56552,
"cdc-cbm",
"Latn",
}
m["bws"] = {
"Bomboma",
9229429,
"bnt-bun",
"Latn",
}
m["bwt"] = {
"Bafaw",
34853,
"bnt-bbo",
"Latn",
}
m["bwu"] = {
"Buli (Ghana)",
35085,
"nic-buk",
"Latn",
}
m["bww"] = {
"Bwa",
3515058,
"bnt-bta",
"Latn",
}
m["bwx"] = {
"Bu-Nao Bunu",
56411,
"hmn",
"Latn",
}
m["bwy"] = {
"Cwi Bwamu",
11150714,
"nic-bwa",
"Latn",
}
m["bwz"] = {
"Bwisi",
35067,
"bnt-sir",
"Latn",
}
m["bxa"] = {
"Bauro",
2892068,
"poz-sls",
"Latn",
}
m["bxb"] = {
"Belanda Bor",
56678,
"sdv-lon",
"Latn",
}
m["bxc"] = {
"Molengue",
13345,
"bnt-kel",
"Latn",
}
m["bxd"] = {
"Pela",
57000,
"tbq-brm",
}
m["bxe"] = {
"Ongota",
36344,
"qfa-unc", -- moribund, no academic consensus on classification; might be an isolate
"Latn",
}
m["bxf"] = {
"Bilur",
2903788,
"poz-ocw",
"Latn",
}
m["bxg"] = {
"Bangala",
34989,
"bnt-bmo",
"Latn",
}
m["bxh"] = {
"Buhutu",
4986329,
"poz-ocw",
"Latn",
}
m["bxi"] = {
"Pirlatapa",
10632195,
"aus-kar",
"Latn",
}
m["bxj"] = {
"Bayungu",
10427485,
"aus-psw",
"Latn",
}
m["bxk"] = {
"Bukusu",
32930,
"bnt-msl",
"Latn",
}
m["bxl"] = {
"Jalkunan",
11009787,
"dmn-jje",
"Latn",
}
m["bxn"] = {
"Burduna",
4998313,
"aus-psw",
"Latn",
}
m["bxo"] = {
"Barikanchi",
3450802,
"crp",
"Latn",
ancestors = "ha",
}
m["bxp"] = {
"Bebil",
34941,
"bnt-btb",
"Latn",
}
m["bxq"] = {
"Beele",
56238,
"cdc-wst",
"Latn",
}
m["bxs"] = {
"Busam",
35189,
"nic-grs",
"Latn",
}
m["bxv"] = {
"Berakou",
56796,
"csu-bgr",
"Latn",
}
m["bxw"] = {
"Banka",
3438402,
"dmn-smg",
"Latn",
}
m["bxz"] = {
"Binahari",
4913840,
"paa-mal",
"Latn",
}
m["bya"] = {
"Palawan Batak",
3450443,
"phi",
"Tagb",
}
m["byb"] = {
"Bikya",
33257,
"nic-fru",
"Latn",
}
m["byc"] = {
"Ubaghara",
36625,
"nic-ucn",
"Latn",
}
m["byd"] = {
"Benyadu'",
11173588,
"day",
"Latn",
}
m["bye"] = {
"Pouye",
7235814,
"paa-sep",
"Latn",
}
m["byf"] = {
"Bete",
32932,
"nic-ykb",
"Latn",
}
m["byg"] = {
"Baygo",
56836,
"sdv-daj",
"Latn",
}
m["byh"] = {
"Bujhyal",
56317,
"sit-gma",
"Deva",
}
m["byi"] = {
"Buyu",
5003401,
"bnt-nyb",
"Latn",
}
m["byj"] = {
"Binawa",
4913807,
"nic-kau",
"Latn",
}
m["byk"] = {
"Biao",
4902547,
"qfa-tak",
"Latn", -- also Hani?
}
m["byl"] = {
"Bayono",
3503856,
"paa-baa",
"Latn",
}
m["bym"] = {
"Bidyara",
8842355,
"aus-pam",
"Latn",
}
m["byn"] = {
"Blin",
56491,
"cus-cen",
"Ethi, Latn",
translit = {Ethi = "Ethi-translit"},
}
m["byo"] = {
"Biyo",
56848,
"tbq-bka",
"Latn, Hani",
sort_key = {Hani = "Hani-sortkey"},
}
m["byp"] = {
"Bumaji",
4997234,
"nic-ben",
"Latn",
}
m["byq"] = {
"Basay",
716647,
"map",
"Latn",
}
m["byr"] = {
"Baruya",
3450812,
"ngf-bsi",
"Latn",
}
m["bys"] = {
"Burak",
4998097,
"alv-bwj",
"Latn",
}
m["byt"] = {
"Berti",
35008,
"ssa-sah",
"Latn",
}
m["byv"] = {
"Medumba",
36019,
"bai",
"Latn",
}
m["byw"] = {
"Belhariya",
32961,
"sit-kie",
"Deva",
}
m["byx"] = {
"Qaqet",
3503009,
"paa-bai",
"Latn",
}
m["byz"] = {
"Banaro",
56858,
"paa-ram",
"Latn",
}
m["bza"] = {
"Bandi",
34912,
"dmn-msw",
"Latn",
}
m["bzb"] = {
"Andio",
4754487,
"poz-slb",
"Latn",
}
m["bzd"] = {
"Bribri",
28400,
"cba",
"Latn",
}
m["bze"] = {
"Jenaama Bozo",
10950633,
"dmn-snb",
"Latn",
}
m["bzf"] = {
"Boikin",
56829,
"paa-ndu",
"Latn",
}
m["bzg"] = {
"Babuza",
716615,
"map",
"Latn",
}
m["bzh"] = {
"Mapos Buang",
2927370,
"poz-ocw",
"Latn",
}
m["bzi"] = {
"Bisu",
56852,
"tbq-bis",
"Latn, Thai",
sort_key = {Thai = "Thai-sortkey"},
}
m["bzj"] = {
"Belizean Creole",
1363055,
"crp",
"Latn",
ancestors = "en",
}
m["bzk"] = {
"Nicaraguan Creole",
3504097,
"crp",
"Latn",
ancestors = "en",
}
m["bzl"] = { -- supposedly also called "Bolano", but I can find no evidence of that
"Boano (Sulawesi)",
4931258,
"poz",
"Latn",
}
m["bzm"] = {
"Bolondo",
35071,
"bnt-bun",
"Latn",
}
m["bzn"] = {
"Boano (Maluku)",
4931255,
"poz-cma",
"Latn",
}
m["bzo"] = {
"Bozaba",
4952785,
"bnt-ngn",
"Latn",
}
m["bzp"] = {
"Kemberano",
12634399,
"ngf-sbh",
"Latn",
}
m["bzq"] = {
"Buli (Indonesia)",
2927952,
"poz-hce",
"Latn",
}
m["bzr"] = {
"Biri",
4087011,
"aus-pam",
"Latn",
}
m["bzs"] = {
"Brazilian Sign Language",
3436689,
"sgn",
"Latn",
}
m["bzu"] = {
"Burmeso",
56746,
"qfa-dis", -- isolate in Glottolog, Wurm and Foley; in East Bird's Head-Sentani fmaily by Ross
"Latn",
}
m["bzv"] = {
"Bebe",
34977,
"nic-bbe",
"Latn",
}
m["bzw"] = {
"Basa",
34898,
"nic-bas",
"Latn",
}
m["bzx"] = {
"Hainyaxo Bozo",
11159536,
"dmn-snb",
"Latn",
}
m["bzy"] = {
"Obanliku",
36276,
"nic-ben",
"Latn",
}
m["bzz"] = {
"Evant",
35259,
"nic-tvc",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
ijzhbjnl7dnmdfd2130zsirles33dm1
Mòideal:links/data
828
16788
86313
2026-07-22T08:56:30Z
Altronic
4137
Copy from English Wiktionary
86313
Scribunto
text/plain
local data = {}
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local u = require("Module:string utilities").char
data.phonetic_extraction = {
["th"] = "Module:th",
["km"] = "Module:km",
}
data.ignored_prefixes = {
["cat"] = true,
["category"] = true,
["file"] = true,
["image"] = true
}
-- Scheme for using unsupported characters in titles.
data.unsupported_characters = {
["#"] = "`num`",
["%"] = "`percnt`", -- only escaped in percent encoding
["&"] = "`amp`", -- only escaped in HTML entities
["."] = "`period`", -- only escaped in dot-slash notation
["<"] = "`lt`",
[">"] = "`gt`",
["["] = "`lsqb`",
["]"] = "`rsqb`",
["_"] = "`lowbar`",
["`"] = "`grave`", -- used to enclose unsupported characters in the scheme, so a raw use in an unsupported title must be escaped to prevent interference
["{"] = "`lcub`",
["|"] = "`vert`",
["}"] = "`rcub`",
["~"] = "`tilde`", -- only escaped when 3 or more are consecutive
["\239\191\189"] = "`repl`" -- replacement character U+FFFD, which can't be typed directly here due to an abuse filter
}
-- Manually specified unsupported titles. Only put titles here if there is a different reason why they are unsupported, and not just because they contain one of the unsupported characters above.
data.unsupported_titles = {
[" "] = "Space",
["&"] = "`amp`amp;",
["λοπαδοτεμαχοσελαχογαλεοκρανιολειψανοδριμυποτριμματοσιλφιοκαραβομελιτοκατακεχυμενοκιχλεπικοσσυφοφαττοπεριστεραλεκτρυονοπτοκεφαλλιοκιγκλοπελειολαγῳοσιραιοβαφητραγανοπτερύγων"] = "Ancient Greek dish",
["กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ นพรัตนราชธานีบูรีรมย์ อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต สักกะทัตติยวิษณุกรรมประสิทธิ์"] = "Thai name of Bangkok",
[u(0x1680)] = "Ogham space",
[u(0x3000)] = "Ideographic space"
}
-- Mammoth pages contain only Translingual and English entries, if present. The remaining L2s are placed on subpages.
-- The same subpage titles are used across all mammoth pages for the convenience of bot and script operators.
-- Assuming that most mammoth pages will be Latin-script terms, the subpage groupings are determined by dividing the
-- list of Latin-script languages known to Wiktionary into two (three, ...) roughly equal alphabetic divisions. This is
-- easily done by looking at Petscan's output:
-- https://petscan.wmcloud.org/?sortby=title&language=en&ns%5B14%5D=1&categories=Latin+script+languages&project=wiktionary&doit=
-- This data structure contains types of splits, each of which is a list of names of splits and Lua patterns applied to
-- the decomposed L2 name (with apostrophes and double quotes removed and certain other transformations applied; see
-- get_L2_sort_key() in [[Module:headword/page]]), or "true" for the final catch-all subpage (which includes anything
-- not beginning with a Latin letter after the transformations are applied; this includes e.g. ǃKung but not 'Are'are,
-- which sorts with A, and not Àhàn, which likewise sorts with A). The patterns must be suitable for use with plain
-- string functions, not their mw.ustring equivalents.
data.mammoth_page_subpage_types = {
twos = {
{"languages A to L", "^[A-L]"},
{"languages M to Z", true},
},
threes = {
{"languages A to I", "^[A-I]"},
{"languages J to Q", "^[J-Q]"},
{"languages R to Z", true},
},
CJK = {
{"languages A to C", "^[A-C]"}, -- Translingual and Chinese on one page
{"languages D to Z", true}, -- all the remainder (mostly Japanese, Korean, Vietnamese) on the other
},
}
-- "Mammoth pages" are pages whose entries cannot be housed on a single page because of MediaWiki limits. The key is
-- the page and the value is the subpage type, as defined above in `mammoth_page_subpage_types`.
data.mammoth_pages = {
["a"] = "twos", -- FIXME: change to threes
["mammoth page test"] = "twos", -- required for testing purposes - please leave here
}
return data
q02q3zllkyysivftvjq4h2gli665cgv
Mòideal:links/print data
828
16789
86314
2026-07-22T08:57:52Z
Altronic
4137
Copy from English Wiktionary
86314
Scribunto
text/plain
local m_str_utils = require("Module:string utilities")
local cp = m_str_utils.codepoint
local insert = table.insert
local is_whitespace = require("Module:Unicode data").is_whitespace
local sorted_pairs = require("Module:table").sortedPairs
local ugsub = m_str_utils.gsub
local ulen = m_str_utils.len
local export = {}
local function make_anchor(text, anchor)
return '<span id="' .. (anchor or text) .. '">' .. text .. '</span>'
end
function export.show()
local data = mw.loadData "Module:links/data"
local output = {}
local function process_link_text (link_text)
-- The basic space character is stripped from link text if there are no
-- characters surrounding it.
if ulen(link_text) == 1 and is_whitespace(cp(link_text)) then
return ("]%s["):format(link_text)
else
-- Convert all characters to hexadecimal character entities to
-- prevent any transformations.
-- This is pretty much only because HTML comment syntax would not be
-- displayed otherwise. But who knows what else MediaWiki software
-- might do.
return ugsub(
link_text,
".",
function (char)
local codepoint = cp(char)
if not is_whitespace(codepoint) then
return ("&#x%X;"):format(codepoint)
end
end)
end
end
local function link(term, title)
local script = require "Module:scripts".findBestScriptWithoutLang(term):getCode()
if script ~= "None" then
return ('* <span class="%s">[[Unsupported titles/%s|%s]]</span>'):format(
script,
title,
process_link_text(term))
else
return ("* [[Unsupported titles/%s|%s]]"):format(
title,
process_link_text(term))
end
end
for term, title in sorted_pairs(data.unsupported_titles) do
insert(output, link(term, title))
end
insert(output, 1, "; " .. make_anchor("Unsupported titles") .. ":")
return table.concat(output, "\n")
end
return export
60x23zeg4d29wabuhyrnzvaqg57t9g4
Mòideal:languages/data/3/y
828
16790
86315
2026-07-22T08:59:20Z
Altronic
4137
Copy from English Wiktionary
86315
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["yaa"] = {
"Yaminahua",
3026110,
"sai-pan",
"Latn",
}
m["yab"] = {
"Yuhup",
3573115,
"sai-nad",
"Latn",
}
m["yac"] = {
"Pass Valley Yali",
12953309,
"ngf-yal",
"Latn",
}
m["yad"] = {
"Yagua",
3182567,
"sai-pey",
"Latn",
}
m["yae"] = {
"Pumé",
3121835,
"qfa-dis", -- isolate per Glottolog; possibly in an Esmeralda-Yaruro family with Esmeralda
"Latn",
}
m["yaf"] = {
"Yaka",
35588,
"bnt-yak",
"Latn",
}
m["yag"] = {
"Yámana",
531826,
"qfa-iso",
"Latn",
}
m["yah"] = {
"Yazghulami",
34186,
"ira-shy",
"Latn, Cyrl",
translit = "yah-translit",
}
m["yai"] = {
"Yaghnobi",
34247,
"ira-sgc",
"Latn, Cyrl",
translit = "tg-translit",
}
m["yaj"] = {
"Banda-Yangere",
8048561,
"bad",
}
m["yak"] = {
"Yakima",
35976053,
"nai-shp",
"Latn",
ancestors = "nai-spt",
}
m["yal"] = {
"Yalunka",
35524,
"dmn-sya",
"Latn",
}
m["yam"] = {
"Yamba",
36904,
"nic-nka",
"Latn",
}
m["yan"] = {
"Mayangna",
3302929,
"nai-min",
"Latn",
}
m["yao"] = {
"Yao (Africa)",
36902,
"bnt-rvm",
"Latn",
}
m["yap"] = {
"Yapese",
34029,
"poz-oce",
"Latn",
}
m["yaq"] = {
"Yaqui",
34191,
"azc-trc",
"Latn",
}
m["yar"] = {
"Yabarana",
3571238,
"sai-map",
"Latn",
}
m["yas"] = {
"Gunu",
36358,
"nic-ymb",
"Latn",
}
m["yat"] = {
"Yambeta",
8048020,
"nic-mbw",
"Latn",
}
m["yau"] = {
"Yuwana",
5876347,
}
m["yav"] = {
"Yangben",
12953315,
"nic-ymb",
"Latn",
}
m["yaw"] = {
"Yawalapití",
3450709,
"awd",
"Latn",
}
m["yay"] = {
"Agwagwune",
34736,
"nic-ucn",
"Latn",
}
m["yaz"] = {
"Lokaa",
3914439,
"nic-uce",
"Latn",
}
m["yba"] = {
"Yala",
3914920,
"alv-ido",
"Latn",
}
m["ybb"] = {
"Yemba",
36917,
"bai",
"Latn",
}
m["ybe"] = {
"Western Yugur",
34224,
"trk-ssb",
"Latn, Ougr",
ancestors = "oui",
}
m["ybh"] = {
"Yakkha",
56666,
"sit-kie",
"Deva",
}
m["ybi"] = {
"Yamphu",
56316,
"sit-kie",
"Deva",
translit = "ybi-translit",
}
m["ybj"] = {
"Hasha",
3915338,
"nic-alu",
"Latn",
}
m["ybk"] = {
"Bokha",
63340714,
"tbq-muj",
}
m["ybl"] = {
"Yukuben",
3915846,
"nic-ykb",
}
m["ybm"] = {
"Yaben",
8046372,
"ngf-num",
"Latn",
}
m["ybn"] = {
"Yabaâna",
3450534,
"awd",
"Latn",
}
m["ybo"] = {
"Yabong",
8046383,
"ngf-yag",
"Latn",
}
m["ybx"] = {
"Yawiyo",
8050463,
"paa-wal",
"Latn",
}
m["yby"] = {
"Yaweyuha",
3571231,
"ngf-gor",
"Latn",
}
m["ych"] = {
"Chesu",
30334841,
"tbq-nas",
}
m["ycl"] = {
"Lolopo",
56441,
"tbq-llo",
"Latn",
}
m["ycn"] = {
"Yucuna",
3438356,
"awd-nwk",
"Latn",
}
m["ycp"] = {
"Chepya",
46603077,
"tbq-han",
}
m["ycr"] = {
"Yilan Creole",
10955036,
"crp",
"Latn",
}
m["yda"] = {
"Yanda",
8048318,
"aus-pam",
"Latn",
}
m["yde"] = {
"Yangum Dey",
63340998,
"paa-pal",
"Latn",
}
m["ydg"] = {
"Yidgha",
34179,
"ira-mny",
"Arab",
}
m["ydk"] = {
"Yoidik",
8054512,
"ngf-han",
"Latn",
}
m["yea"] = {
"Ravula",
7296830,
"dra-mal",
"Knda, Mlym",
-- Knda translit in [[Module:scripts/data]]
-- Mlym translit in [[Module:scripts/data]]
}
m["yec"] = {
"Yenish",
1365342,
"gmw-hgm",
"Latn",
ancestors = "gmh",
}
m["yee"] = {
"Yimas",
36954,
"paa-lse",
"Latn",
}
m["yei"] = {
"Yeni",
34213,
"nic-mmb",
}
m["yej"] = {
"Yevanic",
34200,
"grk",
"Hebr",
ancestors = "gkm",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["yen"] = {
"Yendang",
3914882,
"alv-mye",
"Latn",
}
m["yer"] = {
"Tarok",
3914953,
"nic-tar",
"Latn",
}
m["yes"] = {
"Yeskwa",
3914962,
"nic-plc",
"Latn",
}
m["yet"] = {
"Yetfa",
8053020,
"qfa-dis", -- Papuan; Glottolog and Foley treat as an isolate, Ross puts in Sepik, Usher puts in South Pauwasi
"Latn",
}
m["yeu"] = {
"Yerukula",
3535117,
"dra-tam",
}
m["yev"] = {
"Yeri",
11044384,
"paa-wpa",
"Latn",
}
m["yey"] = {
"Yeyi",
8053347,
"bnt",
"Latn",
}
m["ygi"] = {
"Yiningayi",
63341096,
"aus-pam",
"Latn",
}
m["ygl"] = {
"Yangum Gel",
63341179,
"paa-pal",
"Latn",
}
m["ygm"] = {
"Yagomi",
20771657,
"ngf-war",
"Latn",
}
m["ygp"] = {
"Gepo",
5548692,
"tbq-nas",
}
m["ygr"] = {
"Yagaria",
8046690,
"ngf-kya",
"Latn",
}
m["ygs"] = {
"Yolngu Sign Language",
16211970,
"sgn",
}
m["ygu"] = {
"Yugul",
8060437,
"aus-arn",
"Latn",
}
m["ygw"] = {
"Yagwoia",
8046761,
"ngf-ang",
"Latn",
}
m["yha"] = {
"Baha",
2879238,
"qfa-kra",
}
m["yhl"] = {
"Hlepho Phowa",
63341181,
"tbq-phw",
}
m["yia"] = {
"Yinggarda",
3913777,
"aus-psw",
"Latn",
}
m["yif"] = {
"Ache",
10949828,
"tbq-sel",
}
m["yig"] = {
"Wusa",
12953334,
"tbq-nas",
}
m["yii"] = {
"Yidiny",
3053283,
"aus-yid",
"Latn",
}
m["yij"] = {
"Yindjibarndi",
3121073,
"aus-nga",
"Latn",
}
m["yik"] = {
"Dongshanba Lalo",
12953333,
"tbq-lal",
}
m["yil"] = {
"Yindjilandji",
10723541,
"aus-pam",
"Latn",
}
m["yim"] = {
"Yimchungru Naga",
56348,
"sit-aao",
"Latn",
}
m["yin"] = {
"Yinchia",
12953981,
"mkh-pal",
}
m["yip"] = {
"Pholo",
7187103,
"tbq-nso",
}
m["yiq"] = {
"Micha",
6827993,
"tbq-llo",
"Latn",
}
m["yir"] = {
"North Awyu",
12642164,
"ngf-awy",
"Latn",
}
m["yis"] = {
"Yis",
8053831,
"paa-wap",
"Latn",
}
m["yit"] = {
"Eastern Lalu",
12953328,
"tbq-lal",
}
m["yiu"] = {
"Lope",
11163308,
"tbq-nlo",
}
m["yiv"] = {
"Northern Nisu",
25559454,
"tbq-nis",
}
m["yix"] = {
"Axi",
4830439,
"tbq-axi",
}
m["yiy"] = {
"Yir-Yoront",
8053819,
"aus-pmn",
"Latn",
}
m["yiz"] = {
"Azhe",
4832535,
"tbq-axi",
}
m["yka"] = {
"Yakan",
3571351,
"poz-sbj",
"Latn",
}
m["ykg"] = {
"Northern Yukaghir",
56319,
"qfa-yuk",
"Cyrl",
translit = "ykg-translit",
}
m["ykh"] = {
"Khamnigan Mongol",
3196052,
"xgn-cen",
"Mong, Latn, Cyrl",
-- Mong translit, display_text and strip_diacritics in [[Module:scripts/data]]
}
m["yki"] = {
"Yoke",
3832977,
}
m["ykk"] = {
"Yakaikeke",
8047041,
"poz-oce",
}
m["ykl"] = {
"Khlula",
6401849,
"tbq-phw",
}
m["ykm"] = {
"Kap",
8047048,
"poz-ocw",
"Latn",
}
m["ykn"] = {
"Kua-nsi",
6440952,
"tbq-tal",
}
m["yko"] = {
"Yasa",
36899,
"bnt-yko",
"Latn",
}
m["ykr"] = {
"Yekora",
11732781,
"ngf-bin",
"Latn",
}
m["ykt"] = {
"Kathu",
6377155,
"sit-mnz",
}
m["yku"] = {
"Kuamasi",
6441074,
"tbq-tal",
}
m["yky"] = {
"Yakoma",
3571364,
"nic-ngd",
"Latn",
}
m["yla"] = {
"Ulwa (New Guinea)",
8050336,
"paa-wke",
"Latn",
}
m["ylb"] = {
"Yaleba",
37710600,
"poz-oce",
}
m["yle"] = {
"Yele",
36942,
nil,
"Latn",
}
m["ylg"] = {
"Yelogu",
8052024,
"paa-nnd",
"Latn",
}
m["yli"] = {
"Angguruk Yali",
3514481,
"ngf-yal",
"Latn",
}
m["yll"] = {
"Yil",
3501797,
"paa-wap",
"Latn",
}
m["ylm"] = {
"Limi",
12953327,
"tbq-lso",
}
m["yln"] = {
"Langnian Buyang",
2929025,
"qfa-buy",
}
m["ylo"] = {
"Naruo",
6961032,
"tbq-tal",
}
m["ylr"] = {
"Yalarnnga",
3915686,
"aus-pam",
"Latn",
}
m["ylu"] = {
"Aribwaung",
11044246,
"poz-ocw",
"Latn",
}
m["yly"] = {
"Nyelâyu",
303154,
"poz-cln",
"Latn",
}
m["ymb"] = {
"Yambes",
8048022,
"paa-kom",
"Latn",
}
m["ymc"] = {
"Southern Muji",
57259564,
"tbq-muj",
}
m["ymd"] = {
"Muda",
6931494,
"tbq-han",
}
m["yme"] = {
"Yameo",
3121032,
"sai-pey",
}
m["ymg"] = {
"Yamongeri",
11008893,
"bnt-mon",
"Latn",
ancestors = "lol",
}
m["ymh"] = {
"Mili",
12953329,
"tbq-lso",
}
m["ymi"] = {
"Moji",
6895060,
"tbq-muj",
}
m["ymk"] = {
"Makwe",
6740513,
"bnt-swh",
}
m["yml"] = {
"Iamalele",
8047849,
"poz-ocw",
"Latn",
}
m["ymm"] = {
"Maay",
36221,
"cus-som",
"Latn",
}
m["ymn"] = {
"Sunum",
8048083,
"poz-ocw",
"Latn",
}
m["ymo"] = {
"Yangum Mon",
50313949,
"paa-pal",
"Latn",
}
m["ymp"] = {
"Yamap",
8047913,
"poz-ocw",
"Latn",
}
m["ymq"] = {
"Qila Muji",
56826369,
"tbq-muj",
}
m["ymr"] = {
"Malasar",
16889525,
"dra-tam",
}
m["yms"] = {
"Mysian",
2577228,
"ine",
}
m["ymx"] = {
"Northern Muji",
56751275,
"tbq-muj",
}
m["ymz"] = {
"Muzi",
6944445,
"tbq-muj",
}
m["yna"] = {
"Aluo",
4737539,
"tbq-nas",
}
m["ynb"] = {
"Yamben",
65046092,
"ngf-mad",
"Latn",
}
m["ynd"] = {
"Yandruwandha",
8048335,
"aus-kar",
"Latn",
}
m["yne"] = {
"Lang'e",
6485577,
"tbq-tal",
}
m["yng"] = {
"Yango",
13123599,
"nic-nkk",
"Latn",
}
m["ynk"] = {
"Naukanski",
27963,
"ypk",
"Cyrl, Latn",
}
m["ynl"] = {
"Yangulam",
8048663,
"ngf-nur", -- excluded from Nuru by Usher
"Latn",
}
m["ynn"] = {
"Yana",
56419,
"qfa-iso",
}
m["yno"] = {
"Yong",
8054978,
"tai-swe",
"Lana, Thai",
sort_key = {
Lana = "Lana-sortkey",
Thai = "Thai-sortkey"
},
}
m["yns"] = {
"Yansi",
36953,
"bnt-yak",
}
m["ynu"] = {
"Yahuna",
8050347,
"sai-tuc",
}
m["yob"] = {
"Yoba",
8054220,
"poz-ocw",
"Latn",
}
m["yog"] = {
"Yogad",
8054343,
"phi",
"Latn",
}
m["yoi"] = {
"Yonaguni",
34243,
"jpx-sry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["yol"] = {
"Yola",
56395,
"gmw-ian",
"Latn",
}
m["yom"] = {
"Yombe",
10961975,
"bnt-kng",
"Latn",
}
m["yon"] = {
"Yongkom",
8055002,
"ngf-lok",
"Latn",
}
m["yox"] = {
"Yoron",
2424943,
"jpx-nry",
"Jpan",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
strip_diacritics = s["jpx-stripdiacritics"],
sort_key = s["jpx-sortkey"],
}
m["yoy"] = {
"Yoy",
3503717,
"tai",
}
m["ypa"] = {
"Phala",
36211907,
"tbq-drp",
}
m["ypb"] = {
"Labo Phowa",
63341239,
"tbq-phw",
}
m["ypg"] = {
"Phola",
7187058,
"tbq-drp",
}
m["yph"] = {
"Phupha",
7188378,
"tbq-urp",
}
m["ypm"] = {
"Phuma",
63341260,
"tbq-muj",
}
m["ypn"] = {
"Ani Phowa",
33590104,
"tbq-phw",
}
m["ypo"] = {
"Alo Phola",
33522157,
"tbq-drp",
}
m["ypp"] = {
"Phupa",
48565467,
"tbq-urp",
}
m["ypz"] = {
"Phuza",
48565339,
"tbq-urp",
}
m["yra"] = {
"Yerakai",
8052531,
}
m["yrb"] = {
"Yareba",
3571876,
"ngf-yar",
"Latn",
}
m["yre"] = {
"Yaouré",
3913951,
"dmn-mda",
}
m["yri"] = {
"Yarí",
8049616,
}
m["yrl"] = {
"Nheengatu",
34333,
"tup-gua",
"Latn",
ancestors = "tpw",
}
m["yrn"] = {
"Yerong",
3572191,
"qfa-buy",
}
m["yro"] = {
"Ỹaroamë",
24190396,
"sai-ynm",
"Latn",
}
m["yrw"] = {
"Yarawata",
8049237,
"ngf-num",
"Latn",
}
m["yry"] = {
"Yarluyandi",
33061540,
"aus-kar",
"Latn",
}
m["ysc"] = {
"Jassic",
2479368,
"xsc-sar",
"Latn",
ancestors = "oos",
}
m["ysd"] = {
"Samatao",
7408902,
"tbq-kzh",
}
m["ysg"] = {
"Sonaga",
7560736,
"tbq-tal",
}
m["ysl"] = {
"Yugoslavian Sign Language",
8060373,
"sgn",
}
m["ysn"] = {
"Sani",
1055287,
"tbq-axi",
"Latn", -- Not Yiii, which is the Nuosu syllabary, and does not cover classical Yi scripts.
}
m["yso"] = {
"Nisi",
12953326,
"tbq-sel",
}
m["ysp"] = {
"Southern Lolopo",
12633989,
"tbq-llo",
}
m["ysr"] = {
"Sirenik",
28156,
"ypk",
"Cyrl",
translit = "ysr-translit",
strip_diacritics = {remove_diacritics = c.acute .. c.macron},
}
m["yss"] = {
"Yessan-Mayo",
8052927,
"paa-sep",
"Latn",
}
m["ysy"] = {
"Sanie",
7418287,
"tbq-kzh",
}
m["yta"] = {
"Talu",
16999095,
"tbq-tal",
}
m["ytl"] = {
"Toloza",
7786695,
"tbq-lso",
}
m["ytp"] = {
"Thopho",
7796015,
"tbq-muj",
}
m["ytw"] = {
"Yout Wam",
31819036,
"ngf-yup",
"Latn",
}
m["yty"] = {
"Yatay",
63341274,
"aus-pmn",
"Latn",
}
m["yua"] = {
"Yucatec Maya",
13354,
"myn",
"Latn",
}
m["yub"] = {
"Yugambal",
3446663,
}
m["yuc"] = {
"Yuchi",
34204,
"qfa-iso",
"Latn",
}
m["yue"] = {
"Cantonese",
9186,
"zhx-yue",
"Hants, Latn",
wikimedia_codes = "yue, zh-yue",
generate_forms = "zh-generateforms",
translit = {Hani = "zh-translit"},
sort_key = {Hani = "Hani-sortkey"},
}
m["yuf"] = {
"Havasupai-Walapai-Yavapai",
3565286,
"nai-yuc",
"Latn",
}
m["yug"] = {
"Yug",
56311,
"qfa-yke",
"Cyrl",
}
m["yui"] = {
"Yurutí",
3573266,
"sai-tuc",
"Latn",
}
m["yuj"] = {
"Karkar-Yuri",
2992906,
"paa-epw",
"Latn",
}
m["yuk"] = {
"Yuki",
36993,
"nai-ykn",
"Latn",
}
m["yul"] = {
"Yulu",
3915595,
"csu-bba",
}
m["yum"] = {
"Yuma",
3573199,
"nai-yuc",
"Latn",
}
m["yun"] = {
"Bena",
3913283,
"alv-yun",
"Latn",
}
m["yup"] = {
"Yukpa",
3441447,
"sai-yuk",
"Latn",
}
m["yuq"] = {
"Yuqui",
8061440,
"tup-gua",
"Latn",
}
m["yur"] = {
"Yurok",
34685,
"aql",
"Latn",
}
m["yut"] = {
"Yopno",
12953338,
"ngf-yup",
"Latn",
}
m["yuw"] = {
"Yau (Finisterre)",
12953319,
"ngf-ynu",
"Latn",
}
m["yux"] = {
"Southern Yukaghir",
56545,
"qfa-yuk",
"Cyrl",
translit = "yux-translit",
}
m["yuy"] = {
"East Yugur",
29902,
"xgn-sou",
"Latn",
}
m["yuz"] = {
"Yuracare",
2640646,
"qfa-iso",
"Latn",
}
m["yva"] = {
"Yawa",
3572020,
"paa-ysa",
"Latn",
}
m["yvt"] = {
"Yavitero",
3441427,
"awd",
"Latn",
}
m["ywa"] = {
"Kalou",
6354305,
"paa-sep",
"Latn",
}
m["ywg"] = {
"Yinhawangka",
8053734,
"aus-nga",
"Latn",
}
m["ywl"] = {
"Western Lalu",
12953325,
"tbq-lal",
}
m["ywn"] = {
"Yawanawa",
10322118,
"sai-pan",
"Latn",
}
m["ywq"] = {
"Nasu",
25559456,
"tbq-nas",
"Plrd", -- Not Yiii, which is the Nuosu syllabary, and does not cover classical Yi scripts.
}
m["ywr"] = {
"Yawuru",
8050479,
"aus-nyu",
"Latn",
}
m["ywt"] = {
"Xishanba Lalo",
12953336,
"tbq-lal",
}
m["ywu"] = {
"Wumeng",
25559442,
"tbq-nas",
}
m["yww"] = {
"Yawarawarga",
10723454,
"aus-kar",
"Latn",
}
m["yxa"] = {
"Mayawali",
33060513,
"aus-pam",
"Latn",
}
m["yxg"] = {
"Yagara",
16979305,
"aus-pam",
"Latn",
}
m["yxl"] = {
"Yarli",
46264708,
"aus-pam",
"Latn",
}
m["yxm"] = {
"Yinwum",
8053763,
"aus-pam",
"Latn",
}
m["yxu"] = {
"Yuyu",
8062232,
"aus-pam",
"Latn",
}
m["yxy"] = {
"Yabula Yabula",
8046394,
"aus-pam",
"Latn",
}
m["yyu"] = {
"Yau (Torricelli)",
8050328,
"paa-wap",
"Latn",
}
m["yyz"] = {
"Ayizi",
20527363,
"tbq-nas",
}
m["yzg"] = {
"E'ma Buyang",
16115619,
"qfa-buy",
}
m["yzk"] = {
"Zokhuo",
8073523,
"tbq-phw",
}
return require("Module:languages").finalizeData(m, "language")
833r7yrdplte5xjz7de5wzg42yihoax
Mòideal:string/startswith
828
16791
86316
2026-07-22T09:02:05Z
Altronic
4137
Copy from English Wiktionary
86316
Scribunto
text/plain
local sub = string.sub
--[==[
Returns {true} if the string {str} starts with the string {val}, or {false} if not. The optional indices {i} and {j} can be used to check a substring of {str}.
Note that {val} is a string literal, not a Lua pattern.]==]
return function(str, val, i, j)
return sub(i == nil and j == nil and str or sub(str, i, j), 1, #val) == val
end
jgk0bml25td95gm31b74lbvgn76z0xt
Teamplaid:language data search
10
16792
86317
2026-07-22T09:03:33Z
Altronic
4137
Copy from English Wiktionary
86317
wikitext
text/x-wiki
<div style="float: right; width: 30em; margin: 0 0 1em 0.5em; border: 1px solid var(--wikt-palette-grey-7,darkgray); padding: 0.5em;">
<inputbox>
type=fulltext
searchfilter=incategory:Language_data_modules|Language_extra_data_modules 
searchbuttonlabel=Lorg air cànan no còd cànain
prefix=Module:
</inputbox>
</div><noinclude>
</noinclude>
f0envqs0siyefh38jiuu502uoqflnc3
Mòideal:string/decodeEntities
828
16793
86318
2026-07-22T09:09:02Z
Altronic
4137
Copy from English Wiktionary
86318
Scribunto
text/plain
local load_module = "Module:load"
local string_char_module = "Module:string/char"
local find = string.find
local gsub = string.gsub
local match = string.match
local require = require
local tonumber = tonumber
local function u(...)
u = require(string_char_module)
return u(...)
end
local entities
local function get_entities()
entities, get_entities = require(load_module).load_data("Module:data/entities"), nil
return entities
end
local function decode_entity(hash, x, code)
-- "#" isn't included in "[%w\128-\255]", so if no "#" is found then it's a
-- a named entity or a false match.
if hash == "" then
return (entities or get_entities())[x .. code]
end
-- Exclude numbers that don't fit the expected format.
local cp
if x == "" then
cp = match(code, "^()%d+$") and tonumber(code)
else
cp = match(code, "^()%x+$") and tonumber(code, 16)
end
-- Exclude surrogates (U+D800 to U+DFFF) and codepoints that are too high.
return cp and (
cp <= 0xD7FF or
cp >= 0xE000 and cp <= 0x10FFFF
) and u(cp) or nil
end
return function(str)
-- As an optimisation, only do a full search with gsub() if plain searches
-- for "&" and ";" find anything.
local amp = find(str, "&", nil, true)
-- Search for ";" after the point "&" was found.
return amp and find(str, ";", amp + 1, true) and
-- Non-ASCII characters aren't valid in proper HTML named entities, but
-- MediaWiki uses them in some nonstandard aliases (which have also been
-- included in [[Module:data/entities]]), so include them anyway.
gsub(str, "&(#?)([xX]?)([%w\128-\255]+);", decode_entity) or
str
end
1ehplvn1q6ksitguquhvf1khnaq3mxd
Mòideal:string/removeComments
828
16794
86319
2026-07-22T09:09:54Z
Altronic
4137
Copy from English Wiktionary
86319
Scribunto
text/plain
local concat = table.concat
local find = string.find
local sub = string.sub
local function remove_comments(str, pre)
local pos1 = find(str, "<!--", nil, true)
if not pos1 then
return str
end
local pos2 = find(str, "-->", pos1 + 4, true)
if not pos2 then
return pre and sub(str, 1, pos1 - 1) or str
end
local ret = sub(str, 1, pos1 - 1)
pos1 = pos2 + 3
pos2 = find(str, "<!--", pos1, true)
if not pos2 then
return ret .. sub(str, pos1)
end
local pos3 = find(str, "-->", pos2 + 4, true)
if not pos3 then
return ret .. sub(str, pos1, pre and pos2 - 1 or nil)
end
ret = {ret, sub(str, pos1, pos2 - 1)}
local n = 2
while true do
pos1 = pos3 + 3
pos2 = find(str, "<!--", pos1, true)
if not pos2 then
return concat(ret) .. sub(str, pos1)
end
pos3 = find(str, "-->", pos2 + 4, true)
if not pos3 then
return concat(ret) .. sub(str, pos1, pre and pos2 - 1 or nil)
end
n = n + 1
ret[n] = sub(str, pos1, pos2 - 1)
end
end
--[==[Removes any HTML comments from the input text. `stage` can be one of three options:
* {"PRE"} (default) applies the method used by MediaWiki's preprocessor: all {{code|html|<nowiki><!-- ... --></nowiki>}} pairs are removed, as well as any text after an unclosed {{code|html|<nowiki><!--</nowiki>}}. This is generally suitable when parsing raw template or [[mw:Parser extension tags|parser extension tag]] code. (Note, however, that the actual method used by the preprocessor is considerably more complex and differs under certain conditions (e.g. comments inside nowiki tags); if full accuracy is absolutely necessary, use [[Module:template parser]] instead).
* {"POST"} applies the method used to generate the final page output once all templates have been expanded: it loops over the text, removing any {{code|html|<nowiki><!-- ... --></nowiki>}} pairs until no more are found (e.g. {{code|html|<nowiki><!-<!-- ... -->- ... --></nowiki>}} would be fully removed), but any unclosed {{code|html|<nowiki><!--</nowiki>}} is ignored. This is suitable for handling links embedded in template inputs, where the {"PRE"} method will have already been applied by the native parser.
* {"BOTH"} applies {"PRE"} then {"POST"}.]==]
return function(str, stage)
if stage == nil or stage == "PRE" then
return remove_comments(str, true)
elseif stage == "BOTH" then
str = remove_comments(str, true)
elseif stage ~= "POST" then
error("bad argument #2 to 'remove_comments' (expected PRE, POST, or BOTH)", 2)
end
while true do
local processed = remove_comments(str)
if processed == str then
return str
end
str = processed
end
end
6q2u94c4jook0g0vegx0uyg6x3jd1ms
Mòideal:frame
828
16795
86320
2026-07-22T09:15:03Z
Altronic
4137
Copy from English Wiktionary
86320
Scribunto
text/plain
local export = {}
local frame
local function get_frame()
frame = mw.getCurrentFrame():newChild{}
return frame
end
function export.callParserFunction(...)
return (frame or get_frame()):callParserFunction(...)
end
function export.expandTemplate(...)
return (frame or get_frame()):expandTemplate(...)
end
function export.extensionTag(...)
return (frame or get_frame()):extensionTag(...)
end
function export.newParserValue(...)
return (frame or get_frame()):newParserValue(...)
end
function export.newTemplateParserValue(...)
return (frame or get_frame()):newTemplateParserValue(...)
end
function export.preprocess(...)
return (frame or get_frame()):preprocess(...)
end
return export
qus7nsaebnecffh2rohmte6zvmmyoag
Mòideal:languages/data/3/c
828
16796
86323
2026-07-22T20:53:44Z
Altronic
4137
Copy from English Wiktionary
86323
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["caa"] = {
"Ch'orti'",
35177,
"myn",
"Latn",
}
m["cab"] = {
"Garifuna",
35490,
"awd-taa",
"Latn",
ancestors = "crb",
}
m["cac"] = {
"Chuj",
35233,
"myn",
"Latn",
}
m["cad"] = {
"Caddo",
56756,
"cdd",
"Latn",
}
m["cae"] = {
"Laalaa",
35564,
"alv-cng",
"Latn",
}
m["caf"] = {
"Southern Carrier",
12953426,
"ath-nor",
"Latn",
}
m["cag"] = {
"Nivaclé",
3182557,
"sai-mtc",
"Latn",
}
m["cah"] = {
"Cahuarano",
2933175,
"sai-zap",
"Latn",
}
m["caj"] = {
"Chané",
56721,
"awd",
"Latn",
}
m["cak"] = {
"Kaqchikel",
35115,
"myn",
"Latn",
}
m["cal"] = {
"Carolinian",
28427,
"poz-mic",
"Latn",
}
m["cam"] = {
"Cèmuhî",
3009690,
"poz-cln",
"Latn",
}
m["can"] = {
"Chambri",
5069707,
"paa-lse",
"Latn",
}
m["cao"] = {
"Chácobo",
2591202,
"sai-pan",
"Latn",
}
m["cap"] = {
"Chipaya",
35235,
"sai-ucp",
"Latn",
}
m["caq"] = {
"Car Nicobarese",
35156,
"aav-nic",
"Latn, Deva",
}
m["car"] = {
"Kari'na",
56611,
"sai-gui",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. "`" .. "'%-%s"},
strip_diacritics = {
remove_diacritics = c.acute,
from = {"â", "ê", "î", "ô", "û", "ŷ"},
to = {"à", "è", "ì", "ò", "ù", "ỳ"}
},
}
m["cas"] = {
"Tsimané",
35950,
"qfa-dis", -- isolate or in a putative Putative Mosetan-Chonan family
"Latn",
}
m["cav"] = {
"Cavineña",
524102,
"sai-tac",
"Latn",
}
m["caw"] = {
"Kallawaya",
266417,
"qfa-mix",
"Latn",
}
m["cax"] = {
"Chiquitano",
1844993,
"qfa-iso", -- isolate or Macro-Jê
"Latn",
}
m["cay"] = {
"Cayuga",
32967,
"iro-nor",
"Latn",
}
m["caz"] = {
"Canichana",
2936374,
"qfa-dis", -- isolate, unclassified or in a putative Tequiraca-Canichana family
"Latn",
}
m["cbb"] = {
"Cabiyarí",
3450660,
"awd-nwk",
"Latn",
}
m["cbc"] = {
"Carapana",
924405,
"sai-tuc",
"Latn",
}
m["cbd"] = {
"Carijona",
3446655,
"sai-tar",
"Latn",
}
m["cbg"] = {
"Chimila",
2963680,
"cba",
"Latn",
}
m["cbi"] = {
"Chachi",
2591329,
"sai-bar",
"Latn",
}
m["cbj"] = {
"Ede Cabe",
33112829,
"alv-ede",
"Latn",
}
m["cbk"] = {
"Chavacano",
33281,
"crp",
"Latn",
ancestors = "es",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer},
sort_key = {
from = {"ch", "ll", "ñ", "r"},
to = {"c" .. p[1], "l" .. p[1], "n" .. p[1], "r" .. p[1]}
},
standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnÑñOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc,
}
m["cbl"] = {
"Bualkhaw Chin",
9229830,
"tbq-kuk",
"Latn",
}
m["cbn"] = {
"Nyah Kur",
116849,
"mkh-mnc",
"Thai",
ancestors = "omx",
sort_key = "Thai-sortkey",
}
m["cbo"] = {
"Izora",
3915454,
"nic-jer",
"Latn",
}
m["cbq"] = {
"Tsucuba",
62603062,
"nic-knj",
"Latn",
}
m["cbr"] = {
"Cashibo-Cacataibo",
5359560,
"sai-pan",
"Latn",
}
m["cbs"] = {
"Cashinahua",
2591230,
"sai-pan",
"Latn",
}
m["cbt"] = {
"Chayahuita",
1526525,
"sai-cah",
"Latn",
}
m["cbu"] = {
"Candoshi-Shapra",
642843,
"qfa-dis", -- isolate or related to extinct Chirino; Kaufman (2007) puts it in Saparo-Yawan, Jolkesky (2016) as
-- Macro-Arawakan
"Latn",
}
m["cbv"] = {
"Cacua",
3192052,
"sai-nad",
"Latn",
ancestors = "mbr",
}
m["cbw"] = {
"Kinabalian",
6410324,
"phi",
"Latn",
}
m["cby"] = {
"Carabayo",
3441762,
"sai-tyu",
"Latn",
}
m["ccc"] = {
"Chamicuro",
2155119,
"awd",
"Latn",
}
m["ccd"] = {
"Cafundó",
3331506,
"roa-gap",
"Latn",
ancestors = "pt",
}
m["cce"] = {
"Chopi",
3437616,
"bnt-bso",
"Latn",
}
m["ccg"] = {
"Chamba Daka",
33120805,
"nic-dak",
"Latn",
}
m["cch"] = {
"Atsam",
34794,
"nic-kne",
"Latn",
}
m["ccj"] = {
"Kasanga",
35542,
"alv-nyn",
"Latn",
}
m["ccl"] = {
"Cutchi-Swahili",
5196729,
"crp",
"Latn",
ancestors = "sw",
}
m["ccm"] = {
"Malaccan Creole Malay",
12636092,
"crp",
"Latn",
ancestors = "ms",
}
m["cco"] = {
"Comaltepec Chinantec",
2963735,
"omq-chi",
"Latn",
}
m["ccp"] = {
"Chakma",
32952,
"inc-bas",
"Cakm, Beng, Latn",
ancestors = "inc-obn",
translit = {
Cakm = "Cakm-translit",
--Beng = "Beng-translit",
},
}
m["ccr"] = {
"Cacaopera",
3438338,
"nai-min",
"Latn",
}
m["cda"] = {
"Choni",
2964447,
"sit-tib",
}
m["cde"] = {
"Chenchu",
32981,
"dra-tel",
"Telu",
}
m["cdf"] = {
"Chiru",
5102016,
"tbq-kuk",
"Latn, Beng",
}
m["cdh"] = {
"Chambeali",
12953424,
"him",
"Deva, Takr",
translit = {
Deva = "hi-translit"
},
}
m["cdi"] = {
"Chodri",
5103788,
"inc-bhi",
"Gujr",
}
m["cdj"] = {
"Churahi",
12629039,
"him",
"Deva, Takr",
translit = {
Deva = "hi-translit"
},
}
m["cdm"] = {
"Chepang",
5091700,
"sit-gma",
"Deva",
}
m["cdn"] = {
"Chaudangsi",
5088056,
"sit-alm",
}
m["cdo"] = {
"Eastern Min",
36455,
"zhx-com",
"Hants, Latn",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["cdr"] = {
"Cinda-Regi-Tiyal",
35596,
"nic-kmk",
"Latn",
}
m["cds"] = {
"Chadian Sign Language",
10322099,
"sgn-asl",
"Latn", -- when documented
}
m["cdy"] = {
"Chadong",
926742,
"qfa-kms",
}
m["cdz"] = {
"Koda",
6425038,
"mun",
"Beng",
}
m["cea"] = {
"Lower Chehalis",
6693377,
"sal",
"Latn",
}
m["ceb"] = {
"Cebuano",
33239,
"phi",
"Latn, Tglg",
translit = {
Tglg = "ceb-translit"
},
override_translit = true,
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ
}
},
sort_key = {
Latn = "tl-sortkey",
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
}
m["ceg"] = {
"Chamacoco",
3436637,
"sai-zam",
"Latn",
}
m["cen"] = {
"Cen",
12628777,
"nic-plc",
"Latn",
ancestors = "izr",
}
m["cet"] = {
"Centúúm",
33608,
"qfa-iso", -- northeastern Nigeria
"Latn",
}
m["cfa"] = {
"Dijim-Bwilim",
3438350,
"alv-wjk",
"Latn",
}
m["cfd"] = {
"Cara",
35048,
"nic-beo",
"Latn",
}
m["cfg"] = {
"Como Karim",
35304,
"nic-jkn",
"Latn",
}
m["cfm"] = {
"Falam Chin",
56815,
"tbq-kuk",
"Beng, Latn",
}
m["cga"] = {
"Changriwa",
5072105,
"paa-yua",
"Latn",
}
m["cgc"] = {
"Kagayanen",
6346422,
"mno",
"Latn",
}
m["cgg"] = {
"Rukiga",
3270727,
"bnt-nyg",
"Latn",
}
m["cgk"] = {
"Chocangaca",
56604,
"sit-tib",
"Tibt",
ancestors = "xct",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["chb"] = {
"Chibcha",
2356431,
"cba",
"Latn",
}
m["chc"] = {
"Catawba",
5051602,
"nai-cat",
"Latn",
}
m["chd"] = {
"Highland Oaxaca Chontal",
2964457,
"nai-tqn",
"Latn",
}
m["chf"] = {
"Chontal Maya",
35175,
"myn",
"Latn",
}
m["chg"] = {
"Chagatai",
36831,
"trk-kar",
"Arab, Ougr",
ancestors = "zkh",
strip_diacritics = {
remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef,
from = {u(0x0671)},
to = {u(0x0627)}
},
translit = {
Arab = "chg-translit",
Ougr = "Ougr-translit",
},
}
m["chh"] = {
"Chinook",
6693380,
"nai-ckn",
"Latn",
}
m["chj"] = {
"Ojitlán Chinantec",
5100110,
"omq-chi",
"Latn",
}
m["chk"] = {
"Chuukese",
33161,
"poz-mic",
"Latn",
}
m["chl"] = {
"Cahuilla",
56438,
"azc-cup",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.macron},
}
-- chm "Mari" is not recognized as a language, but it is a family code
m["chn"] = {
"Chinook Jargon",
35173,
"crp",
"Latn, Dupl",
ancestors = "chh, nuk",
}
m["cho"] = {
"Choctaw",
32979,
"nai-mus",
"Latn",
sort_key = {remove_diacritics = c.macronbelow .. "-"},
strip_diacritics = {remove_diacritics = c.acute .. c.dotbelow},
}
m["chp"] = {
"Chipewyan",
27692,
"ath-nor",
"Latn, Cans",
}
m["chq"] = {
"Quiotepec Chinantec",
5758709,
"omq-chi",
"Latn",
}
m["chr"] = {
"Cherokee",
33388,
"iro",
"Cher",
translit = "Cher-translit",
}
m["cht"] = {
"Cholón",
2591243,
"qfa-unc", -- poorly attested; possibly in a Hibito-Cholon or Cholonan family
"Latn",
}
m["chw"] = {
"Chuabo",
5118412,
"bnt-mak",
"Latn",
}
m["chx"] = {
"Chantyal",
4926344,
"sit-tam",
"Deva",
}
m["chy"] = {
"Cheyenne",
33265,
"alg",
"Latn",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.macron .. c.dotabove .. "-"},
standard_chars = "AaÁáÀàĀāȦȧEeÉéÈèĒēĖėHhKkMmNnOoÓóÒòŌōȮȯPpSsŠšTtVvXx" .. c.punc, --umlaut and circumflex not allowed
}
m["chz"] = {
"Ozumacín Chinantec",
5100111,
"omq-chi",
"Latn",
}
m["cia"] = {
"Cia-Cia",
35284,
"poz-mun",
"Hang, Latn, Arab",
}
m["cib"] = {
"Ci Gbe",
12952445,
"alv-gbe",
"Latn",
}
m["cic"] = {
"Chickasaw",
33192,
"nai-mus",
"Latn",
}
m["cid"] = {
"Chimariko",
1294251,
"qfa-iso", -- possibly Hokan
"Latn",
}
m["cie"] = {
"Cineni",
56243,
"cdc-cbm",
"Latn",
}
m["cih"] = {
"Chinali",
11855245,
"inc",
"Deva",
ancestors = "sa",
}
m["cik"] = {
"Chitkuli Kinnauri",
15615982,
"sit-kin",
}
m["cim"] = {
"Cimbrian",
37053,
"gmw-hgm",
"Latn",
ancestors = "bar",
sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove .. c.caron},
}
m["cin"] = {
"Cinta Larga",
5121095,
"tup",
"Latn",
}
m["cip"] = {
"Chiapanec",
3364475,
"omq",
"Latn",
}
m["cir"] = {
"Tinrin",
7862281,
"poz-cln",
"Latn",
}
m["ciy"] = {
"Chaima",
12628867,
"sai-ven",
"Latn",
}
m["cja"] = {
"Western Cham",
12645578,
"cmc",
"Latn, Arab, Khmr, Cham", -- Western Cham script is not yet available. Also, Arabic script is missing some glyphs.
}
m["cje"] = {
"Chru",
2967321,
"cmc",
"Latn",
}
m["cjh"] = {
"Upper Chehalis",
2962074,
"sal",
"Latn",
}
m["cji"] = {
"Chamalal",
56567,
"cau-and",
"Cyrl",
translit = "cau-nec-translit",
override_translit = true,
display_text = s["cau-Cyrl-displaytext"],
strip_diacritics = s["cau-Cyrl-stripdiacritics"],
}
m["cjk"] = {
"Chokwe",
2422065,
"bnt-clu",
"Latn",
}
m["cjm"] = {
"Eastern Cham",
2948019,
"cmc",
"Latn, Cham",
}
m["cjn"] = {
"Chenapian",
5091044,
"paa-sep",
"Latn",
}
m["cjo"] = {
"Pajonal Ashéninka",
3450481,
"awd",
"Latn",
}
m["cjp"] = {
"Cabécar",
27878,
"cba",
"Latn",
}
m["cjs"] = {
"Shor",
34139,
"trk-ssb",
"Cyrl",
}
m["cjv"] = {
"Chuave",
5115226,
"ngf-sim",
"Latn",
}
m["cjy"] = {
"Jin",
56479,
"zhx",
"Hants",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["ckb"] = {
"Central Kurdish",
36811,
"ku",
"ku-Arab",
translit = "ckb-translit",
strip_diacritics = {remove_diacritics = c.kasra .. c.sukun},
}
m["ckh"] = {
"Chak",
12628870,
"sit-luu",
"Latn",
ancestors = "kdv",
}
m["ckl"] = {
"Cibak",
56279,
"cdc-cbm",
"Latn",
}
m["ckn"] = {
"Kaang Chin",
6343432,
"tbq-kuk",
"Latn",
}
m["cko"] = {
"Anufo",
34845,
"alv-ctn",
"Latn",
}
m["ckq"] = {
"Kajakse",
3440422,
"cdc-est",
"Latn",
}
m["ckr"] = {
"Kairak",
3503002,
"paa-bai",
"Latn",
}
m["cks"] = {
"Tayo",
1133089,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["ckt"] = {
"Chukchi",
33170,
"qfa-ckn",
"Cyrl, Latn", -- Latn is obsolete
strip_diacritics = {
from = {"['’]"},
to = {"ʼ"}
},
sort_key = {
from = {"ё", "ӄ", "ԓ", "ӈ"},
to = {"е" .. p[1], "к" .. p[1], "л" .. p[1], "н" .. p[1]}
},
}
m["cku"] = {
"Koasati",
35162,
"nai-mus",
"Latn",
}
m["ckv"] = {
"Kavalan",
716627,
"map",
"Latn",
}
m["ckx"] = {
"Caka",
5018037,
"nic-tvc",
"Latn",
}
m["cky"] = {
"Cakfem-Mushere",
3441199,
"cdc-wst",
"Latn",
}
m["ckz"] = {
"Kaqchikel-K'iche' Mixed Language",
5054550,
"qfa-mix",
"Latn",
ancestors = "cak, quc"
}
m["cla"] = {
"Ron",
3440432,
"cdc-wst",
"Latn",
}
m["clc"] = {
"Chilcotin",
28535,
"ath-nor",
"Latn",
}
m["cld"] = {
"Chaldean Neo-Aramaic",
33236,
"sem-are",
"Syrc",
strip_diacritics = "Syrc-stripdiacritics",
}
m["cle"] = {
"Lealao Chinantec",
6509365,
"omq-chi",
"Latn",
}
m["clh"] = {
"Chilisso",
3250629,
"inc-koh",
"ur-Arab",
}
m["cli"] = {
"Chakali",
35206,
"nic-gnw",
"Latn",
}
m["clj"] = {
"Laitu Chin",
6474196,
"tbq-kuk",
}
m["clk"] = {
"Idu",
56412,
"sit-gsi",
"Tibt, Deva",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cll"] = {
"Chala",
35190,
"nic-gne",
"Latn",
}
m["clm"] = {
"Klallam",
33404,
"sal",
"Latn",
}
m["clo"] = {
"Lowland Oaxaca Chontal",
2964450,
"nai-tqn",
"Latn",
}
m["clt"] = {
"Lutuv",
6502107,
"tbq-kuk",
"Latn",
}
m["clu"] = {
"Caluyanun",
32964,
"phi",
"Latn",
}
m["clw"] = {
"Chulym",
33125,
"trk-ssb",
"Latn, Cyrl",
}
m["cly"] = {
"Eastern Highland Chatino",
12642078,
"omq-cha",
"Latn",
}
m["cma"] = {
"Mạ",
12953680,
"mkh-ban",
"Latn",
}
m["cme"] = {
"Cerma",
35074,
"nic-gur",
"Latn",
}
m["cmg"] = {
"Classical Mongolian",
5128303,
"xgn-cen",
"Mong, Soyo, Zanb",
-- Mong translit, display_text and strip_diacritics in [[Module:scripts/data]]
}
m["cmi"] = {
"Emberá-Chamí",
3052042,
"sai-chc",
"Latn",
}
m["cml"] = {
"Campalagian",
5027893,
"poz-ssw",
"Latn",
}
m["cmm"] = {
"Michigamea",
12636809,
"sio-msv",
"Latn",
}
m["cmn"] = {
"Mandarin",
9192,
"zhx-man",
"Hants, Latn, Bopo, Brai",
wikimedia_codes = "zh",
generate_forms = "zh-generateforms",
translit = {
Hani = "zh-translit",
Bopo = "zh-translit",
},
sort_key = {
Hani = "Hani-sortkey",
Latn = {
from = {
-- Sort terms with tone numbers immediately after equivalent terms with diacritics.
"[aeiouv][" .. c.circ .. c.diaer .. "]?[nr]?g?[0-5]",
-- Add temporary breaks between syllables.
"([aeiouvmn][" .. c.circ .. c.diaer .. "]?[" .. c.macron .. c.acute .. c.caron .. c.grave .. "]?n?ŋ?g?r?)([bpmfdtnlgkhjqxzcsywrv']h?[aeiouvmn ])", p[1] .. "([ngr])$", p[1] .. "([ngr][%s%-'" .. p[1] .. "])",
-- Substitute diacritics for syllable-final tone numbers, and add tone 0 where necessary.
c.macron, c.acute, c.caron, c.grave, "([1-4])([^%s%p" .. p[1] .. "]+)", "([^0-5])%f[%z%s%p" .. p[1] .. "]",
-- Substitute "v" shorthand for "ü" for a temporary placeholder, so that the (very rare) "v" initial is not affected by the later shorthand substitutions.
"([^ " .. p[1] .. "])v",
-- Remove temporary breaks.
p[1],
-- Substitute shorthands for full forms, and sort them immediately after equivalent terms.
"%S*[csz]" .. c.circ .. "%S*", "%S*[ŋ" .. p[2] .. "]%S*", "ĉ", "ŝ", "ŋ", p[2], "ẑ",
-- "ê" comes after "e", "ü" comes after "u" and apostrophes are removed (as their function is replaced by tone numbers).
"[" .. c.circ .. c.diaer .. "]", "'",
-- Sort numbered tone 5 after tone 0.
"5!"
},
to = {
"%0!",
"%1" .. p[1] .. "%2", "%1", "%1",
"1", "2", "3", "4", "%2%1", "%10",
"%1" .. p[2],
"",
"%0\"", "%0\"", "ch", "sh", "ng", "ü", "zh",
p[1], "",
"0!!"
}
},
},
}
m["cmo"] = {
"Central Mnong",
33369881,
"mkh-ban",
"Khmr, Latn",
}
m["cmr"] = {
"Mro Chin",
16889978,
"tbq-kuk",
}
m["cms"] = {
"Messapic",
36383,
"ine",
"Polyt",
translit = "cms-translit",
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cmt"] = {
"Camtho",
10441336,
"crp",
"Latn",
ancestors = "fly, zu"
}
m["cna"] = {
"Changthang",
12952322,
"sit-lab",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cnb"] = {
"Chinbon Chin",
12952327,
"tbq-kuk",
"Latn",
}
m["cnc"] = {
"Cốông",
5202780,
"tbq-bis",
"Latn",
}
m["cng"] = {
"Northern Qiang",
56559,
"sit-qia",
"Latn",
}
m["cnh"] = {
"Lai",
3250286,
"tbq-kuk",
"Latn, Mymr",
}
m["cni"] = {
"Asháninka",
3437230,
"awd",
"Latn",
}
m["cnk"] = {
"Khumi Chin",
56308,
"tbq-kuk",
"Latn",
}
m["cnl"] = {
"Lalana Chinantec",
12953437,
"omq-chi",
"Latn",
}
m["cno"] = {
"Con",
3440883,
"mkh-pal",
}
m["cnp"] = {
"Northern Pinghua",
84302463,
"zhx-pin",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["cns"] = {
"Central Asmat",
11732048,
"ngf-asm",
"Latn",
}
m["cnt"] = {
"Tepetotutla Chinantec",
5100113,
"omq-chi",
"Latn",
}
m["cnu"] = {
"Chenoua",
33276,
"ber",
"Latn",
}
m["cnw"] = {
"Ngawn Chin",
6583675,
"tbq-kuk",
}
m["cnx"] = {
"Middle Cornish",
12642603,
"cel-brs",
"Latn",
ancestors = "oco",
}
m["coa"] = {
"Cocos Islands Malay",
3441699,
"crp",
"Latn",
ancestors = "ms",
}
m["cob"] = {
"Chicomuceltec",
3307204,
"myn",
"Latn",
}
m["coc"] = {
"Cocopa",
33044,
"nai-yuc",
"Latn",
}
m["cod"] = {
"Cocama",
33317,
"tup",
"Latn",
}
m["coe"] = {
"Koreguaje",
3198924,
"sai-tuc",
"Latn",
}
m["cof"] = {
"Tsafiki",
2567055,
"sai-bar",
"Latn",
}
m["cog"] = {
"Chong",
3914630,
"mkh-pea",
"Thai, Khmr",
sort_key = {
Thai = "Thai-sortkey"
},
}
m["coh"] = {
"Chichonyi-Chidzihana-Chikauma",
12629011,
"bnt-mij",
"Latn",
}
m["coj"] = {
"Cochimi",
3915551,
"nai-yuc",
"Latn",
}
m["cok"] = {
"Santa Teresa Cora",
12641754,
"azc",
"Latn",
}
m["col"] = {
"Columbia-Wenatchi",
3324744,
"sal",
"Latn",
}
m["com"] = {
"Comanche",
32972,
"azc-num",
"Latn",
}
m["con"] = {
"Cofán",
2669254,
"qfa-iso",
"Latn",
}
m["coo"] = {
"Comox",
13583746,
"sal",
"Latn",
}
m["cop"] = {
"Coptic",
36155,
"egx",
"Copt",
translit = "Copt-translit",
ancestors = "egx-dem",
strip_diacritics = {remove_diacritics = c.grave .. c.macron .. c.overline .. c.diaer .. "ˋ"},
sort_key = "Copt-sortkey",
}
m["coq"] = {
"Coquille",
12953452,
"ath-pco",
"Latn",
}
m["cot"] = {
"Caquinte",
3915557,
"awd",
"Latn",
}
m["cou"] = {
"Wamey",
36935,
"alv-ten",
"Latn",
}
m["cov"] = {
"Cao Miao",
2936935,
"qfa-tak",
}
m["cow"] = {
"Cowlitz",
3001877,
"sal",
"Latn",
}
m["cox"] = {
"Nanti",
15342275,
"awd",
"Latn",
}
m["coy"] = {
"Coyaima",
56450,
"sai-car",
"Latn",
}
m["coz"] = {
"Chochotec",
2964262,
"omq-pop",
"Latn",
}
m["cpa"] = {
"Palantla Chinantec",
5100112,
"omq-chi",
"Latn",
}
m["cpb"] = {
"Ucayali-Yurúa Ashéninka",
3501858,
"awd",
"Latn",
}
m["cpc"] = {
"Apurucayali Ashéninka",
3327405,
"awd",
"Latn",
}
m["cpg"] = {
"Cappadocian Greek",
853414,
"grk",
"Grek, fa-Arab",
ancestors = "gkm",
translit = {
Grek = "el-translit",
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["cpi"] = {
"Chinese Pidgin English",
3435078,
"crp",
"Latn, Hant",
ancestors = "en",
sort_key = {
Hant = "Hani-sortkey"
},
}
m["cpn"] = {
"Cherepon",
35181,
"alv-gng",
"Latn",
}
m["cpo"] = {
"Kpee",
6435722,
"dmn-jje",
}
m["cps"] = {
"Capiznon",
2937525,
"phi",
"Latn",
}
m["cpu"] = {
"Pichis Ashéninka",
7190661,
"awd",
"Latn",
}
m["cpx"] = {
"Puxian Min",
56583,
"zhx-com",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["cpy"] = {
"South Ucayali Ashéninka",
3501868,
"awd",
"Latn",
}
m["cqd"] = {
"Chuanqiandian Cluster Miao",
121627627,
"hmn",
"Latn, Plrd",
}
m["cra"] = {
"Chara",
5073694,
"omv",
"Latn",
}
m["crb"] = {
"Kalinago",
3450735,
"awd-taa",
"Latn",
}
m["crc"] = {
"Lonwolwol",
3259216,
"poz-vnc",
"Latn",
}
m["crd"] = {
"Coeur d'Alene",
32915,
"sal",
"Latn",
}
m["crf"] = {
"Caramanta",
3504195,
"sai-chc",
"Latn",
}
m["crg"] = {
"Michif",
13315,
"qfa-mix",
"Latn",
ancestors = "cr, fr",
}
m["crh"] = {
"Crimean Tatar",
33357,
"trk-kcu",
"Latn, Cyrl",
translit = {
Cyrl = "crh-translit",
},
dotted_dotless_i = true,
sort_key = {
Latn = {
from = {
"[ıi]" .. c.breve, -- Convert ĭ into PUA so that the decomposed form does not get caught by the next step. Also cover decomposed forms with ı and i, as decomposed Ĭ is converted to ı + ̆ due to the dotted dotless I logic).
"i", -- Ensure "i" comes after "ı".
"â", "ç", "ğ", "ı", p[3], "ñ", "ö", "ş", "ü"
},
to = {
p[3],
"i" .. p[1],
"a", "c" .. p[1], "g" .. p[1], "i", "i" .. p[2], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1],
}
},
Cyrl = {
from = {"гъ", "ё", "къ", "нъ", "дж"},
to = {"г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "ч" .. p[1]}
},
},
}
m["cri"] = {
"Sãotomense",
36536,
"crp",
"Latn",
ancestors = "pt",
}
m["crj"] = {
"Southern East Cree",
12953464,
"alg",
"Latn, Cans",
ancestors = "cr",
translit = {
Cans = "cr-translit"
},
}
m["crk"] = {
"Plains Cree",
56699,
"alg",
"Latn, Cans",
ancestors = "cr",
}
m["crl"] = {
"Northern East Cree",
12642195,
"alg",
"Latn, Cans",
ancestors = "cr",
translit = {
Cans = "cr-translit"
},
}
m["crm"] = {
"Moose Cree",
3446671,
"alg",
"Latn, Cans",
ancestors = "cr",
}
m["crn"] = {
"Cora",
12953454,
"azc",
"Latn",
}
m["cro"] = {
"Crow",
1207611,
"sio-mor",
"Latn",
}
m["crq"] = {
"Iyo'wujwa Chorote",
3540927,
"sai-mtc",
"Latn",
}
m["crr"] = {
"Carolina Algonquian",
16113723,
"alg-eas",
"Latn",
}
m["crs"] = {
"Seychellois Creole",
34015,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["crt"] = {
"Iyojwa'ja Chorote",
3504118,
"sai-mtc",
"Latn",
}
m["crv"] = {
"Chaura",
2605680,
"aav-nic",
"Latn",
}
m["crw"] = {
"Chrau",
5105629,
"mkh-ban",
"Latn",
}
m["crx"] = {
"Carrier",
12953431,
"ath-nor",
"Latn, Cans",
}
m["cry"] = {
"Cori",
35204,
"nic-plc",
"Latn",
}
m["crz"] = {
"Cruzeño",
2967636,
"nai-chu",
"Latn",
}
m["csa"] = {
"Chiltepec Chinantec",
12953435,
"omq-chi",
"Latn",
}
m["csb"] = {
"Kashubian",
33690,
"zlw-pom",
"Latn",
}
m["csc"] = {
"Catalan Sign Language",
35768,
"sgn",
"Latn", -- when documented
}
m["csd"] = {
"Chiangmai Sign Language",
5095211,
"sgn",
}
m["cse"] = {
"Czech Sign Language",
5201809,
"sgn",
"Latn", -- when documented
}
m["csf"] = {
"Cuban Sign Language",
5192046,
"sgn",
"Latn", -- when documented
}
m["csg"] = {
"Chilean Sign Language",
3322112,
"sgn",
"Latn", -- when documented
}
m["csh"] = {
"Asho Chin",
12627282,
"tbq-kuk",
"Latn, Mymr",
}
m["csi"] = {
"Coast Miwok",
2981109,
"nai-utn",
"Latn",
}
m["csj"] = {
"Songlai Chin",
7561280,
"tbq-kuk",
}
m["csk"] = {
"Jola-Kasa",
3446622,
"alv-jol",
"Latn",
}
m["csl"] = {
"Chinese Sign Language",
1094190,
"sgn",
}
m["csm"] = {
"Central Sierra Miwok",
2944443,
"nai-utn",
"Latn",
}
m["csn"] = {
"Colombian Sign Language",
2748229,
"sgn",
"Latn", -- when documented
}
m["cso"] = {
"Sochiapam Chinantec",
7550388,
"omq-chi",
"Latn",
}
m["csp"] = {
"Southern Pinghua",
84302019,
"zhx-pin",
"Hants",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["csq"] = {
"Croatian Sign Language",
3507506,
"sgn",
}
m["csr"] = {
"Costa Rican Sign Language",
5174901,
"sgn-asl",
"Latn", -- when documented
}
m["css"] = {
"Southern Ohlone",
25559664,
"nai-utn",
"Latn",
}
m["cst"] = {
"Northern Ohlone",
25559666,
"nai-utn",
"Latn",
}
m["csv"] = {
"Sumtu Chin",
7638087,
"tbq-kuk",
}
m["csw"] = {
"Swampy Cree",
56696,
"alg",
"Latn, Cans",
ancestors = "cr",
}
m["csx"] = {
"Cambodian Sign Language",
50934287,
"sgn",
}
m["csy"] = {
"Siyin Chin",
7533375,
"tbq-kuk",
}
m["csz"] = {
"Coos",
3126783,
"nai-coo",
"Latn",
}
m["cta"] = {
"Tataltepec Chatino",
7687853,
"omq-cha",
"Latn",
}
m["ctc"] = {
"Chetco-Tolowa",
12628946,
"ath-pco",
"Latn",
}
m["ctd"] = {
"Tedim Chin",
56357,
"tbq-kuk",
"Latn, Pauc",
}
m["cte"] = {
"Tepinapa Chinantec",
12953443,
"omq-chi",
"Latn",
}
m["ctg"] = {
"Chittagonian",
33173,
"inc-bas",
"Beng",
ancestors = "inc-obn",
}
m["cth"] = {
"Thaiphum Chin",
16912048,
"tbq-kuk",
}
m["ctl"] = {
"Tlacoatzintepec Chinantec",
12643657,
"omq-chi",
"Latn",
}
m["ctm"] = {
"Chitimacha",
1294227,
"qfa-iso", -- recently proposed to be in the Totozoquean family
"Latn",
}
m["ctn"] = {
"Chhintange",
32994,
"sit-kie",
"Deva",
}
m["cto"] = {
"Emberá-Catío",
3052039,
"sai-chc",
"Latn",
}
m["ctp"] = {
"Western Highland Chatino",
32861734,
"omq-cha",
"Latn",
strip_diacritics = {remove_diacritics = "¹²³⁴⁵"},
sort_key = {remove_diacritics = c.acute},
}
m["cts"] = {
"Northern Catanduanes Bikol",
7130477,
"phi",
"Latn",
}
m["ctt"] = {
"Wayanad Chetti",
7975850,
"dra-mal",
"Taml",
}
m["ctu"] = {
"Chol",
35179,
"myn",
"Latn",
}
m["ctz"] = {
"Zacatepec Chatino",
8063754,
"omq-cha",
"Latn",
}
m["cua"] = {
"Cua",
3441115,
"mkh-ban",
"Latn",
}
m["cub"] = {
"Cubeo",
3006705,
"sai-tuc",
"Latn",
}
m["cuc"] = {
"Usila Chinantec",
7901979,
"omq-chi",
"Latn",
}
m["cug"] = {
"Cung",
35194,
"nic-bbe",
"Latn",
}
m["cuh"] = {
"Chuka",
12952344,
"bnt-kka",
"Latn",
}
m["cui"] = {
"Cuiba",
2980421,
"sai-guh",
"Latn",
}
m["cuj"] = {
"Mashco Piro",
3446596,
"awd",
"Latn",
}
m["cuk"] = {
"Kuna",
12953659,
"cba",
"Latn",
}
m["cul"] = {
"Culina",
2475442,
"auf",
"Latn",
}
m["cuo"] = {
"Cumanagoto",
5193784,
"sai-cpc",
"Latn",
}
m["cup"] = {
"Cupeño",
143130,
"azc-cup",
"Latn",
}
m["cuq"] = {
"Cun",
2475478,
"qfa-lic",
"Latn",
}
m["cur"] = {
"Chhulung",
5116126,
"sit-kie",
"Deva",
}
m["cut"] = {
"Teutila Cuicatec",
12953453,
"omq-cui",
"Latn",
}
m["cuu"] = {
"Tai Ya",
3441122,
"qfa-tak",
"Latn",
}
m["cuv"] = {
"Cuvok",
3515056,
"cdc-cbm",
"Latn",
}
m["cuw"] = {
"Chukwa",
12629033,
"sit-kic",
}
m["cux"] = {
"Tepeuxila Cuicatec",
20527242,
"omq-cui",
"Latn",
}
m["cuy"] = {
"Cuitlatec",
2030998,
"qfa-iso",
"Latn",
}
m["cvg"] = {
"Chug",
47683644,
"sit-khc",
"Tibt, Latn",
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
-- (NOTE: formerly not present, probably an accidental omission)
}
m["cvn"] = {
"Valle Nacional Chinantec",
12953442,
"omq-chi",
"Latn",
}
m["cwa"] = {
"Kabwa",
6344537,
"bnt-lok",
"Latn",
}
m["cwb"] = {
"Maindo",
11002891,
"bnt-mak",
"Latn",
ancestors = "chw",
}
m["cwd"] = {
"Woods Cree",
56305,
"alg",
"Latn, Cans",
ancestors = "cr",
}
m["cwe"] = {
"Kwere",
779632,
"bnt-ruv",
"Latn",
}
m["cwg"] = {
"Chewong",
646718,
"mkh-asl",
"Latn",
}
m["cwt"] = {
"Kuwaataay",
35699,
"alv-jol",
"Latn",
}
m["cya"] = {
"Nopala Chatino",
15616302,
"omq-cha",
"Latn",
}
m["cyb"] = {
"Cayubaba",
3183382,
"qfa-iso",
"Latn",
}
m["cyo"] = {
"Cuyunon",
33153,
"phi",
"Latn",
}
m["czh"] = {
"Huizhou",
56546,
"zhx",
"Hants", -- ?
ancestors = "ltc",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["czk"] = {
"Knaanic",
56384,
"zlw",
"Hebr",
ancestors = "zlw-ocs",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["czn"] = {
"Zenzontepec Chatino",
603106,
"omq-cha",
"Latn",
}
m["czo"] = {
"Central Min",
56435,
"zhx-inm",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["czt"] = {
"Zotung Chin",
8074599,
"tbq-kuk",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
d5yi2ti6opiiswbqizlm74tgk823ivk
Mòideal:languages/data/3/d
828
16797
86324
2026-07-22T20:54:40Z
Altronic
4137
Copy from English Wiktionary
86324
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["daa"] = {
"Dangaléat",
942591,
"cdc-est",
"Latn",
}
m["dac"] = {
"Dambi",
12629491,
"poz-ocw",
"Latn",
}
m["dad"] = {
"Marik",
6763404,
"poz-ocw",
"Latn",
}
m["dae"] = {
"Duupa",
35263,
"alv-dur",
"Latn",
}
m["dag"] = {
"Dagbani",
32238,
"nic-dag",
"Latn",
}
m["dah"] = {
"Gwahatike",
5623246,
"ngf-war",
"Latn",
}
m["dai"] = {
"Day",
35163,
"alv-mbd",
"Latn",
}
m["daj"] = {
"Dar Fur Daju",
56370,
"sdv-daj",
"Latn",
}
m["dak"] = {
"Dakota",
530384,
"sio-dkt",
"Latn",
}
m["dal"] = {
"Dahalo",
35143,
"cus",
"Latn",
}
m["dam"] = {
"Damakawa",
1158134,
"nic-knn",
"Latn",
}
m["dao"] = {
"Daai Chin",
860029,
"tbq-kuk",
"Latn",
}
m["daq"] = {
"Dandami Maria",
12952805,
"dra-mdy",
"Deva",
}
m["dar"] = {
"Dargwa",
32332,
"cau-drg",
"Cyrl, Latn, Arab",
translit = {Cyrl = "dar-translit"},
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {
"къкъ", "хьхь", -- 4 chars
"гъ", "гь", "гӏ", "ё", "къ", "кь", "кӏ", "пп", "пӏ", "сс", "тт", "тӏ", "хх", "хъ", "хь", "хӏ", "цц", "цӏ", "чч", "чӏ" -- 2 chars
},
to = {
"к" .. p[2], "х" .. p[4],
"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[3], "к" .. p[4], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[1], "т" .. p[2], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[5], "ц" .. p[1], "ц" .. p[2], "ч" .. p[1], "ч" .. p[2]
}
},
},
}
m["das"] = {
"Daho-Doo",
3915369,
"kro-wee",
"Latn",
}
m["dau"] = {
"Dar Sila Daju",
7514020,
"sdv-daj",
"Latn",
}
m["dav"] = {
"Taita",
2387274,
"bnt-cht",
"Latn",
}
m["daw"] = {
"Davawenyo",
5228174,
"phi",
"Latn",
}
m["dax"] = {
"Dayi",
10467281,
"aus-yol",
"Latn",
}
m["daz"] = {
"Dao",
5221513,
"ngf-pan",
"Latn",
}
m["dba"] = {
"Bangime",
1982696,
"qfa-iso", -- southern Mali
"Latn",
}
m["dbb"] = {
"Deno",
56275,
"cdc-wst",
"Latn",
}
m["dbd"] = {
"Dadiya",
3914436,
"alv-wjk",
"Latn",
}
m["dbe"] = {
"Dabe",
5207451,
"paa-tor",
"Latn",
}
m["dbf"] = {
"Edopi",
12953516,
"paa-lpl",
"Latn",
}
m["dbg"] = {
"Dogul Dom",
3912880,
"nic-npd",
"Latn",
}
m["dbi"] = {
"Doka",
3913293,
"nic-plc",
"Latn",
}
m["dbj"] = {
"Ida'an",
3041552,
"poz-san",
"Latn",
}
m["dbl"] = {
"Dyirbal",
35465,
"aus-dyb",
"Latn",
}
m["dbm"] = {
"Duguri",
7194057,
"nic-jrw",
"Latn",
}
m["dbn"] = {
"Duriankere",
5316627,
"ngf-sbh",
"Latn",
}
m["dbo"] = {
"Dulbu",
5313310,
"nic-jrn",
"Latn",
}
m["dbp"] = {
"Duwai",
56301,
"cdc-wst",
"Latn",
}
m["dbq"] = {
"Daba",
3913342,
"cdc-cbm",
"Latn",
}
m["dbr"] = {
"Dabarre",
3447286,
"cus-som",
"Latn",
}
m["dbt"] = {
"Ben Tey",
4886561,
"nic-nwa",
"Latn",
}
m["dbu"] = {
"Bondum Dom Dogon",
3912758,
"nic-npd",
"Latn",
}
m["dbv"] = {
"Dungu",
5315230,
"nic-kau",
"Latn",
}
m["dbw"] = {
"Bankan Tey Dogon",
4856243,
"nic-nwa",
"Latn",
}
m["dby"] = {
"Dibiyaso",
5272268,
"qfa-dis", -- Papuan; isolate per Glottolog, unclassified per Pawley and Hammarström (2018), sometimes classified with Bosavi languages
"Latn",
}
m["dcc"] = {
"Deccani",
669431,
"inc-hnd",
"ur-Arab",
ancestors = "ur",
}
m["dcr"] = {
"Negerhollands",
1815830,
"crp",
"Latn",
ancestors = "nl",
}
m["dda"] = {
"Dadi Dadi",
50207890,
"aus-pam",
"Latn",
}
m["ddd"] = {
"Dongotono",
56676,
"sdv-lma",
"Latn",
}
m["dde"] = {
"Doondo",
11003401,
"bnt-kng",
"Latn",
}
m["ddg"] = {
"Fataluku",
35353,
"paa-eti",
"Latn",
}
m["ddi"] = {
"Diodio",
3028668,
"poz-ocw",
"Latn",
}
m["ddj"] = {
"Jaru",
3162806,
"aus-pam",
"Latn",
}
m["ddn"] = {
"Dendi",
35164,
"son",
"Latn",
}
m["ddo"] = {
"Tsez",
34033,
"cau-wts",
"Cyrl",
translit = "ddo-translit",
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["ddr"] = {
"Dhudhuroa",
5269842,
"aus-pam",
"Latn",
}
m["dds"] = {
"Donno So Dogon",
1234776,
"nic-dge",
"Latn",
}
m["ddw"] = {
"Dawera-Daweloor",
5242304,
"poz-tim",
"Latn",
}
m["dec"] = {
"Dagik",
35125,
"alv-tal",
"Latn",
}
m["ded"] = {
"Dedua",
5249850,
"ngf-huo",
"Latn",
}
m["dee"] = {
"Dewoin",
3914892,
"kro-wkr",
"Latn",
}
m["def"] = {
"Dezfuli",
4115412,
"ira-swi",
"Arab",
}
m["deg"] = {
"Degema",
35182,
"alv-dlt",
"Latn",
}
m["deh"] = {
"Dehwari",
5704314,
"ira-swi",
"fa-Arab",
ancestors = "fa",
}
m["dei"] = {
"Demisa",
56380,
"paa-egb",
"Latn",
}
-- "dek" is no longer an ISO code; spurious
m["dem"] = {
"Dem",
5254989,
"qfa-dis", -- Papuan; isolate in Glottolog; unclassified in Palmer (2018); grouped with Amung by Usher, ultimately in TNG
"Latn",
}
m["dep"] = {
"Pidgin Delaware",
1183938,
"crp",
"Latn",
ancestors = "unm",
}
-- deq is not included, see [[WT:LT]]
m["der"] = {
"Deori",
56478,
"tbq-bdg",
"Beng, Latn",
}
m["des"] = {
"Desano",
962392,
"sai-tuc",
"Latn",
}
m["dev"] = {
"Domung",
5291378,
"ngf-yup",
"Latn",
}
m["dez"] = {
"Dengese",
2909984,
"bnt-tet",
"Latn",
}
m["dga"] = {
"Southern Dagaare",
35159,
"nic-mre",
"Latn",
}
m["dgb"] = {
"Bunoge",
4985178,
"nic-dgw",
"Latn",
}
m["dgc"] = {
"Casiguran Dumagat Agta",
5313599,
"phi",
"Latn",
}
m["dgd"] = {
"Dagaari Dioula",
11153465,
"nic-mre",
"Latn",
}
m["dge"] = {
"Degenan",
5251770,
"ngf-war",
"Latn",
}
m["dgg"] = {
"Doga",
3033726,
"poz-ocw",
"Latn",
}
m["dgh"] = {
"Dghwede",
56293,
"cdc-cbm",
"Latn",
}
m["dgi"] = {
"Northern Dagara",
11004218,
"nic-mre",
"Latn",
}
m["dgk"] = {
"Dagba",
12952357,
"csu-sar",
"Latn",
}
m["dgn"] = {
"Dagoman",
10465931,
"aus-yng",
"Latn",
}
m["dgo"] = {
"Hindi Dogri",
nil,
"him",
"Deva, Arab, Takr",
ancestors = "doi",
}
m["dgr"] = {
"Dogrib",
20979,
"ath-nor",
"Latn",
}
m["dgs"] = {
"Dogoso",
35343,
"nic-gur",
}
m["dgt"] = {
"Ntra'ngith",
6983809,
"aus-pam",
"Latn",
}
-- dgu is not a language; see [[w:Dhekaru]]
m["dgw"] = {
"Daungwurrung",
5228050,
"aus-pam",
"Latn",
}
m["dgx"] = {
"Doghoro",
12952392,
"ngf-bin",
"Latn",
}
m["dgz"] = {
"Daga",
5208442,
"ngf-dag",
"Latn",
}
m["dhg"] = {
"Dhangu",
5268960,
"aus-yol",
"Latn",
}
m["dhd"] = {
"Dhundhari",
633359,
"raj",
"Deva",
translit = "hi-translit",
}
m["dhi"] = {
"Dhimal",
35229,
"sit-dhi",
"Deva",
}
m["dhl"] = {
"Dhalandji",
5268787,
"aus-psw",
"Latn",
}
m["dhm"] = {
"Zemba",
3502283,
"bnt-swb",
"Latn",
ancestors = "hz",
}
m["dhn"] = {
"Dhanki",
5268992,
"inc-bhi",
}
m["dho"] = {
"Dhodia",
5269658,
"inc-bhi",
"Deva",
}
m["dhr"] = {
"Tharrgari",
10470289,
"aus-psw",
"Latn",
}
m["dhs"] = {
"Dhaiso",
11001788,
"bnt-kka",
"Latn",
}
m["dhu"] = {
"Dhurga",
1285318,
"aus-yuk",
"Latn",
}
m["dhv"] = {
"Drehu",
3039319,
"poz-cln",
"Latn",
}
m["dhw"] = {
"Danuwar",
3522797,
"inc-bhi",
"Deva",
}
m["dhx"] = {
"Dhungaloo",
16960599,
"aus-pam",
"Latn",
}
m["dia"] = {
"Dia",
3446591,
"paa-wap",
"Latn",
}
m["dib"] = {
"South Central Dinka",
35154,
"sdv-dnu",
"Latn",
ancestors = "din",
}
m["dic"] = {
"Lakota Dida",
11001730,
"kro-did",
"Latn",
}
m["did"] = {
"Didinga",
56365,
"sdv",
"Latn",
}
m["dif"] = {
"Dieri",
25559563,
"aus-kar",
"Latn",
}
m["dig"] = {
"Digo",
3362072,
"bnt-mij",
"Latn",
}
-- "dih" is split into nai-ipa, nai-kum, nai-tip, see [[WT:LT]]
m["dii"] = {
"Dimbong",
35196,
"bnt-baf",
"Latn",
}
m["dij"] = {
"Dai",
5209056,
"poz-tim",
"Latn",
}
m["dik"] = {
"Southwestern Dinka",
36540,
"sdv-dnu",
"Latn",
ancestors = "din",
}
m["dil"] = {
"Dilling",
35152,
"nub-hil",
"Latn",
}
m["dim"] = {
"Dime",
35311,
"omv-aro",
}
m["din"] = {
"Dinka",
56466,
"sdv-dnu",
"Latn",
}
m["dio"] = {
"Dibo",
3914891,
"alv-ngb",
"Latn",
}
m["dip"] = {
"Northeastern Dinka",
36246,
"sdv-dnu",
"Latn",
ancestors = "din",
}
m["dir"] = {
"Dirim",
11130804,
"nic-dak",
"Latn",
}
m["dis"] = {
"Dimasa",
56664,
"tbq-bdg",
"Latn, Beng",
}
m["diu"] = {
"Gciriku",
3780954,
"bnt-kav",
"Latn",
}
m["diw"] = {
"Northwestern Dinka",
36249,
"sdv-dnu",
"Latn",
ancestors = "din",
}
m["dix"] = {
"Dixon Reef",
5284967,
"poz-vnc",
"Latn",
}
m["diy"] = {
"Diuwe",
5283765,
"ngf-asm",
"Latn",
}
m["diz"] = {
"Ding",
35202,
"bnt-bdz",
"Latn",
}
m["dja"] = {
"Djadjawurrung",
5285190,
"aus-pam",
"Latn",
}
m["djb"] = {
"Djinba",
5285351,
"aus-yol",
"Latn",
}
m["djc"] = {
"Dar Daju Daju",
5209890,
"sdv-daj",
"Latn",
}
m["djd"] = {
"Jaminjung",
6147825,
"aus-mir",
"Latn",
}
m["dje"] = {
"Zarma",
36990,
"son",
"Latn, Arab, Brai",
}
m["djf"] = {
"Djangun",
10474818,
"aus-pmn",
"Latn",
}
m["dji"] = {
"Djinang",
5285350,
"aus-yol",
"Latn",
}
m["djj"] = {
"Ndjébbana",
5285274,
"aus-arn",
"Latn",
}
m["djk"] = {
"Aukan",
2659044,
"crp",
"Latn, Afak",
ancestors = "en",
}
m["djl"] = {
"Djiwarli",
2669569,
"aus-psw",
"Latn",
}
m["djm"] = {
"Jamsay",
3913290,
"nic-pld",
"Latn",
}
m["djn"] = {
"Djauan",
13553748,
"aus-gun",
"Latn",
}
m["djo"] = {
"Jangkang",
12952388,
"day",
}
m["djr"] = {
"Djambarrpuyngu",
3915679,
"aus-yol",
"Latn",
}
m["dju"] = {
"Kapriman",
6367199,
"paa-sep",
"Latn",
}
m["djw"] = {
"Djawi",
3913844,
"aus-nyu",
"Latn",
ancestors = "bcj",
}
m["dka"] = {
"Dakpa",
3695189,
"sit-ebo",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["dkk"] = {
"Dakka",
5209962,
"poz-ssw",
"Latn",
}
m["dkr"] = {
"Kuijau",
13580777,
"poz-bnn",
"Latn",
}
m["dks"] = {
"Southeastern Dinka",
36538,
"sdv-dnu",
"Latn",
ancestors = "din",
}
m["dkx"] = {
"Mazagway",
6798209,
"cdc-cbm",
"Latn",
}
m["dlg"] = {
"Dolgan",
32878,
"trk-nsb",
"Cyrl",
sort_key = {
from = {"ё", "һ", "ӈ", "ө", "ү"},
to = {"е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]}
},
}
m["dlk"] = {
"Dahalik",
32260,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["dlm"] = {
"Dalmatian",
35527,
"roa-dal",
"Latn",
}
m["dln"] = {
"Darlong",
5224029,
"tbq-kuk",
"Latn",
}
m["dma"] = {
"Duma",
35319,
"bnt-nze",
"Latn",
}
m["dmb"] = {
"Mombo Dogon",
6897074,
"nic-dgw",
"Latn",
}
m["dmc"] = {
"Gavak",
5277406,
"ngf-nad",
"Latn",
}
m["dmd"] = {
"Madhi Madhi",
6727353,
"aus-pam",
"Latn",
}
m["dme"] = {
"Dugwor",
56313,
"cdc-cbm",
"Latn",
}
m["dmf"] = {
"Medefaidrin",
1519764,
"art",
"Medf",
type = "appendix-constructed",
}
m["dmg"] = {
"Upper Kinabatangan",
16109975,
"poz-san",
"Latn",
}
m["dmk"] = {
"Domaaki",
32900,
"inc-wes",
"Arab",
}
m["dml"] = {
"Dameli",
32288,
"inc-kun",
}
m["dmm"] = {
"Dama (Nigeria)",
5211865,
"alv-mbm",
"Latn",
}
m["dmo"] = {
"Kemezung",
35562,
"nic-bbe",
"Latn",
}
m["dmr"] = {
"East Damar",
5328200,
"poz-cet",
"Latn",
}
m["dms"] = {
"Dampelas",
5212928,
"poz-tot",
"Latn",
}
m["dmu"] = {
"Dubu",
7692059,
"paa-wpw",
"Latn",
}
m["dmv"] = {
"Dumpas",
12953512,
"poz-san",
"Latn",
}
m["dmw"] = {
"Mudburra",
6931573,
"aus-pam",
"Latn",
}
m["dmx"] = {
"Dema",
3553423,
"bnt-sho",
"Latn",
}
m["dmy"] = {
"Demta",
14466283,
"paa-sen",
"Latn",
}
m["dna"] = {
"Upper Grand Valley Dani",
12952361,
"ngf-gvd",
"Latn",
}
m["dnd"] = {
"Daonda",
5221528,
"paa-war",
"Latn",
}
m["dne"] = {
"Ndendeule",
6983725,
"bnt-mbi",
"Latn",
}
m["dng"] = {
"Dungan",
33050,
"zhx-man",
"Cyrl, Latn, Hants",
generate_forms = "zh-generateforms",
translit = {Cyrl = "dng-translit"},
sort_key = {
Cyrl = {
from = {"ё", "ә", "җ", "ң", "ў", "ү"},
to = {"е" .. p[1], "е" .. p[2], "ж" .. p[1], "н" .. p[1], "у" .. p[1], "у" .. p[2]}
},
Hani = "Hani-sortkey",
},
}
m["dni"] = {
"Lower Grand Valley Dani",
12635807,
"ngf-gvd",
"Latn",
}
m["dnj"] = {
"Dan",
1158971,
"dmn-mda",
"Latn",
}
m["dnk"] = {
"Dengka",
5256954,
"poz-tim",
"Latn",
}
m["dnn"] = {
"Dzuun",
10973260,
"dmn-smg",
"Latn",
}
m["dno"] = {
"Ndrulo",
60785094,
"csu-lnd",
}
m["dnr"] = {
"Danaru",
5214932,
"ngf-pek",
"Latn",
}
m["dnt"] = {
"Mid Grand Valley Dani",
12952359,
"ngf-gvd",
"Latn",
}
m["dnu"] = {
"Danau",
5013745,
"mkh-pal",
"Mymr",
}
m["dnv"] = {
"Danu",
5221251,
"tbq-brm",
"Mymr",
ancestors = "obr",
}
m["dnw"] = {
"Western Dani",
7987774,
"ngf-cda",
"Latn",
}
m["dny"] = {
"Dení",
56562,
"auf",
"Latn",
}
m["doa"] = {
"Dom",
5289770,
"ngf-sim",
"Latn",
}
m["dob"] = {
"Dobu",
952133,
"poz-ocw",
"Latn",
}
m["doc"] = {
"Northern Kam",
17195499,
"qfa-tak",
"Latn",
}
m["doe"] = {
"Doe",
5288055,
"bnt-ruv",
"Latn",
}
m["dof"] = {
"Domu",
5291375,
"paa-mal",
"Latn",
}
m["doh"] = {
"Dong",
3438405,
"nic-dak",
"Latn",
}
m["doi"] = {
"Dogri",
32730,
"him",
"Deva, Takr, fa-Arab, Dogr",
translit = {
Deva = "hi-translit",
Dogr = "Dogr-translit",
},
}
m["dok"] = {
"Dondo",
5295571,
"poz-tot",
"Latn",
}
m["dol"] = {
"Doso",
4167202,
"paa-dtu",
"Latn",
}
m["don"] = {
"Doura",
7829037,
"poz-ocw",
"Latn",
}
m["doo"] = {
"Dongo",
35303,
"nic-mbc",
"Latn",
}
m["dop"] = {
"Lukpa",
3258739,
"nic-gne",
"Latn",
}
m["doq"] = {
"Dominican Sign Language",
5290820,
"sgn",
"Latn", -- when documented
}
m["dor"] = {
"Dori'o",
3037084,
"poz-sls",
"Latn",
}
m["dos"] = {
"Dogosé",
3913314,
"nic-gur",
"Latn",
}
m["dot"] = {
"Dass",
3441293,
"cdc-wst",
"Latn",
}
m["dov"] = {
"Toka-Leya",
11001779,
"bnt-bot",
"Latn",
ancestors = "toi",
}
m["dow"] = {
"Doyayo",
35299,
"alv-dur",
"Latn",
}
m["dox"] = {
"Bussa",
35123,
"cus-eas",
"Latn",
}
m["doy"] = {
"Dompo",
35270,
"alv-gng",
"Latn",
}
m["doz"] = {
"Dorze",
56336,
"omv-nom",
"Latn",
}
m["dpp"] = {
"Papar",
7132487,
"poz-san",
"Latn",
}
m["drb"] = {
"Dair",
12952360,
"nub-hil",
"Latn",
}
m["drc"] = {
"Minderico",
6863806,
"roa-gap",
"Latn",
ancestors = "pt",
}
m["drd"] = {
"Darmiya",
5224058,
"sit-alm",
}
m["drg"] = {
"Rungus",
6897407,
"poz-san",
"Latn",
}
m["dri"] = {
"Lela",
3914004,
"nic-knn",
"Latn",
}
m["drl"] = {
"Baagandji",
5223941,
"aus-pam",
"Latn",
}
m["drn"] = {
"West Damar",
3450459,
"poz-tim",
"Latn",
}
m["dro"] = {
"Daro-Matu Melanau",
5224156,
"poz-bnn",
"Latn",
}
m["drq"] = {
"Dura",
3449842,
"sit-gma",
"Deva",
}
m["drs"] = {
"Gedeo",
56622,
"cus-hec",
"Ethi",
}
m["dru"] = {
"Rukai",
49232,
"map",
"Latn",
ancestors = "dru-pro",
}
m["dry"] = {
"Darai",
46995026,
"inc-bhi",
"Deva",
}
m["dsb"] = {
"Lower Sorbian",
13286,
"wen",
"Latn",
sort_key = s["wen-sortkey"],
standard_chars = "AaBbCcČčĆćDdEeĚěFfGgHhIiJjKkŁłLlMmNnŃńOoÓóPpRrŔŕSsŠšŚśTtUuWwYyZzŽžŹź" .. c.punc,
}
m["dse"] = {
"Dutch Sign Language",
2201099,
"sgn",
"Latn", -- when documented
}
m["dsh"] = {
"Daasanach",
56637,
"cus-eas",
"Latn",
}
m["dsi"] = {
"Disa",
3914455,
"csu-bgr",
"Latn",
}
m["dsl"] = {
"Danish Sign Language",
2605298,
"sgn",
"Latn", -- when documented
}
m["dsn"] = {
"Dusner",
5316948,
"poz-hce",
"Latn",
}
m["dso"] = {
"Desiya",
12629755,
"inc-eas",
"Orya",
ancestors = "or",
}
m["dsq"] = {
"Tadaksahak",
36568,
"son",
"Arab, Latn",
}
m["dta"] = {
"Daur",
32430,
"xgn",
"Latn, Hani, Cyrl, Mong",
ancestors = "xng",
-- Mong translit, display_text and strip_diacritics in [[Module:scripts/data]]
sort_key = {Hani = "Hani-sortkey"},
}
m["dtb"] = {
"Labuk-Kinabatangan Kadazan",
5330240,
"poz-san",
"Latn",
}
m["dtd"] = {
"Ditidaht",
13728042,
"wak",
"Latn",
}
m["dth"] = { -- contrast 'rrt'
"Adithinngithigh",
4683034,
"aus-pmn",
"Latn",
}
m["dti"] = {
"Ana Tinga Dogon",
4750346,
"qfa-dgn",
"Latn",
}
m["dtk"] = {
"Tene Kan Dogon",
11018863,
"nic-pld",
"Latn",
}
m["dtm"] = {
"Tomo Kan Dogon",
11137719,
"nic-pld",
"Latn",
}
m["dto"] = {
"Tommo So",
47012992,
"nic-dge",
"Latn",
}
m["dtp"] = {
"Central Dusun",
5317225,
"poz-san",
"Latn",
}
m["dtr"] = {
"Lotud",
6685078,
"poz-san",
"Latn",
}
m["dts"] = {
"Toro So Dogon",
11003311,
"nic-dge",
"Latn",
}
m["dtt"] = {
"Toro Tegu Dogon",
3913924,
"nic-pld",
"Latn",
}
m["dtu"] = {
"Tebul Ure Dogon",
7692089,
"qfa-dgn",
"Latn",
}
m["dty"] = {
"Doteli",
18415595,
"inc-pah",
"Deva",
translit = "ne-translit",
}
m["dua"] = {
"Duala",
33013,
"bnt-saw",
"Latn",
}
m["dub"] = {
"Dubli",
5310792,
"inc-bhi",
}
m["duc"] = {
"Duna",
5314039,
"qfa-dis", -- Papuan; isolate in Glottolog; tentatively grouped with Bogaya into a Duna-Pogaya [sic] family,
-- ultimately in TNG
"Latn",
}
m["due"] = {
"Umiray Dumaget Agta",
7881585,
"phi",
"Latn",
}
m["duf"] = {
"Dumbea",
6983819,
"poz-cln",
"Latn",
}
m["dug"] = {
"Chiduruma",
35614,
"bnt-mij",
"Latn",
}
m["duh"] = {
"Dungra Bhil",
12953513,
"inc-bhi",
"Deva, Gujr",
}
m["dui"] = {
"Dumun",
5314004,
"ngf-yag",
"Latn",
}
m["duk"] = {
"Uyajitaya",
7904085,
"ngf-nur",
"Latn",
}
m["dul"] = {
"Alabat Island Agta",
3399709,
"phi",
"Latn",
}
m["dum"] = {
"Middle Dutch",
178806,
"gmw-frk",
"Latn",
ancestors = "odt",
strip_diacritics = {remove_diacritics = c.circ .. c.macron .. c.diaer},
}
m["dun"] = {
"Dusun Deyah",
2784033,
"poz-bre",
"Latn",
}
m["duo"] = {
"Dupaningan Agta",
5315912,
"phi",
"Latn",
}
m["dup"] = {
"Duano",
3040468,
"poz-mly",
"Latn",
}
m["duq"] = {
"Dusun Malang",
3041711,
"poz-bre",
"Latn",
}
m["dur"] = {
"Dii",
35208,
"alv-dur",
"Latn",
}
m["dus"] = {
"Dumi",
56315,
"sit-kiw",
"Deva",
}
m["duu"] = {
"Drung",
56406,
"sit-nng",
"Latn",
}
m["duv"] = {
"Duvle",
56364,
"paa-lpl",
"Latn",
}
m["duw"] = {
"Dusun Witu",
2381310,
"poz-bre",
"Latn",
}
m["dux"] = {
"Duun",
3914880,
"dmn-smg",
"Latn",
}
m["duy"] = {
"Dicamay Agta",
5272321,
"phi",
"Latn",
}
m["duz"] = {
"Duli",
5313405,
"alv-ada",
"Latn",
}
m["dva"] = {
"Duau",
5310448,
"poz-ocw",
"Latn",
}
m["dwa"] = {
"Diri",
56286,
"cdc-wst",
"Latn",
}
m["dwr"] = {
"Dawro",
12629647,
"omv-nom",
"Ethi, Latn",
}
m["dwu"] = {
"Dhuwal",
3120791,
"aus-yol",
"Latn",
}
m["dww"] = {
"Dawawa",
5242286,
"poz-ocw",
"Latn",
}
m["dwy"] = {
"Dhuwaya",
63348560,
"aus-yol",
"Latn",
}
m["dwz"] = {
"Dewas Rai",
62663667,
"inc-bhi",
}
m["dya"] = {
"Dyan",
35340,
"nic-gur",
"Latn",
}
m["dyb"] = {
"Dyaberdyaber",
5285185,
"aus-nyu",
"Latn",
}
m["dyd"] = {
"Dyugun",
3913785,
"aus-nyu",
"Latn",
}
-- dyg (Villa Viciosa Agta) deleted as extinct and unattested; per Wikipedia: "Villa Viciosa Atta, supposed once spoken
-- in Villaviciosa, Abra, is presumed to be related, but is unattested."
m["dyi"] = {
"Djimini",
35336,
"alv-tdj",
"Latn",
}
m["dym"] = {
"Yanda Dogon",
8048316,
"qfa-dgn",
"Latn",
}
m["dyn"] = {
"Dyangadi",
3913820,
"aus-cww",
"Latn",
}
m["dyo"] = {
"Jola-Fonyi",
3507832,
"alv-jol",
"Latn",
}
m["dyu"] = {
"Dyula",
32706,
"dmn-man",
"Latn",
}
m["dyy"] = {
"Dyaabugay",
2591320,
"aus-yid",
"Latn",
}
m["dza"] = {
"Tunzu",
3915845,
"nic-jer",
"Latn",
}
m["dzg"] = {
"Dazaga",
35244,
"ssa-sah",
"Latn",
}
m["dzl"] = {
"Dzala",
56607,
"sit-ebo",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["dzn"] = {
"Dzando",
5319622,
"bnt-bun",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
n65t4o1m4kbkc28bw1wn38wd8cty7ir
Mòideal:languages/data/3/f
828
16798
86325
2026-07-22T20:56:01Z
Altronic
4137
Copy from English Wiktionary
86325
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["faa"] = {
"Fasu",
3446687,
"qfa-dis", -- Papuan; isolate or in the proposed Kutubuan family
"Latn",
}
m["fab"] = {
"Annobonese",
34992,
"crp",
"Latn",
ancestors = "pt",
}
m["fad"] = {
"Wagi",
7959569,
"ngf-han",
"Latn",
}
m["faf"] = {
"Fagani",
3063759,
"poz-sls",
"Latn",
}
m["fag"] = {
"Finongan",
3450761,
"ngf-era",
"Latn",
}
m["fah"] = {
"Baissa Fali",
3446632,
"nic-bco",
"Latn",
}
m["fai"] = {
"Faiwol",
3501773,
"ngf-mok",
"Latn",
}
m["faj"] = {
"Kursav",
976953,
"ngf-eso",
"Latn",
}
m["fak"] = {
"Fang (Beboid)",
5433811,
"nic-beb",
"Latn",
}
m["fal"] = {
"South Fali",
15637351,
"alv-fli",
"Latn",
}
m["fam"] = {
"Fam",
35290,
"nic-mmb",
"Latn",
}
m["fan"] = {
"Fang (Bantu)",
33484,
"bnt-btb",
"Latn",
}
m["fap"] = {
"Palor",
36318,
"alv-cng",
"Latn",
}
m["far"] = {
"Fataleka",
3067168,
"poz-sls",
"Latn",
}
-- "fat" is treated as "ak", see [[WT:LT]]
m["fau"] = {
"Fayu",
5439113,
"paa-wlp",
"Latn",
}
m["fax"] = {
"Fala",
300402,
"roa-gap",
"Latn",
}
m["fay"] = {
"Southwestern Fars",
5228140,
"ira-swi",
"Arab",
}
m["faz"] = {
"Northwestern Fars",
7060307,
"ira-swi",
}
m["fbl"] = {
"West Miraya Bikol",
18603801,
"phi",
"Latn",
}
m["fcs"] = {
"Quebec Sign Language",
13193,
"sgn",
"Latn", -- when documented
}
m["fer"] = {
"Feroge",
35287,
"nic-ser",
"Latn",
}
m["ffi"] = {
"Foia Foia",
8564176,
"paa-wig",
"Latn",
}
-- "ffm" is treated as "ff", see [[WT:LT]]
m["fgr"] = {
"Fongoro",
3437645,
"csu",
"Latn",
}
m["fia"] = {
"Nobiin",
36503,
"nub",
"Latn, Arab, Copt",
ancestors = "onw",
translit = {
Copt = "Copt-translit",
},
sort_key = {
Copt = "Copt-sortkey",
},
}
m["fie"] = {
"Fyer",
56273,
"cdc-wst",
"Latn",
}
m["fif"] = {
"Faifi",
85760309,
"sem-cen", -- conservatively putting undifferentiated sem-cen, there's debate over if it's OSA or Arabic
"Arab", -- or IPA/Latn; mostly it is unwritten
-- ancestors = "sem-srb", if one accepts the view that like Razihi it is sem-osa
}
-- "fil" is treated as "tl", see [[WT:LT]]
m["fip"] = {
"Fipa",
667747,
"bnt-mwi",
"Latn",
}
m["fir"] = {
"Firan",
3915847,
"nic-plc",
"Latn",
}
m["fit"] = {
"Meänkieli",
13357,
"urj-fin",
"Latn",
ancestors = "fi",
}
m["fiw"] = {
"Fiwaga",
5456292,
"ngf-eku",
"Latn",
}
m["fkk"] = {
"Kirya-Konzel",
6416310,
"cdc-cbm",
"Latn",
}
m["fkv"] = {
"Kven",
165795,
"urj-fin",
"Latn",
ancestors = "fi",
}
m["fla"] = {
"Montana Salish",
3111983,
"sal",
"Latn",
}
m["flh"] = {
"Foau",
5463819,
"paa-elp",
"Latn",
}
m["fli"] = {
"Fali",
56244,
"cdc-cbm",
"Latn",
}
m["fll"] = {
"North Fali",
12952419,
"alv-fli",
"Latn",
}
m["fln"] = {
"Flinders Island",
3915702,
"aus-pmn",
"Latn",
}
m["flr"] = {
"Fuliiru",
7166821,
"bnt-shh",
"Latn",
}
m["fly"] = {
"Tsotsitaal",
12643960,
"crp",
"Latn",
ancestors = "af",
}
m["fmp"] = {
"Fe'fe'",
35276,
"bai",
"Latn",
}
m["fmu"] = {
"Far Western Muria",
42589412,
"dra-mur",
"Deva",
}
m["fng"] = {
"Fanagalo",
35727,
"crp",
"Latn",
ancestors = "zu",
}
m["fni"] = {
"Fania",
317642,
"alv-bua",
"Latn",
}
m["fod"] = {
"Foodo",
5465566,
"alv-gng",
"Latn",
}
m["foi"] = {
"Foi",
5464146,
"ngf-eku",
"Latn",
}
m["fom"] = {
"Foma",
5464911,
"bnt-ske",
"Latn",
ancestors = "khy",
}
m["fon"] = {
"Fon",
33291,
"alv-gbe",
"Latn",
}
m["for"] = {
"Fore",
3077126,
"ngf-fgi",
"Latn",
}
m["fos"] = {
"Siraya",
716604,
"map",
"Latn",
}
m["fpe"] = {
"Pichinglis",
35288,
"crp",
"Latn",
ancestors = "en",
}
m["fqs"] = {
"Fas",
56320,
"paa-fas",
"Latn",
}
-- "frc" is treated as "fr" (or as etymology-only), see [[WT:LT]]
m["frd"] = {
"Fordata",
5468035,
"poz-cet",
"Latn",
}
m["frm"] = {
"Middle French",
1473289,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["fro"] = {
"Old French",
35222,
"roa-oil",
"Latn, Hebr",
sort_key = {
Latn = s["roa-oil-sortkey"],
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["frp"] = {
"Franco-Provençal",
15087,
"roa-grh",
"Latn",
ancestors = "frp-old",
sort_key = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.cedilla .. "'",
from = {"æ", "œ"},
to = {"ae", "oe"}
},
}
m["frq"] = {
"Forak",
5467173,
"ngf-war",
"Latn",
}
m["frr"] = {
"North Frisian",
28224,
"gmw-fri",
"Latn",
}
-- "frs" is not used, see [[WT:LT]]
m["frt"] = {
"Fortsenal",
2666835,
"poz-vnn",
"Latn",
}
m["fse"] = {
"Finnish Sign Language",
33225,
"sgn",
"Latn", -- when documented
}
m["fsl"] = {
"French Sign Language",
33302,
"sgn-fsl",
"Latn", -- when documented
}
m["fss"] = {
"Finnish-Swedish Sign Language",
5450448,
"sgn",
"Latn", -- when documented
}
-- "fub" is treated as "ff", see [[WT:LT]]
-- "fuc" is treated as "ff", see [[WT:LT]]
m["fud"] = {
"East Futuna",
35334,
"poz-pnp",
"Latn",
}
-- "fue" is treated as "ff", see [[WT:LT]]
-- "fuf" is treated as "ff", see [[WT:LT]]
-- "fuh" is treated as "ff", see [[WT:LT]]
-- "fui" is treated as "ff", see [[WT:LT]]
m["fuj"] = {
"Ko",
35693,
"alv-hei",
"Latn",
}
m["fum"] = {
"Fum",
11011870,
"nic-nka",
"Latn",
}
m["fun"] = {
"Fulniô",
774441,
"qfa-iso",
"Latn",
}
-- "fuq" is treated as "ff", see [[WT:LT]]
m["fur"] = {
"Friulian",
33441,
"roa-rhe",
ancestors = "fur-old",
"Latn",
}
m["fut"] = {
"Futuna-Aniwa",
3064409,
"poz-pnp",
"Latn",
}
m["fuu"] = {
"Furu",
3441160,
"csu-bkr",
"Latn",
}
-- "fuv" is treated as "ff", see [[WT:LT]]
m["fuy"] = {
"Fuyug",
3073472,
"qfa-dis", -- Papuan; isolate per Glottolog and Usher (2020), only tentatively retained in putative Goilalan family
-- within TNG by Ross (2005)
"Latn",
}
m["fvr"] = {
"Fur",
33364,
"ssa-fur",
"Latn",
}
m["fwa"] = {
"Fwâi",
3091331,
"poz-cln",
"Latn",
}
m["fwe"] = {
"Fwe",
5511159,
"bnt-bot",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
86w2rcjby61acjk04sf0woez7t69z0g
Mòideal:languages/data/3/g
828
16799
86326
2026-07-22T20:56:58Z
Altronic
4137
Copy from English Wiktionary
86326
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["gaa"] = {
"Ga",
33287,
"alv-gda",
"Latn",
}
m["gab"] = {
"Gabri",
3441237,
"cdc-est",
"Latn",
}
m["gac"] = {
"Mixed Great Andamanese",
56329630,
"qfa-adn",
"Latn",
}
m["gad"] = { -- not to be confused with gdk, gdg
"Gaddang",
3438830,
"phi",
"Latn",
}
m["gae"] = {
"Warekena",
1091095,
"awd-nwk",
"Latn",
}
m["gaf"] = {
"Gende",
3100425,
"ngf-gor",
"Latn",
}
m["gag"] = {
"Gagauz",
33457,
"trk-ogz",
"Latn, Cyrl",
ancestors = "trk-oat",
dotted_dotless_i = true,
sort_key = {
Latn = {
from = {
"i", -- Ensure "i" comes after "ı".
"ä", "ç", "ê", "ı", "ö", "ş", "ţ", "ü"
},
to = {
"i" .. p[1],
"a" .. p[1], "c" .. p[1], "e" .. p[1], "i", "o" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1]
}
},
},
}
m["gah"] = {
"Alekano",
3441595,
"ngf-gah",
"Latn",
}
m["gai"] = {
"Borei",
6799756,
"paa-ott",
"Latn",
}
m["gaj"] = {
"Gadsup",
5516467,
"ngf-gau",
"Latn",
}
m["gak"] = {
"Gamkonora",
5520226,
"paa-sah",
"Latn",
}
m["gal"] = {
"Galoli",
35322,
"poz-tim",
"Latn",
}
m["gam"] = {
"Kandawo",
6361369,
"ngf-jim",
"Latn",
}
m["gan"] = {
"Gan",
33475,
"zhx",
"Hants",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["gao"] = {
"Gants",
5521529,
"ngf-eso",
"Latn",
}
m["gap"] = {
"Gal",
5517742,
"ngf-han",
"Latn",
}
m["gaq"] = {
"Gata'",
3501920,
"mun",
"Orya",
}
m["gar"] = {
"Galeya",
5518509,
"poz-ocw",
"Latn",
}
m["gas"] = {
"Adiwasi Garasia",
12953522,
"inc-bhi",
"Deva, Gujr",
ancestors = "bhb",
}
m["gat"] = {
"Kenati",
4219330,
"ngf-kgo",
"Latn",
}
m["gau"] = {
"Kondekor",
12952433,
"dra-pgd",
"Telu",
}
m["gaw"] = {
"Nobonob",
11732205,
"ngf-han",
"Latn",
}
m["gay"] = {
"Gayo",
33286,
"poz-nws",
"Latn",
}
m["gbb"] = {
"Kaytetye",
6380709,
"aus-rnd",
"Latn",
}
m["gbd"] = {
"Karadjeri",
3913837,
"aus-pam",
"Latn",
}
m["gbe"] = {
"Niksek",
56375,
"paa-sep",
"Latn",
}
m["gbf"] = {
"Gaikundi",
5517032,
"paa-nnd",
"Latn",
}
m["gbg"] = {
"Gbanziri",
35306,
"nic-nkg",
"Latn",
}
m["gbh"] = {
"Defi Gbe",
12952446,
"alv-gbe",
"Latn",
}
m["gbi"] = {
"Galela",
3094570,
"paa-gto",
"Latn",
}
m["gbj"] = {
"Bodo Gadaba",
3347070,
"mun",
"Orya",
}
m["gbk"] = {
"Gaddi",
17455500,
"him",
"Deva, Takr",
translit = {Deva = "hi-translit"},
}
m["gbl"] = {
"Gamit",
2731717,
"inc-bhi",
"Deva, Gujr",
}
m["gbm"] = {
"Garhwali",
33459,
"inc-pah",
"Deva",
translit = "hi-translit",
}
m["gbn"] = {
"Mo'da",
12755683,
"csu-bbk",
"Latn",
}
m["gbo"] = {
"Northern Grebo",
11157042,
"grb",
"Latn",
}
m["gbp"] = {
"Gbaya-Bossangoa",
11011295,
"gba-wes",
"Latn",
}
m["gbq"] = {
"Gbaya-Bozoum",
4952879,
"gba-wes",
"Latn",
}
m["gbr"] = {
"Gbagyi",
11015105,
"alv-ngb",
"Latn",
}
m["gbs"] = {
"Gbesi Gbe",
12952448,
"alv-pph",
"Latn",
}
m["gbu"] = {
"Gagadu",
35677,
"aus-arn",
"Latn",
}
m["gbv"] = {
"Gbanu",
3914945,
"gba-eas",
"Latn",
}
m["gbw"] = {
"Gabi",
5515391,
"aus-pam",
"Latn",
}
m["gbx"] = {
"Eastern Xwla Gbe",
18379975,
"alv-pph",
"Latn",
}
m["gby"] = {
"Gbari",
3915451,
"alv-ngb",
"Latn",
}
m["gcc"] = {
"Mali",
6743338,
"paa-bai",
"Latn",
}
m["gcd"] = {
"Ganggalida",
3913765,
"aus-tnk",
"Latn",
}
m["gce"] = {
"Galice",
20711,
"ath-pco",
"Latn",
}
m["gcf"] = {
"Antillean Creole",
3006280,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["gcl"] = {
"Grenadian Creole English",
4252500,
"crp",
"Latn",
ancestors = "en",
}
m["gcn"] = {
"Gaina",
11732195,
"ngf-gko",
"Latn",
}
m["gcr"] = {
"Guianese Creole",
1363072,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
}
m["gct"] = {
"Colonia Tovar German",
1138351,
"gmw-hgm",
"Latn",
ancestors = "gsw",
}
m["gdb"] = {
"Ollari",
33906,
"dra-pgd",
"Orya, Telu",
translit = {
Telu = "te-translit"
},
}
m["gdc"] = {
"Gugu Badhun",
10510360,
"aus-pam",
"Latn",
}
m["gdd"] = {
"Gedaged",
35292,
"poz-ocw",
"Latn",
}
m["gde"] = {
"Gude",
3441230,
"cdc-cbm",
"Latn",
}
m["gdf"] = {
"Guduf-Gava",
3441350,
"cdc-cbm",
"Latn",
}
m["gdg"] = { -- not to be confused with gad, gdk
"Ga'dang",
5515189,
"phi",
"Latn",
}
m["gdh"] = {
"Gadjerawang",
3913817,
"aus-jar",
"Latn",
}
m["gdi"] = {
"Gundi",
11137851,
"nic-nkb",
"Latn",
}
m["gdj"] = {
"Kurtjar",
5619931,
"aus-pmn",
"Latn",
}
m["gdk"] = { -- not to be confused with gad, gdg
"Gadang",
56256,
"cdc-est",
"Latn",
}
m["gdl"] = {
"Dirasha",
56809,
"cus-eas",
"Ethi",
}
m["gdm"] = {
"Laal",
33436,
"qfa-dis", -- Chad; unclassified, isolate or grouped with Adamawa or Chadic languages
"Latn",
}
m["gdn"] = {
"Umanakaina",
7881084,
"ngf-dag",
"Latn",
}
m["gdo"] = {
"Godoberi",
56515,
"cau-and",
"Cyrl",
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["gdq"] = {
"Mehri",
13361,
"sem-sar",
"Arab, Latn",
}
m["gdr"] = {
"Wipi",
8026711,
"paa-etf",
"Latn",
}
m["gds"] = {
"Ghandruk Sign Language",
15971577,
"sgn",
}
m["gdt"] = {
"Kungardutyi",
6444517,
"aus-kar",
"Latn",
}
m["gdu"] = {
"Gudu",
3441172,
"cdc-cbm",
"Latn",
}
m["gdx"] = {
"Godwari",
3540922,
"raj",
"Deva",
}
m["gea"] = {
"Geruma",
3438789,
"cdc-wst",
"Latn",
}
m["geb"] = {
"Kire",
11129733,
"paa-rub",
"Latn",
}
m["gec"] = {
"Gboloo Grebo",
11019342,
"grb",
"Latn",
}
m["ged"] = {
"Gade",
3914459,
"alv-nup",
"Latn",
}
m["geg"] = {
"Gengle",
3438345,
"alv-mye",
"Latn",
ancestors = "kow",
}
m["geh"] = {
"Hutterisch",
33385,
"gmw-hgm",
"Latn",
ancestors = "bar",
}
m["gei"] = {
"Gebe",
3100032,
"poz-hce",
"Latn",
}
m["gej"] = {
"Gen",
33450,
"alv-gbe",
"Latn",
}
m["gek"] = {
"Gerka",
3441277,
"cdc-wst",
"Latn",
}
m["gel"] = {
"Fakkanci",
36627,
"nic-knn",
"Latn",
}
m["geq"] = {
"Geme",
3915851,
"znd",
"Latn",
}
m["ges"] = {
"Geser-Gorom",
5553579,
"poz-cma",
"Latn",
}
m["gev"] = {
"Viya",
7937974,
"bnt-tso",
"Latn",
}
m["gew"] = {
"Gera",
3438725,
"cdc-wst",
"Latn",
}
m["gex"] = {
"Garre",
56618,
"cus-som",
"Latn",
}
m["gey"] = {
"Enya",
5381452,
"bnt-mbe",
"Latn",
}
m["gez"] = {
"Ge'ez",
35667,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["gfk"] = {
"Patpatar",
3368846,
"poz-ocw",
"Latn",
}
m["gft"] = {
"Gafat",
56910,
"sem-eth",
"Ethi, Latn",
}
m["gga"] = {
"Gao",
3095228,
"poz-ocw",
"Latn",
}
m["ggb"] = {
"Gbii",
3914390,
"kro-wkr",
"Latn",
}
m["ggd"] = {
"Gugadj",
5615186,
"aus-pmn",
"Latn",
}
m["gge"] = {
"Guragone",
5619801,
"aus-arn",
"Latn",
}
m["ggg"] = {
"Gurgula",
5620032,
"raj",
"Arab",
}
m["ggk"] = {
"Kungarakany",
6444516,
"aus-arn",
"Latn",
}
m["ggl"] = {
"Ganglau",
5521140,
"ngf-yag",
"Latn",
}
m["ggt"] = {
"Gitua",
3107865,
"poz-ocw",
"Latn",
}
m["ggu"] = {
"Gban",
3913317,
"dmn-nbe",
"Latn",
}
m["ggw"] = {
"Gogodala",
3512161,
"ngf-gsu",
"Latn",
}
m["gha"] = {
"Ghadames",
56747,
"ber",
"Latn", -- and other scripts?
}
m["ghc"] = {
"Classical Gaelic",
5128278,
"cel-gae",
"Latn, Latg",
ancestors = "mga",
}
m["ghe"] = {
"Southern Ghale",
12952453,
"sit-tam",
"Deva",
}
m["ghh"] = {
"Northern Ghale",
22662104,
"sit-tam",
"Deva",
}
m["ghk"] = {
"Geko Karen",
5530317,
"kar",
}
m["ghl"] = {
"Ghulfan",
16885737,
"nub-hil",
"Latn", -- and others?
}
m["ghn"] = {
"Ghanongga",
3104772,
"poz-ocw",
"Latn",
}
m["gho"] = {
"Ghomara",
35315,
"ber",
"Tfng, Latn",
translit = {Tfng = "Tfng-translit"},
}
m["ghr"] = {
"Ghera",
22808992,
"inc-hiw",
}
m["ghs"] = {
"Guhu-Samane",
11732219,
"ngf-gbi",
"Latn",
}
m["ght"] = {
"Kutang Ghale",
6448337,
"sit-tam",
"Tibt",
override_translit = true,
-- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["gia"] = {
"Kitja",
1284877,
"aus-jar",
"Latn",
}
m["gib"] = {
"Gibanawa",
12953530,
"crp",
"Latn",
ancestors = "ha",
}
m["gid"] = {
"Gidar",
35265,
"cdc-cbm",
"Latn",
}
m["gie"] = {
"Guébie",
63140714,
"kro-did",
"Latn",
}
m["gig"] = {
"Goaria",
33269,
"raj",
"Arab",
}
m["gih"] = {
"Githabul",
48987680,
"aus-pam",
"Latn",
}
m["gii"] = {
"Girirra",
5564288,
"cus-som",
}
m["gil"] = {
"Gilbertese",
30898,
"poz-mic",
"Latn",
}
m["gim"] = {
"Gimi (Papuan)",
11732209,
"ngf-fgi",
"Latn",
}
m["gin"] = {
"Hinukh",
33283,
"cau-wts",
"Cyrl",
translit = "gin-translit",
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["gip"] = {
"Gimi (Austronesian)",
12952457,
"poz-ocw",
}
m["giq"] = {
"Green Gelao",
12953525,
"gio",
"Latn",
}
m["gir"] = {
"Red Gelao",
3100264,
"gio",
}
m["gis"] = {
"North Giziga",
3515084,
"cdc-cbm",
}
m["git"] = {
"Gitxsan",
3107862,
"nai-tsi",
"Latn",
}
m["giu"] = {
"Mulao",
11092831,
"gio",
}
m["giw"] = {
"White Gelao",
8843040,
"gio",
}
m["gix"] = {
"Gilima",
10977716,
"nic-nkm",
"Latn",
}
m["giy"] = {
"Giyug",
5565906,
}
m["giz"] = {
"South Giziga",
3502232,
"cdc-cbm",
}
m["gji"] = {
"Geji",
3914890,
"cdc-wst",
"Latn",
}
m["gjk"] = {
"Kachi Koli",
12953646,
"inc-wes",
}
m["gjm"] = {
"Gunditjmara",
6448731,
"aus-pam",
"Latn",
}
m["gjn"] = {
"Gonja",
35267,
"alv-gng",
"Latn",
}
m["gjr"] = {
"Gurindji Kriol",
5620091,
"qfa-mix",
"Latn",
ancestors = "gue, rop"
}
m["gju"] = {
"Gojri",
3241731,
"raj",
"ur-Arab, Deva, Takr",
strip_diacritics = {
["ur-Arab"] = {
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.smallv,
from = {"ڵ", "ݩ"},
to = {"ل", "ن"}
},
},
translit = {["ur-Arab"] = "ur-translit"},
}
m["gka"] = {
"Guya",
11732221,
"ngf-war",
"Latn",
}
m["gkd"] = {
"Magi",
55621742,
"ngf-ais",
"Latn",
}
m["gke"] = {
"Ndai",
6983667,
"alv-mbm",
}
m["gkn"] = {
"Gokana",
3075137,
"nic-ogo",
"Latn",
}
m["gko"] = {
"Kok-Nar",
6426526,
"aus-pmn",
"Latn",
}
m["gkp"] = {
"Guinea Kpelle",
11052867,
"dmn-msw",
"Latn, Kpel",
ancestors = "kpe",
}
m["glc"] = {
"Bon Gula",
289816,
"alv-bua",
}
m["gld"] = {
"Nanai",
13303,
"tuw-nan",
"Cyrl",
translit = "gld-translit",
strip_diacritics = {remove_diacritics = c.macron},
sort_key = {
from = {"ё", "ӈ"},
to = {"е" .. p[1], "н" .. p[1]}
},
}
m["glh"] = {
"Northwest Pashayi",
23713532,
"inc-pas",
"fa-Arab",
}
m["glj"] = {
"Kulaal",
33360,
"alv-bua",
}
m["glk"] = {
"Gilaki",
33657,
"ira-csp",
"fa-Arab",
}
m["glo"] = {
"Galambu",
2598797,
"cdc-wst",
"Latn",
}
m["glr"] = {
"Glaro-Twabo",
3915313,
"kro-wee",
}
m["glu"] = {
"Gula",
5617176,
"csu-bgr",
"Latn",
}
m["glw"] = {
"Glavda",
3441285,
"cdc-cbm",
"Latn",
}
m["gly"] = {
"Gule",
3120736,
"ssa-kom",
}
m["gma"] = {
"Gambera",
10502327,
"aus-wor",
"Latn",
}
m["gmb"] = {
"Gula'alaa",
3120733,
"poz-sls",
"Latn",
}
m["gmd"] = {
"Mághdì",
3914475,
"alv-bwj",
}
m["gmg"] = {
"Magiyi",
16926155,
"ngf-sog",
"Latn",
}
m["gmh"] = {
"Middle High German",
837985,
"gmw-hgm",
"Latn",
strip_diacritics = {
remove_diacritics = c.circ .. c.macron,
from = {"Ë", "ë", "[ƷȤ]", "[ʒȥ]"},
to = {"E", "e", "Z", "z"}
},
}
m["gml"] = {
"Middle Low German",
505674,
"gmw-lgm",
"Latn",
strip_diacritics = {remove_diacritics = c.circ .. c.macron .. c.diaer},
}
m["gmm"] = {
"Gbaya-Mbodomo",
6799713,
"gba-eas",
"Latn",
}
m["gmn"] = {
"Gimnime",
11016905,
"alv-dur",
"Latn",
}
m["gmr"] = {
"Mirning",
6873793,
"aus-pam",
"Latn",
}
m["gmu"] = {
"Gumalu",
5618027,
"ngf-gum",
"Latn",
}
m["gmv"] = {
"Gamo",
16116386,
"omv-nom",
"Latn, Ethi",
}
m["gmx"] = {
"Magoma",
16939552,
"bnt-bki",
}
m["gmy"] = {
"Mycenaean Greek",
668366,
"grk",
"Linb",
translit = "Linb-translit",
}
m["gmz"] = {
"Mgbo",
6826835,
"alv-igb",
ancestors = "izi",
}
m["gna"] = {
"Kaansa",
56802,
"nic-gur",
}
m["gnb"] = {
"Gangte",
12952442,
"tbq-kuk",
}
m["gnc"] = {
"Guanche",
35762,
"ber",
}
m["gnd"] = {
"Zulgo-Gemzek",
56800,
"cdc-cbm",
"Latn",
}
m["gne"] = {
"Ganang",
63163361,
"nic-plc",
ancestors = "izr",
}
m["gng"] = {
"Ngangam",
35888,
"nic-grm",
}
m["gnh"] = {
"Lere",
3915319,
"nic-jer",
}
m["gni"] = {
"Gooniyandi",
2669219,
"aus-bub",
"Latn",
}
m["gnj"] = {
"Ngen of Djonkro",
63170838,
"dmn-nbe",
"Latn",
}
m["gnk"] = {
"ǁGana",
1975199,
"khi-kal",
"Latn",
}
m["gnl"] = {
"Gangulu",
4916329,
"aus-pam",
"Latn",
}
m["gnm"] = {
"Ginuman",
11732210,
"ngf-dag",
"Latn",
}
m["gnn"] = {
"Gumatj",
10510745,
"aus-yol",
"Latn",
}
m["gnq"] = {
"Gana",
5520523,
"poz-san",
"Latn",
}
m["gnr"] = {
"Gureng Gureng",
5619998,
"aus-pam",
"Latn",
}
m["gnt"] = {
"Guntai",
12952475,
"paa-ton",
"Latn",
}
m["gnu"] = {
"Gnau",
3915810,
"paa-trr",
"Latn",
}
m["gnw"] = {
"Western Bolivian Guarani",
3775037,
"gn",
"Latn",
}
m["gnz"] = {
"Ganzi",
11137942,
"nic-nkb",
"Latn",
}
m["goa"] = {
"Guro",
35251,
"dmn-mda",
"Latn",
}
m["gob"] = {
"Playero",
3027923,
"sai-guh",
}
m["goc"] = {
"Gorakor",
12952463,
"poz-ocw",
"Latn",
}
m["god"] = {
"Godié",
3914412,
"kro-bet",
}
m["goe"] = {
"Gongduk",
2669221,
"sit",
}
m["gof"] = {
"Gofa",
12631584,
"omv-nom",
"Latn, Ethi",
}
m["gog"] = {
"Gogo",
3272630,
"bnt-ruv",
"Latn",
}
m["goh"] = {
"Old High German",
35218,
"gmw-hgm",
"Latn, Runr",
strip_diacritics = {
remove_diacritics = c.circ .. c.macron .. c.diaer,
from = {"[ƷȤ]", "[ʒȥ]"},
to = {"Z", "z"}
},
translit = {
Runr = "Runr-translit",
},
}
m["goi"] = {
"Gobasi",
5575414,
"ngf-est",
"Latn",
}
m["goj"] = {
"Gowlan",
12953532,
"inc-sou",
}
-- gok is a spurious language, see [[w:Spurious languages]]
m["gol"] = {
"Gola",
35482,
"alv",
"Latn, Vaii",
}
m["gon"] = {
"Gondi",
1775361,
"dra-gon",
"Telu, Gonm, Gong, Deva, Orya",
translit = {
Telu = "te-translit",
Gong = "gon-Gong-translit",
Gonm = "gon-Gonm-translit",
},
}
m["goo"] = {
"Gone Dau",
3110470,
"poz-pcc",
"Latn",
}
m["gop"] = {
"Yeretuar",
8052565,
"poz-hce",
"Latn",
}
m["goq"] = {
"Gorap",
3110816,
"crp",
"Latn",
ancestors = "ms",
}
m["gor"] = {
"Gorontalo",
2501174,
"phi",
"Latn",
}
m["got"] = {
"Gothic",
35722,
"gme",
"Goth, Runr, Latn",
translit = {Goth = "Goth-translit"},
link_tr = true,
strip_diacritics = {Latn = {remove_diacritics = c.macron}},
}
m["gou"] = {
"Gavar",
3441180,
"cdc-cbm",
}
m["gov"] = {
"Goo",
16927208,
"dmn",
"Latn",
}
m["gow"] = {
"Gorwaa",
3437626,
"cus-sou",
"Latn",
}
m["gox"] = {
"Gobu",
7194986,
"bad-cnt",
}
m["goy"] = {
"Goundo",
317636,
"alv-kim",
}
m["goz"] = {
"Gozarkhani",
5590235,
"xme-ttc",
ancestors = "xme-ttc-eas",
}
m["gpa"] = {
"Gupa-Abawa",
3915352,
"alv-ngb",
"Latn",
}
m["gpn"] = {
"Taiap",
56237,
"qfa-dis", -- Papuan; isolate in Glottolog; relationship with Torricelli proposed by Usher
"Latn",
}
m["gqa"] = {
"Ga'anda",
56245,
"cdc-cbm",
"Latn",
}
m["gqi"] = {
"Guiqiong",
3120647,
"sit-qia",
}
m["gqn"] = { -- a variety of 'ter'
"Kinikinao",
53386731,
"awd",
"Latn",
}
m["gqr"] = {
"Gor",
759992,
"csu-sar",
"Latn",
}
m["gqu"] = {
"Qau",
17284874,
"gio",
}
m["gra"] = {
"Rajput Garasia",
21041529,
"inc-bhi",
"Deva, Gujr",
ancestors = "bhb",
}
m["grc"] = {
"Ancient Greek",
35497,
"grk",
"Polyt, Cprt",
translit = {
Cprt = "Cprt-translit",
},
override_translit = true,
-- Polyt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
standard_chars = {
Polyt = "ΑΆἈἉἊἋἌἍἎἏᾈᾉᾊᾋᾌᾍᾎᾏᾸᾹᾺᾼΒΓΔΕΈἘἙἚἛἜἝῈΖΗΉἨἩἪἫἬἭἮἯᾘᾙᾚᾛᾜᾝᾞᾟῊῌΘΙΊΪἸἹἺἻἼἽἾἿῘῙῚΚΛΜΝΞΟΌὈὉὊὋὌὍΠΡῬΡ̓ΣΤΥΎΫὙὛὝὟῨῩῪΦΧΨΩΏὨὩὪὫὬὭὮὯᾨᾩᾪᾫᾬᾭᾮᾯῸῺῼαάἀἁἂἃἄἅἆἇὰᾀᾁᾂᾃᾄᾅᾆᾇᾰᾱᾲᾳᾴᾶᾷβγδεέἐἑἒἓἔἕὲζηήἠἡἢἣἤἥἦἧὴᾐᾑᾒᾓᾔᾕᾖᾗῂῃῄῆῇθιίϊΐἰἱἲἳἴἵἶἷὶῐῑῒῖῗκλμνξοόὀὁὂὃὄὅὸπρῤῥςστυύϋΰὐὑὒὓὔὕὖὗὺῠῡῢῦῧφχψωώὠὡὢὣὤὥὦὧὼᾠᾡᾢᾣᾤᾥᾦᾧῲῳῴῶῷ·ͺ΄΅᾽᾿῀῁῍῎῏῝῞῟῭`´῾",
Cprt = "𐠀𐠁𐠂𐠃𐠄𐠅𐠈𐠊𐠋𐠌𐠍𐠎𐠏𐠐𐠑𐠒𐠓𐠔𐠕𐠖𐠗𐠘𐠙𐠚𐠛𐠜𐠝𐠞𐠟𐠠𐠡𐠢𐠣𐠤𐠥𐠦𐠧𐠨𐠩𐠪𐠫𐠬𐠭𐠮𐠯𐠰𐠱𐠲𐠳𐠴𐠵𐠷𐠸𐠼𐠿",
c.punc
},
}
m["grd"] = {
"Guruntum",
3441272,
"cdc-wst",
"Latn",
}
m["grg"] = {
"Madi",
6727664,
"ngf-gmo",
"Latn",
}
m["grh"] = {
"Gbiri-Niragu",
3913936,
"nic-kau",
"Latn",
}
m["gri"] = {
"Ghari",
3104782,
"poz-sls",
"Latn",
}
m["grj"] = {
"Southern Grebo",
3914444,
"grb",
"Latn",
}
m["grm"] = {
"Kota Marudu Talantang",
6433808,
"poz-san",
"Latn",
}
m["gro"] = {
"Groma",
56551,
"sit-tib",
}
m["grq"] = {
"Gorovu",
56355,
"paa-por",
"Latn",
}
m["grs"] = {
"Gresi",
5607612,
"paa-nim",
"Latn",
}
m["grt"] = {
"Garo",
36137,
"tbq-bdg",
"Latn, Beng, Brai",
}
m["gru"] = {
"Kistane",
13273,
"sem-eth",
"Latn, Ethi",
}
m["grv"] = {
"Central Grebo",
18385114,
"grb",
"Latn",
}
m["grw"] = {
"Gweda",
5623387,
"poz-ocw",
"Latn",
}
m["grx"] = {
"Guriaso",
12631954,
"qfa-unc", -- no consensus; may be Kwomtari per Baron (1983) and Usher (2020), but no connections accepted by
-- Glottolog.
"Latn",
}
m["gry"] = {
"Barclayville Grebo",
11157342,
"grb",
"Latn",
}
m["grz"] = {
"Guramalum",
3120935,
"poz-ocw",
"Latn",
}
m["gse"] = {
"Ghanaian Sign Language",
35289,
"sgn-asl",
"Latn", -- when documented
}
m["gsg"] = {
"German Sign Language",
33282,
"sgn-gsl",
"Sgnw",
}
m["gsl"] = {
"Gusilay",
35439,
"alv-jol",
"Latn",
}
m["gsm"] = {
"Guatemalan Sign Language",
2886781,
"sgn",
"Latn", -- when documented
}
m["gsn"] = {
"Gusan",
11732224,
"ngf-era",
"Latn",
}
m["gso"] = {
"Southwest Gbaya",
4919322,
"gba-sou",
"Latn",
}
m["gsp"] = {
"Wasembo",
7971402,
"ngf-mad", -- placed in under Rai Coast by Glottolog (under Greater Yaganon) and Pawley-Hammarström
"Latn",
}
m["gss"] = {
"Greek Sign Language",
3565084,
"sgn",
}
m["gsw"] = {
"Alemannic German",
131339,
"gmw-hgm",
"Latn",
wikimedia_codes = "als",
ancestors = "gmh",
}
m["gta"] = {
"Guató",
3027940,
"qfa-dis", -- isolate or Macro-Jê
"Latn",
}
m["gtu"] = {
"Aghu Tharrnggala",
16825981,
"aus-pmn",
"Latn",
}
m["gua"] = {
"Shiki",
3913946,
"nic-jrn",
"Latn",
}
m["gub"] = {
"Guajajára",
7699720,
"tup-gua",
"Latn",
}
m["guc"] = {
"Wayuu",
891085,
"awd-taa",
"Latn",
}
m["gud"] = {
"Yocoboué Dida",
21074781,
"kro-did",
"Latn",
}
m["gue"] = {
"Gurindji",
10511016,
"aus-pam",
"Latn",
}
m["guf"] = {
"Gupapuyngu",
10511004,
"aus-yol",
"Latn",
}
m["gug"] = {
"Paraguayan Guarani",
17478066,
"gn",
"Latn",
wikimedia_codes = "gn",
ancestors = "gn-cls",
}
m["guh"] = {
"Guahibo",
2669193,
"sai-guh",
"Latn",
}
m["gui"] = {
"Eastern Bolivian Guarani",
2963912,
"gn",
"Latn",
}
m["guk"] = {
"Gumuz",
2396970,
"ssa",
"Latn, Ethi",
}
m["gul"] = {
"Gullah",
33395,
"crp",
"Latn",
ancestors = "en",
}
m["gum"] = {
"Guambiano",
2744745,
"sai-bar",
"Latn",
}
m["gun"] = {
"Mbya Guarani",
3915584,
"gn",
"Latn",
}
m["guo"] = {
"Guayabero",
2980375,
"sai-guh",
"Latn",
}
m["gup"] = {
"Gunwinggu",
1406574,
"aus-gun",
"Latn",
}
m["guq"] = {
"Aché",
383701,
"tup",
"Latn",
}
m["gur"] = {
"Farefare",
35331,
"nic-mre",
"Latn",
}
m["gus"] = {
"Guinean Sign Language",
15983937,
"sgn-asl", -- sic, not sgn-fsl
"Latn", -- when documented
}
m["gut"] = {
"Maléku Jaíka",
3915782,
"cba",
"Latn",
}
m["guu"] = {
"Yanomamö",
8048928,
"sai-ynm",
"Latn",
}
m["guv"] = {
"Gey",
11137816,
"alv-sav",
"Latn",
}
m["guw"] = {
"Gun",
3111668,
"alv-gbe",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron},
}
m["gux"] = {
"Gourmanchéma",
35474,
"nic-grm",
"Latn",
}
m["guz"] = {
"Gusii",
33603,
"bnt-lok",
"Latn",
}
m["gva"] = {
"Kaskihá",
3033534,
"sai-mas",
"Latn",
}
m["gvc"] = {
"Guanano",
3566001,
"sai-tuc",
"Latn",
}
m["gve"] = {
"Duwet",
5317647,
"poz-ocw",
"Latn",
}
m["gvf"] = {
"Golin",
3110291,
"ngf-sim",
"Latn",
}
m["gvj"] = {
"Guajá",
3915506,
"tup",
"Latn",
}
m["gvl"] = {
"Gulay",
641737,
"csu-sar",
"Latn",
}
m["gvm"] = {
"Gurmana",
3913363,
"nic-shi",
"Latn",
}
m["gvn"] = {
"Kuku-Yalanji",
5621973,
"aus-pam",
"Latn",
}
m["gvo"] = {
"Gavião do Jiparaná",
5528335,
"tup",
"Latn",
}
m["gvp"] = {
"Pará Gavião",
3365443,
"sai-nje",
"Latn",
}
m["gvr"] = {
"Gurung",
2392342,
"sit-tam",
"Gukh, Deva",
}
m["gvs"] = {
"Gumawana",
5618041,
"poz-ocw",
"Latn",
}
m["gvy"] = {
"Guyani",
10511230,
"aus-pam",
"Latn",
}
m["gwa"] = {
"Mbato",
3914941,
"alv-ptn",
"Latn",
}
m["gwb"] = {
"Gwa",
5623219,
"nic-jrn",
"Latn",
}
m["gwc"] = {
"Kalami",
1675961,
"inc-koh",
"Arab",
strip_diacritics = {
["Arab"] = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef .. u(0x065e)
},
},
}
m["gwd"] = {
"Gawwada",
3032135,
"cus-eas",
"Latn, Ethi",
}
m["gwe"] = {
"Gweno",
3358211,
"bnt-chg",
"Latn",
}
m["gwf"] = {
"Gowro",
3812403,
"inc-koh",
"Arab",
}
m["gwg"] = {
"Moo",
6907057,
"alv-bwj",
"Latn",
}
m["gwi"] = {
"Gwich'in",
21057,
"ath-nor",
"Latn",
}
m["gwj"] = {
"Gcwi",
12631978,
"khi-kal",
"Latn",
}
m["gwm"] = {
"Awngthim",
4830109,
"aus-pmn",
"Latn",
}
m["gwn"] = {
"Gwandara",
56521,
"cdc-wst",
"Latn",
}
m["gwr"] = {
"Gwere",
5623559,
"bnt-nyg",
"Latn",
}
m["gwt"] = {
"Gawar-Bati",
33894,
"inc-kun",
"Arab",
}
m["gwu"] = {
"Guwamu",
10511225,
"aus-pam",
"Latn",
}
m["gww"] = {
"Kwini",
10551249,
"aus-wor",
"Latn",
}
m["gwx"] = {
"Gua",
35422,
"alv-gng",
"Latn",
}
m["gxx"] = {
"Wè Southern",
19921582,
"kro-wee",
"Latn",
}
m["gya"] = {
"Northwest Gbaya",
36594,
"gba-wes",
"Latn",
}
m["gyb"] = {
"Garus",
5524492,
"ngf-han",
"Latn",
}
m["gyd"] = {
"Kayardild",
3913770,
"aus-tnk",
"Latn",
}
m["gye"] = {
"Gyem",
5624046,
"nic-jer",
"Latn",
}
m["gyf"] = {
"Gungabula",
10510783,
"aus-pam",
"Latn",
}
m["gyg"] = {
"Gbayi",
11137618,
"nic-ngd",
"Latn",
}
m["gyi"] = {
"Gyele",
35434,
"bnt-mnj",
"Latn",
}
m["gyl"] = {
"Gayil",
5528771,
"omv-aro",
"Latn",
}
m["gym"] = {
"Ngäbere",
3915581,
"cba",
"Latn",
}
m["gyn"] = {
"Guyanese Creole English",
3305477,
"crp",
"Latn",
ancestors = "en",
}
m["gyo"] = {
"Gyalsumdo",
53575940,
"sit-kyk",
}
m["gyr"] = {
"Guarayu",
3118779,
"tup-gua",
"Latn",
}
m["gyy"] = {
"Gunya",
10511001,
"aus-pam",
"Latn",
}
m["gza"] = {
"Ganza",
5521556,
"omv-mao",
"Latn",
}
m["gzn"] = {
"Gane",
3095108,
"poz-hce",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
sfxj3sai2g3hvmwafn0k1rlbtlokovi
Mòideal:languages/data/3/h
828
16800
86327
2026-07-22T20:57:28Z
Altronic
4137
Copy from English Wiktionary
86327
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["haa"] = {
"Hän",
28272,
"ath-nor",
"Latn",
}
m["hab"] = {
"Hanoi Sign Language",
12632107,
"sgn",
"Latn", -- when documented
}
m["hac"] = {
"Gurani",
33733,
"ira-zgr",
"ku-Arab",
translit = "ckb-translit",
}
m["had"] = {
"Hatam",
56825,
"qfa-iso", -- Would form paa-ham with [[w:Mansim language]] if that language were added
"Latn",
}
m["haf"] = {
"Haiphong Sign Language",
39868240,
"sgn",
}
m["hag"] = {
"Hanga",
35426,
"nic-dag",
"Latn",
}
m["hah"] = {
"Hahon",
3125730,
"poz-ocw",
"Latn",
}
m["hai"] = {
"Haida",
33303,
"qfa-iso",
"Latn",
}
m["haj"] = {
"Hajong",
3350576,
"qfa-mix",
"as-Beng, Latn",
ancestors = "tbq-pro, inc-oas, inc-obn",
}
m["hak"] = {
"Hakka",
33375,
"zhx",
"Hants, Latn",
ancestors = "ltc",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["hal"] = {
"Halang",
56307,
"mkh",
"Latn",
}
m["ham"] = {
"Hewa",
5748345,
"paa-sep",
"Latn",
}
m["hao"] = {
"Hakö",
3125871,
"poz-ocw",
"Latn",
}
m["hap"] = {
"Hupla",
5946223,
"ngf-gvd",
"Latn",
}
m["har"] = {
"Harari",
33626,
"sem-eth",
"Ethi",
translit = "Ethi-translit",
}
m["has"] = {
"Haisla",
3107399,
"wak",
"Latn",
}
m["hav"] = {
"Havu",
5684097,
"bnt-shh",
"Latn",
}
m["haw"] = {
"Hawaiian",
33569,
"poz-pep",
"Latn",
display_text = {
from = {"‘"},
to = {"ʻ"}
},
sort_key = {remove_diacritics = c.macron},
standard_chars = "AaĀāEeĒēIiĪīOoŌōUuŪūHhKkLlMmNnPpWwʻ" .. c.punc,
}
m["hax"] = {
"Southern Haida",
12953543,
"qfa-iso",
"Latn",
ancestors = "hai",
}
m["hay"] = {
"Haya",
35756,
"bnt-haj",
"Latn",
}
m["hba"] = {
"Hamba",
11028905,
"bnt-tet",
"Latn",
}
m["hbb"] = {
"Huba",
56290,
"cdc-cbm",
"Latn",
}
m["hbn"] = {
"Heiban",
35523,
"alv-hei",
}
m["hbu"] = {
"Habu",
1567033,
"poz-cet",
"Latn",
}
m["hca"] = {
"Andaman Creole Hindi",
7599417,
"crp",
ancestors = "hi, bn, ta",
}
m["hch"] = {
"Huichol",
35575,
"azc",
"Latn",
}
m["hdn"] = {
"Northern Haida",
20054484,
"qfa-iso",
"Latn",
ancestors = "hai",
}
m["hds"] = {
"Honduras Sign Language",
3915496,
"sgn",
"Latn", -- when documented
}
m["hdy"] = {
"Hadiyya",
56613,
"cus-hec",
"Latn, Ethi",
}
m["hea"] = {
"Northern Qiandong Miao",
3138832,
"hmn",
"Latn, Bopo",
}
m["hed"] = {
"Herdé",
56253,
"cdc-mas",
"Latn",
}
m["heg"] = {
"Helong",
35432,
"poz-tim",
"Latn",
}
m["heh"] = {
"Hehe",
3129390,
"bnt-bki",
"Latn",
}
m["hei"] = {
"Heiltsuk",
5699507,
"wak",
"Latn",
}
m["hem"] = {
"Hemba",
5711209,
"bnt-lbn",
}
m["hgm"] = {
"Haiǁom",
4494781,
"khi-khk",
"Latn",
}
m["hgw"] = {
"Haigwai",
5639108,
"poz-ocw",
"Latn",
}
m["hhi"] = {
"Hoia Hoia",
5877767,
"paa-wig",
"Latn",
}
m["hhr"] = {
"Kerak",
11010783,
"alv-jfe",
}
m["hhy"] = {
"Hoyahoya",
15633149,
"paa-wig",
"Latn",
}
m["hia"] = {
"Lamang",
35700,
"cdc-cbm",
"Latn",
}
m["hib"] = {
"Hibito",
3135164,
"qfa-unc", -- poorly attested; possibly in a Hibito-Cholon or Cholonan family
}
m["hid"] = {
"Hidatsa",
3135234,
"sio-mor",
"Latn",
}
m["hif"] = {
"Fiji Hindi",
46728,
"inc-hie",
"Latn",
ancestors = "awa",
}
m["hig"] = {
"Kamwe",
56271,
"cdc-cbm",
}
m["hih"] = {
"Pamosu",
12953011,
"ngf-tib",
"Latn",
}
m["hii"] = {
"Hinduri",
5766763,
"him",
"Deva, Takr",
}
m["hij"] = {
"Hijuk",
35274,
"bnt-bsa",
}
m["hik"] = {
"Seit-Kaitetu",
7446989,
"poz-cma",
}
m["hil"] = {
"Hiligaynon",
35978,
"phi",
"Latn",
strip_diacritics = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey"
},
}
m["hio"] = {
"Tshwa",
963636,
"khi-kal",
}
m["hir"] = {
"Himarimã",
5765127,
"qfa-unc", -- language of uncontacted group; word list lost; believed Arawan
}
m["hit"] = {
"Hittite",
35668,
"ine-ana",
"Xsux, Latn",
}
m["hiw"] = {
"Hiw",
3138713,
"poz-vnn",
"Latn",
}
m["hix"] = {
"Hixkaryana",
56522,
"sai-prk",
"Latn",
}
m["hji"] = {
"Haji",
5639933,
"poz-mly",
"Latn",
}
m["hka"] = {
"Kahe",
3892562,
"bnt-chg",
"Latn",
}
m["hke"] = {
"Hunde",
3065432,
"bnt-shh",
"Latn",
}
m["hkh"] = {
"Pogali",
105198619,
"inc-kas",
}
m["hkk"] = {
"Hunjara-Kaina Ke",
63213931,
"ngf-oro",
"Latn",
}
m["hkn"] = {
"Mel-Khaonh",
19059577,
"mkh-ban",
}
m["hks"] = {
"Hong Kong Sign Language",
17038844,
"sgn",
}
m["hla"] = {
"Halia",
3125959,
"poz-ocw",
"Latn",
}
m["hlb"] = {
"Halbi",
3695692,
"inc-hal",
"Deva, Orya",
}
m["hld"] = {
"Halang Doan",
3914632,
"mkh-ban",
}
m["hle"] = {
"Hlersu",
5873537,
"tbq-llo",
}
m["hlt"] = {
"Nga La",
12952942,
"tbq-kuk",
"Latn",
}
m["hma"] = {
"Southern Mashan Hmong",
12953560,
"hmn",
"Latn",
}
m["hmb"] = {
"Humburi Senni",
35486,
"son",
"Latn, Arab",
}
m["hmc"] = {
"Central Huishui Hmong",
12953558,
"hmn",
}
m["hmd"] = {
"A-Hmao",
1108934,
"hmn",
"Latn, Plrd",
}
m["hme"] = {
"Eastern Huishui Hmong",
12953559,
"hmn",
}
m["hmf"] = {
"Hmong Don",
22911602,
"hmn",
}
m["hmg"] = {
"Southwestern Guiyang Hmong",
27478542,
"hmn",
}
m["hmh"] = {
"Southwestern Huishui Hmong",
12953565,
"hmn",
}
m["hmi"] = {
"Northern Huishui Hmong",
27434946,
"hmn",
}
m["hmj"] = {
"Ge",
11251864,
"hmn",
"Bopo",
}
m["hmk"] = {
"Yemaek",
8050724,
"qfa-kor",
"Hani",
sort_key = "Hani-sortkey",
}
m["hml"] = {
"Luopohe Hmong",
14468943,
"hmn",
}
m["hmm"] = {
"Central Mashan Hmong",
12953561,
"hmn",
}
m["hmp"] = {
"Northern Mashan Hmong",
12953564,
"hmn",
}
m["hmq"] = {
"Eastern Qiandong Miao",
27431369,
"hmn",
}
m["hmr"] = {
"Hmar",
2992841,
"tbq-kuk",
"Latn",
ancestors = "lus",
}
m["hms"] = {
"Southern Qiandong Miao",
12953562,
"hmn",
}
m["hmt"] = {
"Hamtai",
5646436,
"ngf-kme",
"Latn",
}
m["hmu"] = {
"Hamap",
12952484,
"paa-alp",
"Latn",
}
m["hmv"] = {
"Hmong Dô",
22911598,
"hmn",
"Latn", -- Probably also Hmng
}
m["hmw"] = {
"Western Mashan Hmong",
12953563,
"hmn",
}
m["hmy"] = {
"Southern Guiyang Hmong",
12953553,
"hmn",
}
m["hmz"] = {
"Hmong Shua",
25559603,
"hmn",
}
m["hna"] = {
"Mina",
56532,
"cdc-cbm",
}
m["hnd"] = {
"Southern Hindko",
382273,
"inc-pan",
"pa-Arab",
}
m["hne"] = {
"Chhattisgarhi",
33158,
"inc-hie",
"Deva",
ancestors = "inc-oaw",
translit = "hi-translit"
}
m["hnh"] = {
"ǁAni",
3832982,
"khi-kal",
"Latn",
}
m["hni"] = {
"Hani",
56516,
"tbq-han",
"Latn",
}
m["hnj"] = {
"Green Hmong",
3138831,
"hmn",
"Latn, Hmng, Hmnp",
}
m["hnm"] = {
"Hainanese",
934541,
"zhx-nan",
"Hants",
generate_forms = "zh-generateforms",
sort_key = "Hani-sortkey",
}
m["hnn"] = {
"Hanunoo",
35435,
"phi",
"Hano, Latn",
translit = {Hano = "hnn-translit"},
override_translit = true,
strip_diacritics = {Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey",
},
}
m["hno"] = {
"Northern Hindko",
6346358,
"inc-pan",
"pa-Arab",
}
m["hns"] = {
"Caribbean Hindustani",
1843468,
"inc", -- "crp"?
"Arab, Deva, Kthi, Latn",
ancestors = "bho, awa",
}
m["hnu"] = {
"Hung",
12632753,
"mkh-vie",
}
m["hoa"] = {
"Hoava",
3138887,
"poz-ocw",
"Latn",
}
m["hob"] = {
"Mari (Austronesian)",
6760941,
"poz-ocw",
"Latn",
}
m["hoc"] = {
"Ho",
33270,
"mun",
"Wara, Orya, Deva, Beng, Latn",
}
m["hod"] = {
"Holma",
56331,
"cdc-cbm",
"Latn",
}
m["hoe"] = {
"Horom",
3914008,
"nic-ple",
"Latn",
}
m["hoh"] = {
"Hobyót",
33299,
"sem-sar",
"Arab, Latn",
}
m["hoi"] = {
"Holikachuk",
28508,
"ath-nor",
"Latn",
}
m["hoj"] = {
"Hadoti",
33227,
"raj",
"Deva",
translit = "hi-translit",
}
m["hol"] = {
"Holu",
4121133,
"bnt-pen",
"Latn",
}
m["hom"] = {
"Homa",
3449953,
"bnt-boa",
"Latn",
}
m["hoo"] = {
"Holoholo",
3139484,
"bnt-tkm",
"Latn",
}
m["hop"] = {
"Hopi",
56421,
"azc",
"Latn",
}
m["hor"] = {
"Horo",
641748,
"csu-sar",
}
m["hos"] = {
"Ho Chi Minh City Sign Language",
16111971,
"sgn",
"Latn", -- when documented
}
m["hot"] = {
"Hote",
12632404,
"poz-ocw",
"Latn",
}
m["hov"] = {
"Hovongan",
5917269,
"poz",
"Latn",
}
m["how"] = {
"Honi",
56842,
"tbq-han",
}
m["hoy"] = {
"Holiya",
5880707,
"dra-kan",
}
m["hoz"] = {
"Hozo",
5923010,
"omv-mao",
}
m["hpo"] = {
"Hpon",
5923277,
"tbq-brm",
"Latn",
}
m["hps"] = {
"Hawai'i Pidgin Sign Language",
33358,
"sgn",
"Latn", -- when documented
}
m["hra"] = {
"Hrangkhol",
5923435,
"tbq-kuk",
"Latn",
}
m["hrc"] = {
"Niwer Mil",
30323994,
"poz-oce",
"Latn",
}
m["hre"] = {
"Hrê",
3915794,
"mkh-nbn",
"Latn",
}
m["hrk"] = {
"Haruku",
5675762,
"poz-cma",
"Latn",
}
m["hrm"] = {
"Horned Miao",
63213949,
"hmn",
}
m["hro"] = {
"Haroi",
3127568,
"cmc",
"Latn",
}
m["hrp"] = {
"Nhirrpi",
32571318,
"aus-kar",
"Latn",
}
m["hrt"] = {
"Hértevin",
33290,
"sem-nna",
"Latn",
}
m["hru"] = {
"Hruso",
5923933,
"sit-hrs",
"Latn",
}
m["hrw"] = {
"Warwar Feni",
56704265,
"poz-oce",
"Latn",
}
m["hrx"] = {
"Hunsrik",
304049,
"gmw-hgm",
"Latn",
ancestors = "gmw-cfr",
}
m["hrz"] = {
"Harzani",
56464,
"xme-ttc",
"fa-Arab, Latn",
ancestors = "xme-ttc-nor",
}
m["hsb"] = {
"Upper Sorbian",
13248,
"wen",
"Latn",
sort_key = s["wen-sortkey"],
standard_chars = "AaBbCcČčĆćDdEeĚěFfGgHhIiJjKkŁłLlMmNnŃńOoÓóPpRrŘřSsŠšTtUuWwYyZzŽžŹź" .. c.punc,
}
m["hsh"] = {
"Hungarian Sign Language",
13636869,
"sgn",
"Latn", -- when documented
}
m["hsl"] = {
"Hausa Sign Language",
3915462,
"sgn",
"Latn", -- when documented
}
m["hsn"] = {
"Xiang",
13220,
"zhx",
"Hants",
ancestors = "ltc",
generate_forms = "zh-generateforms",
translit = "zh-translit",
sort_key = "Hani-sortkey",
}
m["hss"] = {
"Harsusi",
33423,
"sem-sar",
"Arab, Latn",
}
m["hti"] = {
"Hoti",
5912372,
"poz-cma",
"Latn",
}
m["hto"] = {
"Minica Huitoto",
948514,
"sai-wit",
"Latn",
}
m["hts"] = {
"Hadza",
33411,
"qfa-iso",
"Latn",
}
m["htu"] = {
"Hitu",
5872700,
"poz-cma",
"Latn",
}
m["hub"] = {
"Huambisa",
1526037,
"sai-jiv",
"Latn",
}
m["huc"] = {
"ǂHoan",
2053913,
"khi-kxa",
"Latn",
}
m["hud"] = {
"Huaulu",
12952504,
"poz-cma",
"Latn",
}
m["huf"] = {
"Humene",
11732231,
"paa-kwa",
"Latn",
}
m["hug"] = {
"Huachipaeri",
3446617,
"sai-har",
"Latn",
}
m["huh"] = {
"Huilliche",
35531,
"sai-ara",
"Latn",
}
m["hui"] = {
"Huli",
3125121,
"ngf-khu",
"Latn",
}
m["huj"] = {
"Northern Guiyang Hmong",
12953554,
"hmn",
}
m["huk"] = {
"Hulung",
12952505,
"poz-cet",
"Latn",
}
m["hul"] = {
"Hula",
6382179,
"poz-ocw",
"Latn",
}
m["hum"] = {
"Hungana",
10975396,
"bnt-yak",
"Latn",
}
m["huo"] = {
"Hu",
3141783,
"mkh-pal",
}
m["hup"] = {
"Hupa",
28058,
"ath-pco",
"Latn",
}
m["huq"] = {
"Tsat",
34133,
"cmc",
}
m["hur"] = {
"Halkomelem",
35388,
"sal",
"Latn",
}
m["hus"] = {
"Wastek",
35573,
"myn",
"Latn",
}
m["huu"] = {
"Murui Huitoto",
2640935,
"sai-wit",
"Latn",
}
m["huv"] = {
"Huave",
12954031,
"qfa-iso",
"Latn",
}
m["huw"] = {
"Hukumina",
3142988,
"poz-cma",
"Latn",
}
m["hux"] = {
"Nüpode Huitoto",
56333,
"sai-wit",
"Latn",
}
m["huy"] = {
"Hulaulá",
33426,
"sem-nna",
"Hebr",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["huz"] = {
"Hunzib",
56564,
"cau-ets",
"Cyrl",
translit = "huz-translit",
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {Cyrl = s["cau-Cyrl-stripdiacritics"]},
}
m["hvc"] = {
"Haitian Vodoun Culture Language",
3504239,
"crp",
"Latn",
}
m["hvk"] = {
"Haveke",
5683513,
"poz-cln",
"Latn",
}
m["hvn"] = {
"Sabu",
3128792,
"poz-cet",
"Latn",
}
m["hwa"] = {
"Wané",
3914887,
"kro-ekr",
"Latn",
}
m["hwc"] = {
"Hawaiian Creole",
35602,
"crp",
"Latn",
ancestors = "en",
}
m["hwo"] = {
"Hwana",
56498,
"cdc-cbm",
"Latn",
}
m["hya"] = {
"Hya",
56798,
"cdc-cbm",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
f9huwmj3fslx6zuv02on4gf9agfyz4r
Mòideal:languages/data/3/i
828
16801
86328
2026-07-22T20:58:12Z
Altronic
4137
Copy from English Wiktionary
86328
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["iai"] = {
"Iaai",
282888,
"poz-cln",
"Latn",
}
m["ian"] = {
"Iatmul",
5983460,
"paa-nnd",
"Latn",
}
m["iar"] = {
"Purari",
3499934,
"qfa-dis", -- Papuan; isolate in Glottolog; unclassified by Pawley and Hammarström; proposed to be in a putative Binanderean-Goilalan family by Usher
}
m["iba"] = {
"Iban",
33424,
"poz-mly",
"Latn",
}
m["ibb"] = {
"Ibibio",
33792,
"nic-ief",
"Latn",
}
m["ibd"] = {
"Iwaidja",
1977429,
"aus-wdj",
"Latn",
}
m["ibe"] = {
"Akpes",
35457,
"alv-von",
"Latn",
}
m["ibg"] = {
"Ibanag",
1775596,
"phi",
"Latn",
}
m["ibh"] = {
"Bih",
51955140,
"cmc",
"Latn",
}
m["ibl"] = {
"Ibaloi",
3147383,
"phi",
"Latn",
}
m["ibm"] = {
"Agoi",
34727,
"nic-ucr",
"Latn",
}
m["ibn"] = {
"Ibino",
3813281,
"nic-lcr",
"Latn",
}
m["ibr"] = {
"Ibuoro",
3813306,
"nic-ief",
"Latn",
}
m["ibu"] = {
"Ibu",
11732235,
"paa-sah",
"Latn",
}
m["iby"] = {
"Ibani",
11280479,
"ijo",
"Latn",
}
m["ica"] = {
"Ede Ica",
12952405,
"alv-ede",
"Latn",
}
m["ich"] = {
"Etkywan",
3914462,
"nic-jkn",
"Latn",
}
m["icl"] = {
"Icelandic Sign Language",
3436654,
"sgn",
"Latn", -- when documented
}
m["icr"] = {
"Islander Creole English",
2044587,
"crp",
"Latn",
ancestors = "en",
}
m["ida"] = {
"Idakho-Isukha-Tiriki",
12952512,
"bnt-lok",
"Latn",
}
m["idb"] = {
"Indo-Portuguese",
6025550,
"crp",
"Latn",
ancestors = "pt",
}
m["idc"] = {
"Idon",
3913366,
"nic-plc",
}
m["idd"] = {
"Ede Idaca",
13123376,
"alv-ede",
"Latn",
}
m["ide"] = {
"Idere",
3813288,
"nic-ief",
}
m["idi"] = {
"Idi",
5988630,
"paa-pah",
"Latn",
}
m["idr"] = {
"Indri",
35662,
"nic-ser",
}
m["ids"] = {
"Idesa",
3913979,
"alv-swd",
"Latn",
ancestors = "oke",
}
m["idt"] = {
"Idaté",
12952511,
"poz-tim",
"Latn",
}
m["idu"] = {
"Idoma",
35478,
"alv-ido",
"Latn",
}
m["ifa"] = {
"Amganad Ifugao",
18748222,
"phi",
"Latn",
}
m["ifb"] = {
"Batad Ifugao",
12953578,
"phi",
"Latn",
}
m["ife"] = {
"Ifè",
33606,
"alv-ede",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron},
sort_key = {
remove_diacritics = c.tilde,
from = {"ɖ", "dz", "ɛ", "gb", "kp", "ny", "ŋ", "ɔ", "ts"},
to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "g" .. p[1], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1]}
},
}
m["iff"] = {
"Ifo",
7902545,
"poz-vns",
"Latn",
}
m["ifk"] = {
"Tuwali Ifugao",
7857158,
"phi",
"Latn",
}
m["ifm"] = {
"Teke-Fuumu",
36603,
"bnt-tek",
}
m["ifu"] = {
"Mayoyao Ifugao",
12953579,
"phi",
"Latn",
}
m["ify"] = {
"Keley-I Kallahan",
3192221,
"phi",
"Latn",
}
m["igb"] = {
"Ebira",
35363,
"alv-nup",
"Latn",
}
m["ige"] = {
"Igede",
35420,
"alv-ido",
"Latn",
}
m["igg"] = {
"Igana",
5991454,
"paa-tam",
"Latn",
}
m["igl"] = {
"Igala",
35513,
"alv-yrd",
"Latn",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dotabove .. c.caron .. c.lineabove},
sort_key = {
from = {
"ñm", "ñw", -- 3 chars
"ch", "ẹ", "gb", "gw", "kp", "kw", "ny", "ñ", "ọ" -- 2 chars
},
to = {
"n" .. p[3], "n" .. p[4],
"c" .. p[1], "e" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "o" .. p[1]
}
},
}
m["igm"] = {
"Kanggape",
6362743,
"paa-ata",
"Latn",
}
m["ign"] = {
"Ignaciano",
3148190,
"awd",
"Latn",
}
m["igo"] = {
"Isebe",
11732248,
"ngf-gum",
"Latn",
}
m["igs"] = {
"Glosa",
1138529,
"art",
"Latn",
type = "appendix-constructed",
}
m["igw"] = {
"Igwe",
3913985,
"alv-yek",
"Latn",
}
m["ihb"] = {
"Pidgin Iha",
12639686,
"crp",
ancestors = "ihp",
}
m["ihi"] = {
"Ihievbe",
3441193,
"alv-eeo",
"Latn",
ancestors = "ema",
}
m["ihp"] = {
"Iha",
5994495,
"paa-mbi",
"Latn",
}
m["ijc"] = {
"Izon",
35483,
"ijo",
"Latn",
}
m["ije"] = {
"Biseni",
35010,
"ijo",
"Latn",
}
m["ijj"] = {
"Ede Ije",
12952406,
"alv-ede",
"Latn",
}
m["ijn"] = {
"Kalabari",
35697,
"ijo",
"Latn",
}
m["ijs"] = {
"Southeast Ijo",
3915854,
"ijo",
"Latn",
}
m["ike"] = {
"Eastern Canadian Inuktitut",
4126517,
"esx-inu",
"Cans, Latn",
}
m["iki"] = {
"Iko",
3813290,
"nic-lcr",
"Latn",
}
m["ikk"] = {
"Ika",
35406,
"alv-igb",
"Latn",
}
m["ikl"] = {
"Ikulu",
425973,
"nic-plc",
"Latn",
}
m["iko"] = {
"Olulumo-Ikom",
3914402,
"nic-uce",
"Latn",
}
m["ikp"] = {
"Ikpeshi",
3912777,
"alv-yek",
"Latn",
}
m["ikr"] = {
"Ikaranggal",
5995402,
"aus-pam",
"Latn",
}
m["iks"] = {
"Inuit Sign Language",
13360244,
"sgn",
"Latn", -- when documented
}
m["ikt"] = {
"Inuvialuktun",
27990,
"esx-inu",
"Cans, Latn",
}
m["ikv"] = {
"Iku-Gora-Ankwa",
3913940,
"nic-plc",
}
m["ikw"] = {
"Ikwere",
35399,
"alv-igb",
"Latn",
}
m["ikx"] = {
"Ik",
35472,
"ssa-klk",
"Latn",
}
m["ikz"] = {
"Ikizu",
10977626,
"bnt-lok",
"Latn",
}
m["ila"] = {
"Ile Ape",
12473380,
"poz-cet",
}
m["ilb"] = {
"Ila",
10962725,
"bnt-bot",
"Latn",
}
m["ilg"] = {
"Ilgar",
5997810,
"aus-wdj",
"Latn",
}
m["ili"] = {
"Ili Turki",
33627,
"trk-kar",
"Cyrl",
}
m["ilk"] = {
"Ilongot",
3148787,
"phi",
"Latn",
}
m["ill"] = {
"Iranun",
12953581,
"phi",
"Latn, Arab",
}
m["ilo"] = {
"Ilocano",
35936,
"phi",
"Latn, Tglg",
translit = {
Tglg = "ilo-translit",
},
override_translit = true,
strip_diacritics = {
Latn = {
remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer,
}
},
sort_key = {
Latn = "tl-sortkey",
},
standard_chars = {
Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy" .. c.punc,
},
}
m["ils"] = {
"International Sign",
35754,
"sgn",
}
m["ilu"] = {
"Ili'uun",
12632888,
"poz-tim",
"Latn",
}
m["ilv"] = {
"Ilue",
3813301,
"nic-lcr",
"Latn",
}
m["ima"] = {
"Mala Malasar",
6740693,
"dra-tam",
}
m["imi"] = {
"Anamgura",
3501881,
"ngf-pom",
"Latn",
}
m["iml"] = {
"Miluk",
3314550,
"nai-coo",
"Latn",
}
m["imn"] = {
"Imonda",
6005721,
"paa-war",
"Latn",
}
m["imo"] = {
"Imbongu",
12632895,
"ngf-hag",
"Latn",
}
m["imr"] = {
"Imroing",
6008394,
"poz-tim",
}
m["ims"] = {
"Marsian",
1265446,
"itc-sbl",
"Ital, Latn",
-- Ital translit in [[Module:scripts/data]]
display_text = {
Latn = s["itc-Latn-displaytext"]
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"]
},
sort_key = {
Latn = s["itc-Latn-sortkey"]
},
}
m["imy"] = {
"Milyan",
3832946,
"ine-luw",
"Lyci",
}
m["inb"] = {
"Inga",
35491,
"qwe",
ancestors = "qwe-kch",
}
m["ing"] = {
"Deg Xinag",
27782,
"ath-nor",
"Latn",
}
m["inh"] = {
"Ingush",
33509,
"cau-vay",
"Cyrl, Latn, Arab",
translit = {
Cyrl = "cau-nec-translit",
Arab = "ar-translit",
},
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
strip_diacritics = {
Cyrl = s["cau-Cyrl-stripdiacritics"],
Latn = s["cau-Latn-stripdiacritics"],
},
sort_key = {
Cyrl = {
from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "пӏ", "тӏ", "хь", "хӏ", "цӏ", "чӏ", "яь"},
to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "п" .. p[1], "т" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "я" .. p[1]}
},
},
}
m["inj"] = {
"Jungle Inga",
16115012,
"qwe",
ancestors = "qwe-kch",
}
m["inl"] = {
"Indonesian Sign Language",
3915477,
"sgn-asl",
"Latn", -- when documented
}
m["inm"] = {
"Minaean",
737784,
"sem-osa",
"Sarb",
-- Sarb translit in [[Module:scripts/data]]
}
m["inn"] = {
"Isinai",
6081098,
"phi",
"Latn",
}
m["ino"] = {
"Inoke-Yate",
6036531,
"ngf-kya",
"Latn",
}
m["inp"] = {
"Iñapari",
15338035,
"awd",
"Latn",
}
m["ins"] = {
"Indian Sign Language",
12953486,
"sgn",
}
m["int"] = {
"Intha",
6057507,
"tbq-brm",
ancestors = "obr",
}
m["inz"] = {
"Ineseño",
35443,
"nai-chu",
"Latn",
}
m["ior"] = {
"Inor",
35763,
"sem-eth",
"Ethi",
}
m["iou"] = {
"Tuma-Irumu",
7852460,
"ngf-wan",
"Latn",
}
m["iow"] = {
"Chiwere",
56737,
"sio-msv",
"Latn",
}
m["ipi"] = {
"Ipili",
6065141,
"ngf-enc",
"Latn",
}
m["ipo"] = {
"Ipiko",
10566515,
"paa-ing",
"Latn",
}
m["iqu"] = {
"Iquito",
2669184,
"sai-zap",
"Latn",
}
m["iqw"] = {
"Ikwo",
11926474,
"alv-igb",
"Latn",
ancestors = "izi",
}
m["ire"] = {
"Iresim",
6069398,
"poz-hce",
"Latn",
}
m["irh"] = {
"Irarutu",
3027928,
"poz-cet",
"Latn",
}
m["iri"] = {
"Rigwe",
3912756,
"nic-plc",
"Latn",
}
m["irk"] = {
"Iraqw",
33595,
"cus-sou",
"Latn",
}
m["irn"] = {
"Irantxe",
3409301,
nil,
"Latn",
}
m["irr"] = {
"Ir",
3071880,
"mkh-kat",
}
m["iru"] = {
"Irula",
33363,
"dra-imd",
"Taml",
translit = "ta-translit"
}
m["irx"] = {
-- Wikipedia and Glottolog say that North and South Kamberau are different languages but ISO 639-3 has not (yet?)
-- split them.
"Kamberau",
6356317,
"ngf-sab",
"Latn",
}
m["iry"] = {
"Iraya",
6068356,
"phi",
"Latn",
}
m["isa"] = {
"Isabi",
11732247,
"ngf-gor",
"Latn",
}
m["isc"] = {
"Isconahua",
3052971,
"sai-pan",
"Latn",
}
m["isd"] = {
"Isnag",
6085162,
"phi",
"Latn",
}
m["ise"] = {
"Italian Sign Language",
375619,
"sgn",
"Latn", -- when documented
}
m["isg"] = {
"Irish Sign Language",
14183,
"sgn",
"Latn", -- when documented
}
m["ish"] = {
"Esan",
35268,
"alv-eeo",
"Latn",
}
m["isi"] = {
"Nkem-Nkum",
36261,
"nic-eko",
"Latn",
}
m["isk"] = {
"Ishkashimi",
33419,
"ira-sgi",
"Cyrl, Arab",
}
m["ism"] = {
"Masimasi",
6783273,
"poz-ocw",
"Latn",
}
m["isn"] = {
"Isanzu",
6078891,
"bnt-tkm",
"Latn",
}
m["iso"] = {
"Isoko",
35414,
"alv-swd",
"Latn",
}
m["isr"] = {
"Israeli Sign Language",
2911863,
"sgn",
"Sgnw",
}
m["ist"] = {
"Istriot",
35845,
"roa-dal",
"Latn",
}
m["isu"] = {
"Isu",
6089423,
"nic-rnw",
"Latn",
}
m["isv"] = {
"Interslavic",
148971,
"art",
"Latn, Cyrl",
type = "appendix-constructed",
ancestors = "sla-pro",
}
m["itb"] = {
"Binongan Itneg",
12953584,
"phi",
"Latn",
}
m["itd"] = {
"Southern Tidung",
63214959,
"poz-san",
"Latn",
}
m["ite"] = {
"Itene",
3038640,
"sai-cpc",
"Latn",
}
m["iti"] = {
"Inlaod Itneg",
12953585,
"phi",
}
m["itk"] = {
"Judeo-Italian",
1145414,
"roa-itd",
"Hebr, Latn",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["itl"] = {
"Itelmen",
33624,
"qfa-cka",
"Cyrl, Latn",
strip_diacritics = {
Cyrl = {
from = {"['’]", "[ӅԮ]", "[ӆԯ]", "Ҳ", "ҳ"},
to = {"ʼ", "Ԓ", "ԓ", "Ӽ", "ӽ"}
},
},
sort_key = {
Cyrl = {
from = {
"ӑ", "ё", "кʼ", "ӄʼ", "о̆", "пʼ", "тʼ", "ў", "чʼ", -- 2 chars
"ӄ", "љ", "ԓ", "њ", "ӈ", "ӽ", "ә" -- 1 char
},
to = {
"а" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "ч" .. p[1],
"к" .. p[2], "л" .. p[1], "л" .. p[2], "н" .. p[1], "н" .. p[2], "х" .. p[1], "ь" .. p[1]
}
},
},
}
m["itm"] = {
"Itu Mbon Uzo",
10977737,
"nic-ief",
"Latn",
ancestors = "ibr",
}
m["ito"] = {
"Itonama",
950585,
"qfa-iso",
"Latn",
}
m["itr"] = {
"Iteri",
2083185,
"paa-lma",
"Latn",
}
m["its"] = {
"Itsekiri",
36045,
"alv-edk",
"Latn",
strip_diacritics = {Latn = {remove_diacritics = c.grave .. c.acute .. c.macron}},
sort_key = {
remove_diacritics = c.tilde,
from = {"ẹ", "gb", "gh", "kp", "ọ", "ts", "ṣ"},
to = {"e" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "o" .. p[1], "t" .. p[1], "t" .. p[1]}
},
}
m["itt"] = {
"Maeng Itneg",
18748761,
"phi",
}
m["itv"] = {
"Itawit",
3915527,
"phi",
"Latn",
}
m["itw"] = {
"Ito",
11128810,
"nic-ief",
ancestors = "ibr",
}
m["itx"] = {
"Itik",
6094713,
"paa-tor",
"Latn",
}
m["ity"] = {
"Moyadan Itneg",
12953583,
"phi",
}
m["itz"] = {
"Itza'",
35537,
"myn",
"Latn",
}
m["ium"] = {
"Iu Mien",
2498808,
"hmx-mie",
"Latn",
}
m["ivb"] = {
"Ibatan",
18748212,
"phi",
"Latn",
}
m["ivv"] = {
"Ivatan",
3547080,
"phi",
"Latn",
}
m["iwk"] = {
"I-Wak",
12632789,
"phi",
}
m["iwm"] = {
"Iwam",
3915215,
"paa-iwa",
"Latn",
}
m["iwo"] = {
"Iwur",
6101006,
"ngf-okk",
"Latn",
}
m["iws"] = {
"Sepik Iwam",
16893603,
"paa-iwa",
"Latn",
}
m["ixc"] = {
"Ixcatec",
56706,
"omq",
"Latn",
}
m["ixl"] = {
"Ixil",
35528,
"myn",
"Latn",
}
m["iya"] = {
"Iyayu",
3913390,
"alv-nwd",
"Latn",
}
m["iyo"] = {
"Mesaka",
36080,
"nic-tiv",
"Latn",
}
m["iyx"] = {
"Yaa",
36909,
"bnt-nze",
"Latn",
}
m["izh"] = {
"Ingrian",
33559,
"urj-fin",
"Latn",
sort_key = {
from = {
"š", "ž",
},
to = {
"s" .. p[1], "z" .. p[1],
}
},
}
m["izi"] = {
"Izi-Ezaa-Ikwo-Mgbo",
11927027,
"alv-igb",
}
m["izr"] = {
"Izere",
6101921,
"nic-plc",
"Latn",
}
m["izz"] = {
"Izi",
3914387,
"alv-igb",
"Latn",
ancestors = "izi",
}
return require("Module:languages").finalizeData(m, "language")
2skx40rntbb7shghgpyy3uzwo24njsh
Mòideal:languages/data/3/j
828
16802
86329
2026-07-22T20:58:39Z
Altronic
4137
Copy from English Wiktionary
86329
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["jaa"] = {
"Jamamadí",
3053275,
"auf",
"Latn",
}
m["jab"] = {
"Hyam",
35403,
"nic-plc",
"Latn",
}
m["jac"] = {
"Jakaltek",
33393,
"myn",
"Latn",
}
m["jad"] = {
"Jahanka",
3913992,
"dmn-wmn",
"Latn",
}
m["jae"] = {
"Jabem",
3571232,
"poz-ocw",
"Latn",
}
m["jaf"] = {
"Jara",
56289,
"cdc",
"Latn",
}
m["jah"] = {
"Jah Hut",
2742661,
"mkh-asl",
"Latn",
}
m["jaj"] = {
"Zazao",
3574969,
"poz-ocw",
"Latn",
}
-- "jak" is treated as "ms", see [[WT:LT]]
m["jal"] = {
"Yalahatan",
8047298,
"poz-cma",
"Latn",
}
m["jam"] = {
"Jamaican Creole",
35939,
"crp",
"Latn",
ancestors = "en",
}
m["jan"] = {
"Janday",
6150919,
"aus-pam",
"Latn",
}
m["jao"] = {
"Yanyuwa",
34241,
"aus-pam",
"Latn",
}
m["jaq"] = {
"Yaqay",
8049134,
"paa-yaq",
"Latn",
}
m["jas"] = {
"New Caledonian Javanese",
12953527,
"poz",
"Latn",
ancestors = "jv",
}
m["jat"] = {
"Jakati",
4159744,
"inc-pan",
}
m["jau"] = {
"Yaur",
8050346,
"poz-hce",
"Latn",
}
m["jax"] = {
"Jambi Malay",
3915769,
"poz-mly",
"Latn",
}
m["jay"] = {
"Yan-nhangu",
10723405,
"aus-yol",
"Latn",
}
m["jaz"] = {
"Jawe",
3163200,
"poz-cln",
"Latn",
}
m["jbi"] = {
"Badjiri",
4840986,
"aus-pam",
"Latn",
}
m["jbj"] = {
"Arandai",
4784070,
"ngf-sbh",
"Latn",
}
m["jbk"] = {
"Barikewa",
63214981,
"paa-tki",
"Latn",
}
m["jbn"] = {
"Nefusa",
36151,
"ber",
"Arab",
strip_diacritics = {
Arab = "ar-stripdiacritics",
},
}
m["jbo"] = {
"Lojban",
36350,
"art",
"Latn",
type = "appendix-constructed",
}
m["jbr"] = {
"Jofotek-Bromnya",
16886849,
"paa-tor",
"Latn",
}
m["jbt"] = {
"Jabutí",
2060023,
"sai-mje",
"Latn",
}
m["jbu"] = {
"Jukun Takum",
35447,
"nic-jkn",
"Latn",
}
m["jbw"] = {
"Yawijibaya",
31722921,
"aus-wor",
"Latn",
}
m["jcs"] = {
"Jamaican Country Sign Language",
6127418,
"sgn",
"Latn", -- when documented
}
m["jct"] = {
"Krymchak",
33723,
"trk-kcu",
"Latn, Cyrl",
}
m["jda"] = {
"Jad",
12633440,
"sit-las",
}
m["jdg"] = {
"Jadgali",
13560607,
"inc-snd",
}
m["jdt"] = {
"Judeo-Tat",
56495,
"ira-swi",
"Latn, Cyrl, Hebr",
ancestors = "fa-cls",
translit = {
Cyrl = "jdt-translit",
Hebr = "jdt-translit",
},
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["jeb"] = {
"Jebero",
967031,
"sai-cah",
}
m["jee"] = {
"Jerung",
56372,
"sit-kiw",
}
m["jeg"] = {
"Jeng",
5091274,
"mkh-ban",
"Latn",
}
m["jeh"] = {
"Jeh",
3914636,
"mkh-ban",
"Latn",
}
m["jei"] = {
"Yei",
8051326,
"paa-yam",
"Latn",
}
m["jek"] = {
"Jeri Kuo",
11031936,
"dmn-jje",
"Latn",
}
m["jel"] = {
"Yelmek",
8052020,
"paa-bul",
"Latn",
}
m["jen"] = {
"Dza",
35558,
"alv-bwj",
}
m["jer"] = {
"Jere",
3915449,
"nic-jer",
}
m["jet"] = {
"Manem",
6748412,
"paa-war",
"Latn",
}
m["jeu"] = {
"Jonkor Bourmataguil",
56269,
}
m["jgb"] = {
"Ngbee",
7022243,
}
-- "jge" is treated as "ka", see [[WT:LT]]
m["jgk"] = {
"Gwak",
17523694,
"nic-jrw",
}
m["jgo"] = {
"Ngomba",
36287,
"bai",
"Latn",
}
m["jhi"] = {
"Jehai",
3176748,
"mkh-asl",
"Latn",
}
m["jhs"] = {
"Jhankot Sign Language",
6190889,
"sgn",
}
m["jia"] = {
"Jina",
56297,
}
m["jib"] = {
"Jibu",
3914448,
"nic-jkn",
"Latn",
}
m["jic"] = {
"Tol",
3178609,
"nai-jcq",
"Latn",
}
m["jid"] = {
"Bu",
3913321,
"nic-nin",
"Latn",
}
m["jie"] = {
"Jilbe",
56281,
"cdc-cbm",
"Latn",
}
m["jig"] = {
"Jingulu",
6202435,
"aus-mir",
"Latn",
}
m["jih"] = {
"Shangzhai",
25559440,
"ero",
}
m["jii"] = {
"Jiiddu",
56769,
"cus-som",
"Latn",
}
m["jil"] = {
"Jilim",
6192674,
"ngf-rai", -- placed in Nuru subfamily by Pawley-Hammarström
"Latn",
}
m["jim"] = {
"Jimjimen",
56288,
"cdc-cbm",
"Latn",
}
m["jio"] = {
"Jiamao",
3178570,
nil,
"Latn",
}
m["jiq"] = {
"Khroskyabs",
3118757,
"sit-wgy",
}
m["jit"] = {
"Jita",
6203228,
"bnt-haj",
"Latn",
}
m["jiu"] = {
"Youle Jino",
12952530,
"tbq-jin",
}
m["jiv"] = {
"Shuar",
617291,
"sai-jiv",
"Latn",
}
m["jiy"] = {
"Buyuan Jino",
12952528,
"tbq-jin",
}
m["jje"] = {
"Jeju",
129648,
"qfa-kor",
"Kore",
ancestors = "okm",
translit = "jje-translit",
-- Kore strip_diacritics in [[Module:scripts/data]]
}
m["jjr"] = {
"Zhár",
17523697,
"nic-jrw",
}
m["jka"] = {
"Kaera",
16910923,
"paa-alp",
"Latn",
}
m["jko"] = {
"Kubo",
12952670,
"ngf-est",
"Latn",
}
m["jkp"] = {
"Paku Karen",
25559420,
"kar"
}
m["jkr"] = {
"Koro (India)",
36162,
"sit-gsi",
}
m["jku"] = {
"Labir",
1990210,
"nic-jrn",
}
m["jle"] = {
"Ngile",
36329,
"alv-tal",
}
m["jls"] = {
"Jamaican Sign Language",
6127433,
"sgn-asl",
"Latn", -- when documented
}
m["jma"] = {
"Dima",
5277140,
"ngf-dag",
"Latn",
}
m["jmb"] = {
"Zumbun",
56252,
"cdc-wst",
"Latn",
}
m["jmc"] = {
"Machame",
12952751,
"bnt-chg",
"Latn",
}
m["jmd"] = {
"Yamdena",
8048030,
"poz-cet",
"Latn",
}
m["jmi"] = {
"Jimi",
3502308,
"cdc-wst",
"Latn",
}
m["jml"] = {
"Jumli",
6310993,
"inc-pah",
"Deva",
translit = {
Deva = "ne-translit",
},
}
m["jmn"] = {
"Makuri Naga",
6740482,
"sit-aao",
}
m["jmr"] = {
"Kamara",
35561,
"nic-dag",
}
-- "jms" is treated as "mff", see [[WT:LT]]
m["jmw"] = {
"Mouwase",
63256977,
"paa-tki",
"Latn",
}
m["jmx"] = {
"Western Juxtlahuaca Mixtec",
12953731,
"omq-mxt",
"Latn",
}
m["jna"] = {
"Jangshung",
12633505,
"sit-kin",
"Takr"
}
m["jnd"] = {
"Jandavra",
6150941,
"inc-wes",
"Arab",
ancestors = "gu",
}
m["jng"] = {
"Yangman",
10723416,
"aus-yng",
"Latn",
}
m["jni"] = {
"Janji",
3915330,
"nic-jer",
}
m["jnj"] = {
"Yemsa",
36873,
"omv",
"Ethi, Latn",
}
m["jnl"] = {
"Rawat",
7296948,
"sit-gma",
}
m["jns"] = {
"Jaunsari",
6164857,
"him",
"Deva, Takr",
translit = {
Deva = "hi-translit",
--Takr = "Takr-translit",
},
}
m["job"] = {
"Joba",
13123409,
"bnt-shh",
"Latn",
}
m["jod"] = {
"Wojenaka",
11029540,
"dmn-mnk",
}
m["jor"] = {
"Jorá",
5393974,
"tup-gua",
"Latn",
}
m["jos"] = {
"Jordanian Sign Language",
6534917,
"sgn",
"Sgnw",
}
m["jow"] = {
"Jowulu",
3914487,
"dmn-mnw",
"Latn",
}
-- "jpa" is not used, see [[WT:LT]]
m["jpr"] = {
"Judeo-Persian",
33367,
"ira-swi",
"Hebr",
ancestors = "fa",
-- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["jqr"] = {
"Jaqaru",
33443,
"sai-aym",
"Latn",
}
m["jra"] = {
"Jarai",
33370,
"cmc",
"Latn",
}
m["jrr"] = {
"Jiru",
6203123,
"nic-jkn",
}
m["jru"] = {
"Japrería",
3441409,
"sai-yuk",
"Latn",
}
m["jsl"] = {
"Japanese Sign Language",
35601,
"sgn-jsl",
"Sgnw",
}
m["jua"] = {
"Júma",
12953587,
"tup-gua",
"Latn",
}
m["jub"] = {
"Wannu",
3914905,
"nic-jkn",
}
m["juc"] = {
"Jurchen",
56731,
"tuw-jrc",
"Jurc, Hani",
}
m["jud"] = {
"Worodougou",
11155821,
"dmn-mnk",
}
m["juh"] = {
"Hone",
5964576,
"nic-jkn",
"Latn",
}
m["jui"] = {
"Ngadjuri",
16897028,
"aus-pam",
"Latn",
}
m["juk"] = {
"Wapan",
3914914,
"nic-jkn",
}
m["jul"] = {
"Jirel",
56863,
"sit-tib",
}
m["jum"] = {
"Jumjum",
11283696,
"sdv",
"Latn",
}
m["jun"] = {
"Juang",
33362,
"mun",
"Orya",
}
m["juo"] = {
"Jiba",
6191995,
"nic-jkn",
}
m["jup"] = {
"Hupdë",
3143384,
"sai-nad",
"Latn",
}
m["jur"] = {
"Jurúna",
4023175,
"tup",
"Latn",
}
m["jus"] = {
"Jumla Sign Language",
6310991,
"sgn",
}
m["jut"] = {
"Jutish",
1340322,
"gmq-eas",
"Latn",
ancestors = "da",
}
m["juu"] = {
"Ju",
3914897,
}
m["juw"] = {
"Wãpha",
3914934,
"nic-jkn",
"Latn",
}
m["juy"] = {
"Juray",
6314963,
"mun",
}
m["jvd"] = {
"Javindo",
2719893,
"crp",
"Latn",
}
m["jvn"] = {
"Caribbean Javanese",
11732256,
"poz",
"Latn",
ancestors = "jv",
}
m["jwi"] = {
"Jwira-Pepesa",
35467,
"alv-ctn",
"Latn",
}
-- "jya" is treated as "sit-sit", "sit-jap", "sit-tsh", "sit-zbu", see [[WT:LT]]
m["jyy"] = {
"Jaya",
641720,
"csu-bgr",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
6fyfqbfax29evkp7rq2m37s1v3w5s6a
Mòideal:languages/data/3/p
828
16803
86330
2026-07-22T20:59:24Z
Altronic
4137
Copy from English Wiktionary
86330
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["pab"] = {
"Pareci",
3504312,
"awd",
"Latn",
}
m["pac"] = {
"Pacoh",
3441136,
"mkh-kat",
"Latn",
}
m["pad"] = {
"Paumarí",
389827,
"auf",
"Latn",
}
m["pae"] = {
"Pagibete",
7124357,
"bnt-bta",
"Latn",
}
m["paf"] = {
"Paranawát",
12953806,
"tup-gua",
"Latn",
}
m["pag"] = {
"Pangasinan",
33879,
"phi",
"Latn, Tglg",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer},
},
}
m["pah"] = {
"Tenharim",
10266010,
"tup-gua",
"Latn",
}
m["pai"] = {
"Pe",
3914871,
"nic-tar",
"Latn",
}
m["pak"] = {
"Parakanã",
12953804,
"tup-gua",
"Latn",
}
m["pal"] = {
"Middle Persian",
32063,
"ira-swi",
"Latn, Phli, pal-Avst, Mani, Phlp, Phlv", -- Latn for translit; Phlv not in Unicode
translit = {
Phli = "Phli-translit",
["pal-Avst"] = "Avst-translit",
-- Mani translit in [[Module:scripts/data]]
},
ancestors = "peo",
}
m["pam"] = {
"Kapampangan",
36121,
"phi",
"Latn, Kulit",
strip_diacritics = {
Latn = {remove_diacritics = c.grave .. c.acute .. c.circ}
},
standard_chars = {
Latn = "AaBbDdEeGgHhIiKkLlMmNnOoPpRrSsTtUuWwYy",
c.punc
},
sort_key = {
Latn = "tl-sortkey"
},
}
m["pao"] = {
"Northern Paiute",
3360656,
"azc-num",
"Latn",
}
m["pap"] = {
"Papiamentu",
33856,
"crp",
"Latn",
ancestors = "pt",
}
m["paq"] = {
"Parya",
1135134,
"inc-cen",
}
m["par"] = {
"Panamint",
33926,
"azc-num",
"Latn",
}
m["pas"] = {
"Papasena",
7132508,
"paa-clp",
"Latn",
}
m["pau"] = {
"Palauan",
33776,
"poz",
"Latn, Kana",
sort_key = {
Kana = "Kana-sortkey"
},
}
m["pav"] = {
"Wari'",
3027909,
"sai-cpc",
"Latn",
}
m["paw"] = {
"Pawnee",
56751,
"cdd",
"Latn",
strip_diacritics = {remove_diacritics = c.acute},
}
m["pax"] = {
"Pankararé",
25559779,
nil,
"Latn",
}
m["pay"] = {
"Pech",
4898889,
"cba",
"Latn",
}
m["paz"] = {
"Pankararú",
7131310,
nil,
"Latn",
}
m["pbb"] = {
"Páez",
33677,
nil,
"Latn",
}
m["pbc"] = {
"Patamona",
3915921,
"sai-pem",
"Latn",
}
m["pbe"] = {
"Mezontla Popoloca",
42365630,
"omq-pop",
"Latn",
}
m["pbf"] = {
"Coyotepec Popoloca",
5180100,
"omq-pop",
"Latn",
}
m["pbg"] = {
"Paraujano",
3501747,
"awd-taa",
"Latn",
}
m["pbh"] = {
"Panare",
56610,
"sai-ven",
"Latn",
}
m["pbi"] = {
"Podoko",
3515096,
"cdc-cbm",
"Latn",
}
m["pbl"] = {
"Mak (Nigeria)",
3915349,
"alv-bwj",
"Latn",
}
m["pbm"] = {
"Puebla Mazatec",
31102530,
"omq-maz",
"Latn",
}
m["pbn"] = {
"Kpasam",
3914902,
"alv-mye",
"Latn",
}
m["pbo"] = {
"Papel",
36314,
"alv-pap",
"Latn",
}
m["pbp"] = {
"Badyara",
35095,
"alv-ten",
"Latn",
}
m["pbr"] = {
"Pangwa",
3847550,
"bnt-bki",
"Latn",
}
m["pbs"] = {
"Central Pame",
3361763,
"omq",
"Latn",
}
m["pbv"] = {
"Pnar",
3501850,
"aav-pkl",
"Latn",
}
m["pby"] = {
"Pyu (New Guinea)",
2567925,
"qfa-dis", -- Papuan; isolate per Glottolog, in a putative Arai-Samaia family in Usher (2020)
"Latn",
}
m["pca"] = {
"Santa Inés Ahuatempan Popoloca",
42365276,
"omq-pop",
"Latn",
}
m["pcb"] = {
"Pear",
6583669,
"mkh-pea",
"Khmr",
}
m["pcc"] = {
"Bouyei",
35100,
"tai-nor",
"Latn, Hani",
sort_key = {
Hani = "Hani-sortkey"
},
}
m["pcd"] = {
"Picard",
34024,
"roa-oil",
"Latn",
sort_key = s["roa-oil-sortkey"],
}
m["pce"] = {
"Ruching Palaung",
12953798,
"mkh-pal",
"Mymr",
}
m["pcf"] = {
"Paliyan",
7127643,
"dra-tam",
}
m["pcg"] = {
"Paniya",
7131211,
"dra-mal",
}
m["pch"] = {
"Pardhan",
7133207,
"dra-gon",
}
m["pci"] = {
"Duruwa",
56753,
"dra-pgd",
"Deva, Orya",
}
m["pcj"] = {
"Parenga",
3111396,
"mun",
}
m["pck"] = {
"Paite",
12952337,
"tbq-kuk",
}
m["pcl"] = {
"Pardhi",
7136554,
"inc-bhi",
}
m["pcm"] = {
"Nigerian Pidgin",
33655,
"crp",
"Latn",
ancestors = "en",
strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.caron .. c.macronbelow},
sort_key = {
remove_diacritics = c.tilde,
from = {"ẹ", "gb", "kp", "ọ", "sh", "zh"},
to = {"e" .. p[1], "g" .. p[1], "k" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]}
},
}
m["pcn"] = {
"Piti",
3913375,
"nic-kne",
"Latn",
}
m["pcp"] = {
"Pacahuara",
2591165,
"sai-pan",
"Latn",
}
m["pcw"] = {
"Pyapun",
3438807,
nil,
"Latn",
}
m["pda"] = {
"Anam",
3501930,
"ngf-pom",
"Latn",
}
m["pdc"] = {
"Pennsylvania German",
22711,
"gmw-hgm",
"Latn",
ancestors = "gmw-rfr",
strip_diacritics = {
from = { "ă", "ĕ", "ŏ", "ŭ"},
to = { "a", "e", "o", "u"},
},
}
m["pdi"] = {
"Pa Di",
3359940,
nil,
"Latn",
}
m["pdn"] = {
"Fedan",
7206699,
"poz-ocw",
"Latn",
}
m["pdo"] = {
"Padoe",
3360370,
"poz-btk",
"Latn",
}
m["pdt"] = {
"Plautdietsch",
1751432,
"gmw-lgm",
"Latn",
ancestors = "nds-de",
}
m["pdu"] = {
"Kayan",
7123283,
"kar",
"Latn",
}
m["pea"] = {
"Peranakan Indonesian",
653415,
"crp",
"Latn",
ancestors = "ms",
}
m["peb"] = {
"Eastern Pomo",
3396032,
"nai-pom",
"Latn",
}
m["ped"] = {
"Mala (New Guinea)",
11732569,
"ngf-kau",
"Latn",
}
m["pee"] = {
"Taje",
12953902,
nil,
"Latn",
}
m["pef"] = {
"Northeastern Pomo",
3396018,
"nai-pom",
"Latn",
}
m["peg"] = {
"Pengo",
56758,
"dra-kki",
"Orya",
translit = "kxv-translit",
}
m["peh"] = {
"Bonan",
32983,
"xgn-shr",
"Latn",
}
m["pei"] = {
"Chichimeca-Jonaz",
3915427,
"omq-otp",
"Latn",
}
m["pej"] = {
"Northern Pomo",
3396021,
"nai-pom",
"Latn",
}
m["pek"] = {
"Penchal",
3374631,
"poz-aay",
"Latn",
}
m["pel"] = {
"Pekal",
3241781,
nil,
"Latn",
}
m["pem"] = {
"Phende",
7162372,
"bnt-pen",
"Latn",
}
m["peo"] = {
"Old Persian",
35225,
"ira-swi",
"Xpeo, Latn",
translit = "peo-translit",
}
m["pep"] = {
"Kunja",
6444807,
"paa-ton",
"Latn",
}
m["peq"] = {
"Southern Pomo",
3396023,
"nai-pom",
"Latn",
}
-- "pes" is treated as "fa" (or as etymology-only), see [[WT:LT]]
m["pev"] = {
"Pémono",
3439012,
"sai-map",
"Latn",
}
m["pex"] = {
"Petats",
3376353,
"poz-ocw",
"Latn",
}
m["pey"] = {
"Petjo",
940486,
nil,
"Latn",
}
m["pez"] = {
"Eastern Penan",
18638342,
"poz-swa",
"Latn",
}
m["pfa"] = {
"Pááfang",
3063517,
"poz-mic",
"Latn",
}
m["pfe"] = {
"Peere",
36377,
"alv-dur",
"Latn",
}
m["pga"] = {
"Juba Arabic",
1262143,
"crp",
"Latn",
ancestors = "apd",
}
m["pgd"] = {
"Gandhari",
3124623,
"inc-mid",
"Deva, Khar",
ancestors = "inc-ash",
translit = "Khar-translit",
}
m["pgg"] = {
"Pangwali",
13600429,
"him",
"Deva, Takr",
translit = "hi-translit",
}
m["pgi"] = {
"Pagi",
7124354,
"paa-bew",
"Latn",
}
m["pgk"] = {
"Rerep",
586907,
"poz-vnc",
"Latn",
}
m["pgl"] = {
"Primitive Irish",
3320030,
"cel-gae",
"Ogam, Latn",
translit = "pgl-translit",
}
m["pgn"] = {
"Paelignian",
65455883,
"itc-sbl",
"Ital, Latn",
-- Ital translit in [[Module:scripts/data]]
display_text = {
Latn = s["itc-Latn-displaytext"]
},
strip_diacritics = {
Latn = s["itc-Latn-stripdiacritics"]
},
sort_key = {
Latn = s["itc-Latn-sortkey"]
},
}
m["pgs"] = {
"Pangseng",
3914027,
"alv-mum",
"Latn",
}
m["pgu"] = {
"Pagu",
7124462,
"paa-gto",
"Latn",
}
m["pgz"] = {
"Papua New Guinean Sign Language",
25044405,
"sgn",
}
m["pha"] = {
"Pa-Hng",
2625410,
"hmn",
}
m["phd"] = {
"Phudagi",
7188289,
"inc-sou",
}
m["phg"] = {
"Phuong",
7188376,
"mkh-kat",
}
m["phh"] = {
"Phukha",
7188298,
"tbq-phw",
}
m["phk"] = {
"Phake",
7675798,
"tai-swe",
"Mymr",
translit = "aio-phk-translit",
display_text = s["phk-displaytext"],
strip_diacritics = s["phk-stripdiacritics"],
}
m["phl"] = {
"Palula",
2449549,
"inc-dng",
"Latn, ur-Arab",
strip_diacritics = {
-- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif
from = {"هٔ", "ۂ", "ٱ"},
to = {"ہ", "ہ", "ا"},
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef
},
}
m["phm"] = {
"Phimbi",
11007144,
"bnt-sna",
"Latn",
}
m["phn"] = {
"Phoenician",
36734,
"sem-can",
"Phnx",
-- Phnx translit in [[Module:scripts/data]]
}
m["pho"] = {
"Phunoi",
7188361,
"tbq-bis",
}
m["phq"] = {
"Phana'",
7180427,
"tbq-sil",
}
m["phr"] = {
"Pahari-Potwari",
33739,
"inc-pan",
"pa-Arab, Guru",
translit = {
Guru = "Guru-translit",
["pa-Arab"] = "pa-Arab-translit",
},
strip_diacritics = {
["pa-Arab"] = {
remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna,
from = {"ݨ", "ࣇ"},
to = {"ن", "ل"}
},
}
}
m["pht"] = {
"Phu Thai",
3626597,
"tai-swe",
"Thai",
}
m["phu"] = {
"Phuan",
3915665,
"tai",
}
m["phv"] = {
"Pahlavani",
7124567,
"ira",
}
m["phw"] = {
"Phangduwali",
12953036,
"sit-kie",
ancestors = "ybh",
}
m["pia"] = {
"Pima Bajo",
3388544,
"azc-pim",
"Latn",
}
m["pib"] = {
"Yine",
3135432,
"awd",
"Latn",
}
m["pic"] = {
"Pinji",
36296,
"bnt-tso",
"Latn",
}
m["pid"] = {
"Piaroa",
3382207,
nil,
"Latn",
}
m["pie"] = {
"Piro",
7198055,
"nai-kta",
"Latn",
}
m["pif"] = {
"Pingelapese",
36421,
"poz-mic",
"Latn",
}
m["pig"] = {
"Pisabo",
966883,
"sai-pan",
"Latn",
}
m["pih"] = {
"Pitcairn-Norfolk",
36554,
"crp",
"Latn",
ancestors = "en",
}
-- "pii" Pini was removed by the ISO as spurious
m["pij"] = {
"Pijao",
7193519,
"qfa-unc",
"Latn",
}
m["pil"] = {
"Yom",
36893,
"nic-yon",
"Latn",
}
m["pim"] = {
"Powhatan",
2270532,
"alg-eas",
"Latn",
}
m["pin"] = {
"Piame",
7190042,
"paa-sep",
"Latn",
}
m["pio"] = {
"Piapoco",
3382208,
"awd-nwk",
"Latn",
}
m["pip"] = {
"Pero",
2411063,
"cdc-wst",
"Latn",
}
m["pir"] = {
"Piratapuyo",
3389119,
"sai-tuc",
"Latn",
}
m["pis"] = {
"Pijin",
36699,
"crp",
"Latn",
ancestors = "en",
}
m["pit"] = {
"Pitta-Pitta",
6433116,
"aus-kar",
"Latn",
}
m["piu"] = {
"Pintupi-Luritja",
2591175,
"aus-pam",
"Latn",
}
m["piv"] = {
"Pileni",
2976736,
"poz-pnp",
"Latn",
}
m["piw"] = {
"Pimbwe",
3894132,
"bnt-mwi",
}
m["pix"] = {
"Piu",
7199578,
}
m["piy"] = {
"Piya-Kwonci",
3440492,
}
m["piz"] = {
"Pije",
3388339,
"poz-cln",
"Latn",
}
m["pjt"] = {
"Pitjantjatjara",
2982063,
"aus-pam",
"pjt-Latn",
}
m["pkb"] = {
"Kipfokomo",
7208693,
"bnt-sab",
"Latn",
}
m["pkc"] = {
"Baekje",
4841264,
"qfa-kor",
"Hani, Kana",
sort_key = {
Hani = "Hani-sortkey",
Kana = "Kana-sortkey"
},
}
m["pkg"] = {
"Pak-Tong",
3360711,
}
m["pkh"] = {
"Pankhu",
7130962,
"tbq-kuk",
}
m["pkn"] = {
"Pakanha",
954916,
"aus-pmn",
"Latn",
}
m["pko"] = {
"Pökoot",
36323,
"sdv-kln",
"Latn",
}
m["pkp"] = {
"Pukapukan",
36447,
"poz-pnp",
"Latn",
}
m["pkr"] = {
"Attapady Kurumba",
16835180,
"dra-imd",
"Mlym",
-- Mlym translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission)
}
m["pks"] = {
"Pakistan Sign Language",
22964057,
"sgn",
}
m["pkt"] = {
"Maleng",
6583562,
"mkh-vie",
}
m["pku"] = {
"Paku",
2932604,
"poz-bre",
"Latn",
}
m["pla"] = {
"Miani",
12952844,
"ngf-kau",
"Latn",
}
m["plb"] = {
"Polonombauk",
7225957,
"poz-vnn",
"Latn",
}
m["plc"] = {
"Central Palawano",
12953795,
"phi",
"Latn",
}
m["ple"] = {
"Palu'e",
2196866,
"poz-cet",
"Latn",
}
m["plg"] = {
"Pilagá",
2748259,
"sai-guc",
"Latn",
}
m["plh"] = {
"Paulohi",
7155331,
"poz-cma",
}
m["plj"] = {
"Polci",
3914383,
}
m["plk"] = {
"Kohistani Shina",
12953882,
"inc-shn",
"ur-Arab, Latn",
}
m["pll"] = {
"Shwe Palaung",
27941664,
"mkh-pal",
"Mymr",
}
m["pln"] = {
"Palenquero",
36665,
"crp",
"Latn",
ancestors = "es",
}
m["plo"] = {
"Oluta Popoluca",
5908687,
"nai-miz",
"Latn",
}
m["plq"] = {
"Palaic",
36582,
"ine-ana",
"Xsux",
}
m["plr"] = {
"Palaka",
36346,
"alv-snf",
"Latn",
}
m["pls"] = {
"San Marcos Tlalcoyalco Popoloca",
12641692,
"omq-pop",
"Latn",
}
m["plu"] = {
"Palikur",
3073448,
"awd",
"Latn",
}
m["plv"] = {
"Southwest Palawano",
15614922,
"phi",
"Latn",
}
m["plw"] = {
"Brooke's Point Palawano",
12953796,
"phi",
"Latn",
}
m["ply"] = {
"Bolyu",
3361723,
"mkh-pkn",
"Latn",
}
m["plz"] = {
"Paluan",
7128795,
nil,
"Latn",
}
m["pma"] = {
"Paamese",
3130286,
"poz-vnc",
"Latn",
}
m["pmb"] = {
"Pambia",
36267,
"znd",
"Latn",
}
m["pmd"] = {
"Pallanganmiddang",
7127734,
"aus-pam",
"Latn",
}
m["pme"] = {
"Pwaamèi",
3411152,
"poz-cln",
"Latn",
}
m["pmf"] = {
"Pamona",
3513320,
"poz-kal",
"Latn",
}
m["pmi"] = {
"Northern Pumi",
3403245,
"sit-qia",
}
m["pmj"] = {
"Southern Pumi",
3403246,
"sit-qia",
}
m["pmk"] = {
"Pamlico",
111366045,
"alg-eas",
"Latn",
}
m["pml"] = {
"Sabir",
636479,
"crp",
"Latn",
ancestors = "lij-old, pro, vec-old",
}
m["pmm"] = {
"Pol",
36408,
"bnt-kak",
"Latn",
}
m["pmn"] = {
"Pam",
7129017,
"alv-mbm",
}
m["pmo"] = {
"Pom",
7227178,
"poz-hce",
"Latn",
}
m["pmq"] = {
"Northern Pame",
3361762,
"omq",
"Latn",
}
m["pmr"] = {
"Manat",
3450824,
"ngf-sog",
"Latn",
}
m["pms"] = {
"Piedmontese",
15085,
"roa-git",
ancestors = "pms-old",
"Latn",
}
m["pmt"] = {
"Tuamotuan",
36763,
"poz-pep",
"Latn",
}
m["pmu"] = {
"Mirpur Panjabi",
6874480,
}
m["pmw"] = {
"Plains Miwok",
3391031,
"nai-utn",
"Latn",
}
m["pmx"] = {
"Poumei Naga",
12952910,
"tbq-anp",
}
m["pmy"] = {
"Papuan Malay",
12473446,
"crp",
"Latn",
ancestors = "ms",
}
m["pmz"] = {
"Southern Pame",
3361765,
"omq",
"Latn",
}
m["pna"] = {
"Punan Bah-Biau",
4842201,
"poz-bnn",
"Latn",
}
m["pnc"] = {
"Pannei",
7131391,
}
m["pnd"] = {
"Mpinda",
63308194,
"bnt-kmb",
}
m["pne"] = {
"Western Penan",
12953808,
"poz-swa",
"Latn",
}
m["png"] = {
"Pongu",
36282,
"nic-shi",
}
m["pnh"] = {
"Penrhyn",
3130301,
"poz-pep",
"Latn",
}
m["pni"] = {
"Aoheng",
4778608,
"poz",
"Latn",
}
m["pnj"] = {
"Pinjarup",
33103591,
}
m["pnk"] = {
"Paunaka",
2064378,
"awd",
"Latn",
}
m["pnl"] = {
"Paleni",
7127118,
"alv-wan",
"Latn",
}
m["pnm"] = {
"Punan Batu",
7259892,
}
m["pnn"] = {
"Pinai-Hagahai",
5638511,
"paa-pia",
"Latn",
}
m["pno"] = {
"Panobo",
3141869,
"sai-pan",
"Latn",
}
m["pnp"] = {
"Pancana",
7130204,
}
m["pnq"] = {
"Pana (West Africa)",
7129739,
"nic-gnn",
"Latn",
}
m["pnr"] = {
"Panim",
11732562,
"ngf-gum",
"Latn",
}
m["pns"] = {
"Ponosakan",
7227956,
"phi",
"Latn",
}
m["pnt"] = {
"Pontic Greek",
36748,
"grk",
"Grek, Latn, Cyrl",
ancestors = "gkm",
translit = {
Grek = "el-translit"
},
-- Grek display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["pnu"] = {
"Jiongnai Bunu",
56325,
"hmn",
}
m["pnv"] = {
"Pinigura",
10631927,
"aus-psw",
"Latn",
}
m["pnw"] = {
"Panyjima",
3913830,
"aus-nga",
"Latn",
}
m["pnx"] = {
"Phong-Kniang",
3914627,
"mkh",
}
m["pny"] = {
"Pinyin",
36250,
"nic-nge",
"Latn",
}
m["pnz"] = {
"Pana (Central Africa)",
36241,
"alv-mbm",
"Latn",
}
m["poc"] = {
"Poqomam",
36416,
"myn",
"Latn",
}
m["poe"] = {
"San Juan Atzingo Popoloca",
12953819,
"omq-pop",
"Latn",
}
m["pof"] = {
"Poke",
7208577,
"bnt-ske",
}
m["pog"] = {
"Potiguára",
56722,
"tup-gua",
"Latn",
}
m["poh"] = {
"Poqomchi'",
36414,
"myn",
"Latn",
}
m["poi"] = {
"Highland Popoluca",
7511556,
"nai-miz",
"Latn",
}
m["pok"] = {
"Pokangá",
25559704,
"sai-tuc",
"Latn",
}
m["pom"] = {
"Southeastern Pomo",
3396025,
"nai-pom",
"Latn",
}
m["pon"] = {
"Pohnpeian",
28422,
"poz-mic",
"Latn",
}
m["poo"] = {
"Central Pomo",
3396020,
"nai-pom",
"Latn",
}
m["pop"] = {
"Pwapwâ",
3411153,
"poz-cln",
"Latn",
}
m["poq"] = {
"Texistepec Popoluca",
5908707,
"nai-miz",
"Latn",
}
m["pos"] = {
"Sayula Popoluca",
5908722,
"nai-miz",
"Latn",
}
m["pot"] = {
"Potawatomi",
56749,
"alg",
"Latn",
}
m["pov"] = {
"Guinea-Bissau Creole",
33339,
"crp",
"Latn",
ancestors = "pt",
}
m["pow"] = {
"San Felipe Otlaltepec Popoloca",
25559598,
"omq-pop",
"Latn",
}
m["pox"] = {
"Polabian",
36741,
"zlw-lch",
"Latn",
}
m["poy"] = {
"Pogolo",
2429648,
"bnt-kil",
}
m["ppa"] = {
"Pao",
7132069,
}
m["ppe"] = {
"Papi",
7132809,
}
m["ppi"] = {
"Paipai",
56726,
"nai-yuc",
"Latn",
}
m["ppk"] = {
"Uma",
7881036,
"poz-kal",
"Latn",
}
m["ppl"] = {
"Pipil",
1186896,
"azc-nah",
"Latn",
strip_diacritics = {remove_diacritics = c.acute .. c.macron},
}
m["ppm"] = {
"Papuma",
7133239,
"poz-hce",
"Latn",
}
m["ppn"] = {
"Papapana",
3362757,
"poz-ocw",
"Latn",
}
m["ppo"] = {
"Folopa",
5464843,
"paa-teb",
"Latn",
}
m["ppq"] = {
"Pei",
7160903,
"paa-wal",
"Latn",
}
m["pps"] = {
"San Luís Temalacayuca Popoloca",
25559602,
"omq-pop",
"Latn",
}
m["ppt"] = {
"Pa",
3504757,
"paa-kae",
"Latn",
}
m["ppu"] = {
"Papora",
2094884,
"map",
"Latn",
}
m["pqa"] = {
"Pa'a",
3441315,
"cdc-wst",
}
m["pqm"] = {
"Malecite-Passamaquoddy",
3183144,
"alg-eas",
"Latn",
}
m["pra"] = {
"Prakrit",
192170,
"inc-mid",
"Brah, Deva, Gujr, Knda",
ancestors = "inc-ash",
translit = {
-- Brah translit in [[Module:scripts/data]]
Deva = "pra-Deva-translit",
Gujr = "sa-Gujr-translit",
Knda = "pra-Knda-translit",
},
strip_diacritics = {
-- FIXME: separate by script
from = {"ऎ", "ऒ", u(0x0946), u(0x094A), "य़", "ಯ಼", u(0x11071), u(0x11072), u(0x11073), u(0x11074)},
to = {"ए", "ओ", u(0x0947), u(0x094B), "य", "ಯ", "𑀏", "𑀑", u(0x11042), u(0x11044)}
} ,
}
m["prc"] = {
"Parachi",
2640637,
"ira-orp",
"Arab",
}
-- "prd" is not included, see [[WT:LT]]
m["pre"] = {
"Principense",
36520,
"crp",
"Latn",
ancestors = "pt",
}
m["prf"] = {
"Paranan",
7135433,
"phi",
}
m["prg"] = {
"Old Prussian",
35501,
"bat-wes",
"Latn",
}
m["prh"] = {
"Porohanon",
6583710,
"phi",
"Latn",
}
m["pri"] = {
"Paicî",
732131,
"poz-cln",
"Latn",
}
m["prk"] = {
"Parauk",
3363719,
"mkh-pal",
"Latn",
}
m["prl"] = {
"Peruvian Sign Language",
3915508,
"sgn",
}
m["prm"] = {
"Kibiri",
56745,
"qfa-iso", -- Papuan; isolate in Glottolog and Wurm; suggested grouping with Kiwaian languages by Ross based only on 1sg and 2sg pronouns
"Latn",
}
m["prn"] = {
"Prasuni",
32689,
"nur-nor",
}
m["pro"] = {
"Old Occitan",
2779185,
"roa-ocr",
"Latn",
sort_key = {remove_diacritics = c.cedilla},
}
-- "prp" is not included, see [[WT:LT]]
m["prq"] = {
"Perené Ashéninka",
3450601,
"awd",
"Latn",
}
m["prr"] = {
"Puri",
7261687,
}
-- "prs" is treated as "fa" (or as etymology-only), see [[WT:LT]]
m["prt"] = {
"Phai",
7180184,
"mkh",
}
m["pru"] = {
"Puragi",
7260800,
"ngf-sbh",
"Latn",
}
m["prw"] = {
"Parawen",
7136291,
"ngf-num",
"Latn",
}
m["prx"] = {
"Purik",
567905,
"sit-lab",
}
m["prz"] = {
"Providencia Sign Language",
3322084,
"sgn",
}
m["psa"] = {
"Asue Awyu",
11266334,
"ngf-awy",
"Latn",
}
m["psc"] = {
"Persian Sign Language",
7170221,
"sgn",
}
m["psd"] = {
"Plains Indian Sign Language",
2380124,
"sgn",
}
m["pse"] = {
"Central Malay", -- This does not mean the central of Malaysia. It is spoken in Indonesia.
3367751,
"poz-mly",
"Latn, Rjng",
}
m["psg"] = {
"Penang Sign Language",
4924925,
"sgn",
}
m["psh"] = {
"Southwest Pashayi",
16112270,
"inc-pas",
"fa-Arab",
}
m["psi"] = {
"Southeast Pashayi",
23713536,
"inc-pas",
"fa-Arab",
}
m["psl"] = {
"Puerto Rican Sign Language",
7258608,
"sgn-asl",
}
m["psm"] = {
"Pauserna",
2912846,
"tup-gua",
"Latn",
}
m["psn"] = {
"Panasuan",
7130113,
"poz",
}
m["pso"] = {
"Polish Sign Language",
3915194,
"sgn-gsl",
}
m["psp"] = {
"Philippine Sign Language",
3551357,
"sgn-fsl",
}
m["psq"] = {
"Pasi",
7142091,
"paa-sep",
"Latn",
}
m["psr"] = {
"Portuguese Sign Language",
3915472,
"sgn",
}
m["pss"] = {
"Kaulong",
3194294,
"poz-ocw",
}
m["psw"] = {
"Port Sandwich",
3398324,
"poz-vnc",
"Latn",
}
m["psy"] = {
"Piscataway",
3504233,
"alg-eas",
}
m["pta"] = {
"Pai Tavytera",
7124619,
"tup-gua",
"Latn",
}
m["pth"] = {
"Pataxó Hã-Ha-Hãe",
7144304,
}
m["pti"] = {
"Pintiini",
10632026,
"aus-pam",
"Latn",
}
m["ptn"] = {
"Patani",
7144242,
"poz-hce",
"Latn",
}
m["pto"] = {
"Zo'é",
8073148,
"tup-gua",
"Latn",
}
m["ptp"] = {
"Patep",
3368679,
"poz-ocw",
"Latn",
}
m["ptq"] = {
"Pattapu",
60785085,
"dra-tam",
}
m["ptr"] = {
"Piamatsina",
7190040,
"poz-vnn",
"Latn",
}
m["ptt"] = {
"Enrekang",
12953520,
nil,
"Latn",
}
m["ptu"] = {
"Bambam",
4853321,
"poz-ssw",
"Latn",
}
m["ptv"] = {
"Port Vato",
3398323,
"poz-vnc",
"Latn",
}
m["ptw"] = {
"Pentlatch",
2069475,
"sal",
"Latn",
}
m["pty"] = {
"Pathiya",
7144790,
"dra-mal",
}
m["pua"] = {
"Purepecha",
16114351,
"qfa-iso",
"Latn",
sort_key = {remove_diacritics = c.acute},
}
m["pub"] = {
"Purum",
6400562,
"tbq-kuk",
"Latn",
}
m["puc"] = {
"Punan Merap",
7259895,
"poz",
"Latn",
}
m["pud"] = {
"Punan Aput",
4782333,
"poz-swa",
"Latn",
}
m["pue"] = {
"Puelche",
33660,
}
m["puf"] = {
"Punan Merah",
7259894,
"poz-swa",
"Latn",
}
m["pug"] = {
"Phuie",
36375,
"nic-gnw",
}
m["pui"] = {
"Puinave",
3027918,
nil,
"Latn",
}
m["puj"] = {
"Punan Tubu",
7259896,
"poz-swa",
"Latn",
}
m["pum"] = {
"Puma",
33736,
"sit-kic",
}
m["puo"] = {
"Puoc",
6440803,
"mkh",
"Latn",
}
m["pup"] = {
"Pulabu",
7259163,
"ngf-rai",
"Latn",
}
m["puq"] = {
"Puquina",
1207739,
}
m["pur"] = {
"Puruborá",
7261619,
"tup",
}
m["put"] = {
"Putoh",
12953832,
"poz-swa",
"Latn",
}
m["puu"] = {
"Punu",
36401,
"bnt-sir",
"Latn",
}
m["puw"] = {
"Puluwat",
36397,
"poz-mic",
"Latn",
}
m["pux"] = {
"Puare",
3507983,
"paa-shi",
"Latn",
}
m["puy"] = {
"Purisimeño",
2967638,
"nai-chu",
"Latn",
}
m["pwa"] = {
"Pawaia",
7156099,
"qfa-dis", -- Papuan; isolate in Glottolog; unclassified in Pawley and Hammarström (2018); sister to the Teberan
-- languages by Usher (2020); tentatively TNG by Ross (2005)
"Latn",
}
m["pwb"] = {
"Panawa",
47385077,
"nic-jer",
"Latn",
ancestors = "jer",
}
m["pwg"] = {
"Gapapaiwa",
3095245,
"poz-ocw",
"Latn",
}
m["pwi"] = {
"Patwin",
3370188,
"nai-wtq",
"Latn",
}
m["pwm"] = {
"Molbog",
6895718,
"poz-san",
"Latn",
}
m["pwn"] = {
"Paiwan",
715755,
"map",
"Latn",
}
m["pwo"] = {
"Western Pwo",
7988202,
"kar",
"Mymr",
}
m["pwr"] = {
"Powari",
12640277,
"inc-hie",
"Deva",
}
m["pww"] = {
"Northern Pwo",
7058885,
"kar",
"Thai",
}
m["pxm"] = {
"Quetzaltepec Mixe",
6842374,
"nai-miz",
"Latn",
}
m["pye"] = {
"Pye Krumen",
11157382,
"kro-grb",
}
m["pym"] = {
"Fyam",
3914025,
"nic-ple",
"Latn",
}
m["pyn"] = {
"Poyanáwa",
3401023,
"sai-pan",
}
m["pys"] = {
"Paraguayan Sign Language",
7134698,
"sgn",
}
m["pyu"] = {
"Puyuma",
716690,
"map",
"Latn",
}
m["pyx"] = {
"Pyu (Myanmar)",
36259,
"sit",
}
m["pyy"] = {
"Pyen",
7262966,
"tbq-bis",
}
m["pzh"] = {
"Pazeh",
36435,
"map",
"Latn",
}
m["pzn"] = {
"Para Naga",
7133667,
"sit-aao",
}
return require("Module:languages").finalizeData(m, "language")
9xmaomlejc7niisru6nz176olp1xn3m
Mòideal:languages/data/3/q
828
16804
86331
2026-07-22T20:59:58Z
Altronic
4137
Copy from English Wiktionary
86331
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["qua"] = {
"Quapaw",
3412974,
"sio-dhe",
"Latn",
}
m["quc"] = {
"K'iche'",
36494,
"myn",
"Latn",
}
m["qui"] = {
"Quileute",
3414490,
"chi",
"Latn",
}
m["qum"] = {
"Sipakapense",
36589,
"myn",
"Latn",
}
m["qun"] = {
"Quinault",
3414522,
"sal",
"Latn",
}
m["quq"] = { -- should this continue to be considered separate language?
"Quinqui",
5908714,
nil,
"Latn",
}
m["quv"] = {
"Sacapulteco",
36412,
"myn",
"Latn",
}
m["qvy"] = {
"Queyu",
3414352,
"sit-qia",
}
m["qwc"] = {
"Classical Quechua",
35882,
"qwe",
"Latn",
}
m["qwm"] = {
"Kipchak",
1199226,
"trk-kip",
"Latn, Armn, Arab",
-- Armn translit in [[Module:scripts/data]]
}
m["qwt"] = {
"Kwalhioqua-Tlatskanai",
20641,
"ath-nor",
"Latn",
}
m["qxs"] = {
"Southern Qiang",
56563,
"sit-qia",
"Latn",
}
m["qya"] = {
"Quenya",
56383,
"art",
"Latn, Teng",
type = "appendix-constructed",
}
m["qyp"] = {
"Quiripi",
3414714,
"alg-eas",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
i9s9imcg7hv2qc29upjrvmd3atj9zm3
Mòideal:languages/data/3/all
828
16805
86332
2026-07-22T21:03:09Z
Altronic
4137
Copy from English Wiktionary
86332
Scribunto
text/plain
local string = string
local table = table
local find = string.find
local format = string.format
local gsub = string.gsub
local next = next
local require = require
local all_scripts
do
local scripts, n = {}, 0
for script in next, require("Module:scripts/data") do
n = n + 1
scripts[n] = script
end
table.sort(scripts)
all_scripts = table.concat(scripts, ",")
end
local modules = {
"Module:languages/data/2",
"Module:languages/data/exceptional"
}
local data = {}
for i = 1, 28 do
local mname = modules[i] or format("Module:languages/data/3/%c", 0x5E + i)
for key, value in next, require(mname) do
-- Handle the special script codes "All" and "Hants".
local value4 = value[4]
if value4 == "All" then
value[4] = all_scripts
elseif value4 and find(value4, "Hants", 1, true) then
value[4] = gsub(value4, "Hants", "Hani,Hant,Hans")
end
data[key] = value
end
for lkey, lvalue in next, require(mname .. "/extra") do
local lkey_data = data[lkey]
if lkey_data then
for key, value in next, lvalue do
lkey_data[key] = value
end
end
end
end
return data
dp1mff68q486yy7e09r7l87j501y1uk
Mòideal:languages/data/3/all/additional
828
16806
86333
2026-07-22T21:04:05Z
Altronic
4137
Copy from English Wiktionary
86333
Scribunto
text/plain
local modules = {
["Module:languages/data/all"] = true,
["Module:etymology languages/data"] = true,
["Module:families/data"] = true,
}
local m = {}
for mname in pairs(modules) do
for key, value in pairs(require(mname)) do
m[key] = value
end
end
return m
oup7bq6mylmv3metqqspl3nkkwtig92
Mòideal:documentation/doc
828
16807
86335
2026-07-22T21:06:06Z
Altronic
4137
Ghluais Altronic duilleag [[Mòideal:documentation/doc]] gu [[Mòideal:documentation/documentation]]
86335
wikitext
text/x-wiki
#REDIRECT [[Mòideal:documentation/documentation]]
m7h0w4js9y0zvlik0ub8apdc36shg2d
MediaWiki:Scribunto-doc-page-does-not-exist
8
16808
86336
2026-07-22T21:07:10Z
Altronic
4137
Update
86336
wikitext
text/x-wiki
{{documentation|from=$1|hr=below}}
ho8cvxtbvvh4bhvvxklaze9cbf4fxy8
MediaWiki:Scribunto-doc-page-show
8
16809
86337
2026-07-22T21:07:59Z
Altronic
4137
Copy from English Wiktionary
86337
wikitext
text/x-wiki
{{documentation|from=$1|hr=below}}
ho8cvxtbvvh4bhvvxklaze9cbf4fxy8
Mòideal:title/makeTitle
828
16810
86338
2026-07-22T21:09:59Z
Altronic
4137
Copy from English Wiktionary
86338
Scribunto
text/plain
local make_title = mw.title.makeTitle
--[==[
A modified version of {mw.title.makeTitle} that fixes a bug which causes certain inputs to generate title objects for the empty string. Such empty string titles do not represent a valid page, and are broken in various ways (e.g. attempting to access certain keys results in an error); see [[phab:T240678]].]==]
return function(ns, title, fragment, interwiki)
local title = make_title(ns, title, fragment, interwiki)
return title and title.prefixedText ~= "" and title or nil
end
coce82xngappecrexg1r1dsnope2mef
Mòideal:module categorization
828
16811
86339
2026-07-22T21:11:10Z
Altronic
4137
Copy from English Wiktionary
86339
Scribunto
text/plain
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Module')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.nsText ~= "Module" then
error(("This template should only be used in the Module namespace, not on page '%s'."):format(title.fullText))
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Module:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Module:User:") then
insert_cat("User sandbox modules")
elseif pagename:find("/sandbox") then
insert_cat("Sandbox modules")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(module_type.type .. " modules", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat(module_type.type .. " modules by script", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
end
return prefix .. " " .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "modules"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, mw.getContentLanguage():lcfirst(module_type.type) ..
" modules"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
49kgokr598jhf8kb74maya3v6r032gc
86340
86339
2026-07-22T21:12:48Z
Altronic
4137
fix
86340
Scribunto
text/plain
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Module')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.nsText ~= "Module" or title.ntText ~= "Mòideal" then
error(("This template should only be used in the Module namespace, not on page '%s'."):format(title.fullText))
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Module:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Module:User:") then
insert_cat("User sandbox modules")
elseif pagename:find("/sandbox") then
insert_cat("Sandbox modules")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(module_type.type .. " modules", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat(module_type.type .. " modules by script", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
end
return prefix .. " " .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "modules"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, mw.getContentLanguage():lcfirst(module_type.type) ..
" modules"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
cf9wuafe2nh1gktcplcqybrna18dmqf
86341
86340
2026-07-22T21:20:55Z
Altronic
4137
replace module names
86341
Scribunto
text/plain
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Mòideal')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.ntText ~= "Mòideal" then
error(("This template should only be used in the Module namespace, not on page '%s'."):format(title.fullText))
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Mòideal:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Mòideal:Cleachdaiche:") then
insert_cat("Mòidealan bogsa-gainmhich cleachdaiche")
elseif pagename:find("/sandbox") then
insert_cat("Mòidealan bogsa-gainmhich")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(module_type.type .. " mòidealan", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat(module_type.type .. " mòidealan le litreadh", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
end
return prefix .. " " .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "mòidealan"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, mw.getContentLanguage():lcfirst(module_type.type) ..
" mòidealan"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
3l3r1m5hdhioiyan8u8iqwar98kmbiw
86350
86341
2026-07-23T00:47:48Z
Altronic
4137
test
86350
Scribunto
text/plain
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Mòideal')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.ntText ~= "Mòideal" then
error(("This template should only be used in the Module namespace, not on page '%s'. '%s'"):format(title.fullText, title.ntText))
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Mòideal:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Mòideal:Cleachdaiche:") then
insert_cat("Mòidealan bogsa-gainmhich cleachdaiche")
elseif pagename:find("/sandbox") then
insert_cat("Mòidealan bogsa-gainmhich")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(module_type.type .. " mòidealan", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat(module_type.type .. " mòidealan le litreadh", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
end
return prefix .. " " .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "mòidealan"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, mw.getContentLanguage():lcfirst(module_type.type) ..
" mòidealan"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
4l9i6p3z0pmm7o9emcaq5g33dco2v5p
86351
86350
2026-07-23T00:49:56Z
Altronic
4137
86351
Scribunto
text/plain
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Mòideal')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.ntText ~= "Mòideal" then
error(("This template should only be used in the Module namespace, not on page '%s'"):format(title.fullText))
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Mòideal:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Mòideal:Cleachdaiche:") then
insert_cat("Mòidealan bogsa-gainmhich cleachdaiche")
elseif pagename:find("/sandbox") then
insert_cat("Mòidealan bogsa-gainmhich")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(module_type.type .. " mòidealan", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat(module_type.type .. " mòidealan le litreadh", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
end
return prefix .. " " .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "mòidealan"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, mw.getContentLanguage():lcfirst(module_type.type) ..
" mòidealan"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
8treui4eqzqgmz7123lc72jtl6l2r93
86353
86351
2026-07-23T00:59:15Z
Altronic
4137
fix
86353
Scribunto
text/plain
local export = {}
local put_module = "Module:parse utilities"
local rsplit = mw.text.split
local rfind = mw.ustring.find
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local keyword_to_module_type = {
common = "Language-specific utility",
utilities = "Language-specific utility",
headword = "Headword-line",
translit = "Transliteration",
infl = "Inflection",
inflection = "Inflection",
decl = "Inflection",
declension = "Inflection",
adecl = "Inflection",
conj = "Inflection",
conjugation = "Inflection",
noun = "Inflection",
nouns = "Inflection",
pronoun = "Inflection",
pronouns = "Inflection",
verb = "Inflection",
verbs = "Inflection",
adjective = "Inflection",
adjectives = "Inflection",
adj = "Inflection",
nominal = "Inflection",
nominals = "Inflection",
pron = "Pronunciation",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
stripdiacritics = "Diacritic-stripping",
sortkey = "Sortkey-generating",
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]].
local module_type_generates_lang_specific_cat = {
["Inflection"] = true,
["Data"] = true,
["Testcase"] = true,
}
-- If a module type is here, we will generate a lang-specific module-type category such as
-- [[:Category:Pali inflection modules]]. The value is a module that returns a function that fetches all the
-- languages that use a given module for transliteration/diacritic-stripping/sortkey generation.
local languages_from_module_name = {
["Transliteration"] = "Module:languages/byTranslitModule",
["Transliteration testcase"] = "Module:languages/byTranslitModule",
["Diacritic-stripping"] = "Module:languages/byStripDiacriticsModule",
["Sortkey-generating"] = "Module:languages/bySortkeyModule",
}
local module_type_patterns = {
{"/data%f[-/%z]", "Data"},
{"/testcases%f[-/%z]", function(typ)
if typ == "Pronunciation" then
return "Pronunciation testcase"
elseif typ == "Transliteration" then
return "Transliteration testcase"
else
return "Testcase"
end
end},
}
-- Split an argument on comma, but not comma followed by whitespace.
local function split_on_comma(val)
if val:find(",%s") then
return require(put_module).split_on_comma(val)
else
return rsplit(val, ",")
end
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function infer_lang_or_script_code(name)
local hyphen_parts = rsplit(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = table.concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = table.concat(hyphen_parts, "-", i + 1)
return obj, rest
end
end
return nil, nil
end
local function infer_lang_and_script_codes(name)
local objs = {}
while true do
local obj, rest = infer_lang_or_script_code(name)
if not obj then
return objs, name
end
if #objs > 0 and obj:getCode() == "to" then
-- skip 'to' in e.g. [[Module:ks-Arab-to-Deva-translit]]; it's not Tongan
else
table.insert(objs, obj)
end
name = rest
end
end
--[==[
Main entry point. Can be called from Lua or another module.
`return_raw` set to true makes function return a table of categories with {"[[Category:"} and {"]]"}
stripped away. It is used by [[Module:documentation]].
]==]
function export.categorize(frame, return_raw, noerror)
local categories = {}
local function insert_cat(cat, sortkey)
for _, existing_cat in ipairs(categories) do
if existing_cat.name == cat then
return
end
end
table.insert(categories, {name = cat, sort = sortkey})
end
local pagename
if frame.args[1] then
pagename = frame.args[1]
end
local args
if frame.args.is_template then
local params = {
[1] = {}, -- comma-separated list of languages; by default, inferred from module name
["type"] = {},
[2] = {alias_of = "type"},
["pagename"] = {}, -- for testing
["return_cats"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
pagename = pagename or args.pagename
local title
if pagename then
title = mw.title.new(pagename, 'Mòideal')
else
title = mw.title.getCurrentTitle()
-- Fuckme, sometimes this function is called with a faked frame and a title with the namespace already chopped out,
-- so this test cannot be done in that case.
if title.ntText ~= "Mòideal" then
--error(("This template should only be used in the Module namespace, not on page '%s'"):format(title.fullText))
-- temporarily remove this until i can find a way to stop it from throwing
-- a hissy fit because of the gaelic namespace names
end
pagename = title.fullText
end
local subpage = title.subpageText
local null_return_value = return_raw and {} or ""
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return null_return_value
end
local root_pagename
if subpage ~= pagename then
root_pagename = title.rootText
else
root_pagename = pagename
end
root_pagename = root_pagename:gsub("^Mòideal:", "")
-- Take the module type(s) from type= if given, or infer from the pagename.
local module_types
if args.type then
module_types = {}
local module_type_specs = split_on_comma(args.type)
for _, spec in ipairs(module_type_specs) do
local modtype, sortkey = spec:match("^(.-):(.*)$")
modtype = modtype or spec
sortkey = sortkey and sortkey:gsub("_", " ") or nil
table.insert(module_types, {type = modtype, sort = sortkey})
end
else
local module_type_keyword = root_pagename:match("[-%a]+[- ]([^/]+)%f[/%z]")
if not module_type_keyword then
if noerror then
return null_return_value
else
error(("Could not extract module type from root pagename '%s'"):format(root_pagename))
end
end
local module_type = keyword_to_module_type[module_type_keyword]
if not module_type then
if noerror then
return null_return_value
else
error(("Did not recognize inferred module-type keyword '%s' from root pagename '%s'"):format(
module_type_keyword, root_pagename))
end
end
module_types = {{type = module_type}}
end
-- Look for additional module type(s) inferred by pattern.
for _, pattern_spec in ipairs(module_type_patterns) do
local pattern, inferred_type = unpack(pattern_spec)
if rfind(pagename, pattern) then
local function insert_module_type(typ)
require("Module:table").insertIfNot(module_types, typ, {key = function(obj) return obj.type end})
end
if type(inferred_type) == "string" then
insert_module_type({type = inferred_type})
else
local addl_types = {}
for _, typ in ipairs(module_types) do
table.insert(addl_types, {type = inferred_type(typ.type), sort = typ.sort})
end
for _, typ in ipairs(addl_types) do
insert_module_type(typ)
end
end
end
end
-- If 1= specified, take the languages/scripts directly from there. Otherwise, (a) try to extract one or more
-- languages/scripts from the pagename (e.g. [[Module:uk-be-headword]] -> Ukrainian and Belarusian (languages);
-- [[Module:bho-Kthi-translit]] -> Bhojpuri (language) and Kaithi (script); [[Module:Deva-Kthi-translit]] ->
-- Devanagari and Kaithi (scripts)); and (b) if the specified or inferred module type(s) contain a type listed in
-- languages_from_module_name[], use the function referenced there to extract additional languages (i.e. all the
-- languages that use the module we are processing).
local inferred_objs
if args[1] then
inferred_objs = {}
for _, code in ipairs(rsplit(args[1], ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:module categorization]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
table.insert(inferred_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
table.insert(inferred_objs, obj)
end
end
else
inferred_objs = infer_lang_and_script_codes(root_pagename)
for _, module_type in ipairs(module_types) do
local languages_extractor = languages_from_module_name[module_type.type]
if languages_extractor then
local langs = require(languages_extractor)(root_pagename)
if langs then
for _, obj in ipairs(langs) do
require("Module:table").insertIfNot(inferred_objs, obj, {key = obj_code})
end
end
end
end
if #inferred_objs == 0 then
if noerror then
return null_return_value
else
error(("Could not infer any languages or scripts from root pagename '%s'"):format(root_pagename))
end
end
end
if pagename:find("^Mòideal:Cleachdaiche:") then
insert_cat("Mòidealan bogsa-gainmhich cleachdaiche")
elseif pagename:find("/sandbox") then
insert_cat("Mòidealan bogsa-gainmhich")
else
for _, module_type in ipairs(module_types) do
for _, obj in ipairs(inferred_objs) do
local function insert_overall_module_type_cat(sortkey)
if module_type.type ~= "-" then
insert_cat(module_type.type .. " mòidealan", module_type.sort or sortkey)
end
end
if obj == "-" then
insert_overall_module_type_cat()
else
if obj:hasType("script") and module_type.type ~= "-" then
insert_cat(module_type.type .. " mòidealan le litreadh", obj:getCanonicalName())
end
local function construct_lang_or_sc_cat(obj, suffix)
local prefix
if obj:hasType("language") then
prefix = obj:getFullName()
else
prefix = obj:getCategoryName()
end
return prefix .. " " .. suffix
end
insert_cat(construct_lang_or_sc_cat(obj, "mòidealan"), module_type.type)
insert_overall_module_type_cat(obj:getCanonicalName())
if module_type_generates_lang_specific_cat[module_type.type] then
insert_cat(construct_lang_or_sc_cat(obj, mw.getContentLanguage():lcfirst(module_type.type) ..
" mòidealan"))
end
end
end
end
end
for i, catspec in ipairs(categories) do
if catspec.sort then
categories[i] = ("%s|%s"):format(catspec.name, catspec.sort)
else
categories[i] = catspec.name
end
end
if args.return_cats then
return table.concat(categories, ",")
elseif return_raw then
return categories
else
for i, cat in ipairs(categories) do
categories[i] = "[[Category:" .. cat .. "]]"
end
return table.concat(categories)
end
end
--[==[Table used in the documentation to {{tl|module cat}}.]==]
function export.keyword_to_module_type_table()
local parts = {}
local function ins(text)
table.insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Keyword !! Inferred module type")
local keywords = {}
for k, v in pairs(keyword_to_module_type) do
table.insert(keywords, k)
end
table.sort(keywords)
for _, keyword in ipairs(keywords) do
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(keyword, keyword_to_module_type[keyword]))
end
ins("|}")
return table.concat(parts, "\n")
end
return export
1q9ckshotzl2zrckelgsufft53717xp
Mòideal:title/exists
828
16812
86343
2026-07-22T21:28:23Z
Altronic
4137
Copy from English Wiktionary
86343
Scribunto
text/plain
local title_is_title_module = "Module:title/isTitle"
local title_new_title_module = "Module:title/newTitle"
local error = error
local format = string.format
local pcall = pcall
local require = require
local type = type
local at_limit
local function is_title(...)
is_title = require(title_is_title_module)
return is_title(...)
end
local function new_title(...)
new_title = require(title_new_title_module)
return new_title(...)
end
local function exists(title)
return title.exists
end
--[==[
Receives a title object or string, and returns {true} if the page for the input title exists, or {false} if not.
By default, this function checks the {title.exists} key of the relevant title object, which increments the expensive function count. Normally, attempting to exceed the expensive function limit of 500 will result in an error being thrown, but this function will instead fall back to checking {title.content}, which does not increment the count. It is, however, considerably slower to check, and (unlike {title.exists}) will register as a page transclusion.
The {force_transclusion} flag may be set to force the use of transclusion ({title.content}) in all instances, which can be used to avoid incrementing the expensive function count; this is sometimes useful when making a large number of checks, as hitting the expensive function limit can be disruptive to other modules or templates.]==]
return function(title, force_transclusion)
local title_type = type(title)
if title_type == "string" then
title = new_title(title)
-- If it's an invalid string, return false.
if not title then
return false
end
elseif not is_title(title) then
error(format("bad argument #1 to 'title/exists' (title object or string expected, got %s)", title_type), 2)
end
if not (force_transclusion or at_limit) then
local success, result = pcall(exists, title)
if success then
return result
end
at_limit = true
end
return title.content ~= false
end
5kz0uhgst8887seua8722d5dz4kmw4o
MediaWiki:Clearyourcache
8
16813
86344
2026-07-22T22:53:57Z
Altronic
4137
Copy from English Wiktionary
86344
wikitext
text/x-wiki
<div style="border: 2px solid var(--wikt-palette-grey-9,gray); padding: 0.2em 0.5em; margin: 1em 0; font-size: smaller;" class="mw-collapsible mw-collapsed">
'''Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as [[MediaWiki:Common.css]], it will take 5-10 minutes before the changes take effect, even if you clear your cache.'''
<div class="mw-collapsible-content">
* '''Mozilla / Firefox / Safari:''' hold ''Shift'' while clicking ''Reload'', or press either ''Ctrl-F5'' or ''Ctrl-R'' (''Command-R'' on a Macintosh);
* '''Konqueror''' and '''Chrome:''' click ''Reload'' or press ''F5'';
* '''Opera:''' clear the cache in ''Tools → Preferences'';
* '''Internet Explorer:''' hold ''Ctrl'' while clicking ''Refresh,'' or press ''Ctrl-F5''.
</div>
</div>
{{documentation|hr=below}}
gd42w146crit2yf652zlilmq4ae6iut
Mòideal:languages/data/patterns
828
16814
86346
2026-07-23T00:43:59Z
Altronic
4137
Copy from English Wiktionary
86346
Scribunto
text/plain
-- Capture patterns used by [[Module:languages]] to prevent formatting from being disrupted while text is being processed.
-- Certain character sequences are substituted beforehand to make pattern matching more straightforward:
-- "\1" = "[["
-- "\2" = "]]"
return {
"((</?link>))\0", -- Special link formatting added by [[Module:links]]
"((<[^<>\1\2]+>))", -- HTML tag
"((\1[Ff][Ii][Ll][Ee]:[^\1\2]+\2))\0", -- File
"((\1[Ii][Mm][Aa][Gg][Ee]:[^\1\2]+\2))\0", -- Image
"((\1[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]:[^\1\2]+\2))\0", -- Category
"((\1[Cc][Aa][Tt]:[^\1\2]+\2))\0", -- Category
"((\1)[^\1\2|]+(\2))\0", -- Bare internal link
"((\1)[^\1\2|]-(|)[^\1\2]-(\2))\0", -- Piped internal link
"((%[https?://[^[%] ]+)[^[%]]*(%]))\0", -- External link
"((\127'\"`UNIQ%-%-%l+%-%x+%-+QINU`\"'\127))", -- Strip marker
"('*(''').-'*('''))", -- Bold
"('*('').-'*(''))" -- Italics
}
0asj561c1s2otij1k07cuhwmbvhewr9
Mòideal:etymology languages
828
16815
86347
2026-07-23T00:45:02Z
Altronic
4137
Copy from English Wiktionary
86347
Scribunto
text/plain
local export = {}
function export.makeObject(code)
local data = mw.loadData("Module:etymology languages/data")[code]
code = data and data.main_code or code
if not data then
require("Module:debug/track")("etymology languages/makeObject returned nil")
return nil
end
local EtymologyLanguage = require("Module:languages").getByCode(data.parent, nil, true, true)
local familyCode
if EtymologyLanguage:hasType("family") then
-- Substrates are treated as child languages of "undetermined".
if EtymologyLanguage:getCode() == "qfa-sub" then
EtymologyLanguage = require("Module:languages").getByCode("und")
end
-- True etymology-only families (e.g. "ira-old") still need to grab the family code.
familyCode = data.parent
end
-- Delete cached _type table to prevent the new object's hasType method from finding it via the metatable, as it only includes the parent's types.
EtymologyLanguage._type = nil
if not EtymologyLanguage then
return nil
end
EtymologyLanguage.__index = EtymologyLanguage
local lang = {_code = code}
-- Parent is full language.
if not EtymologyLanguage._stack then
-- Create stack, accessed with rawData metamethod.
lang._stack = {EtymologyLanguage._rawData, data}
lang._rawData = setmetatable({}, {
__index = function(t, k)
-- Data that isn't inherited from the parent.
local noInherit = {aliases = true, varieties = true, otherNames = true, main_code = true}
if noInherit[k] then
return lang._stack[#lang._stack][k]
end
-- Data that is appended by each generation.
local append = {type = true}
if append[k] then
local parts = {}
for i = 1, #lang._stack do
table.insert(parts, lang._stack[i][k])
end
if type(parts[1]) == "string" then
return table.concat(parts, ", ")
end
-- Otherwise, iterate down the stack, looking for a match.
else
local i = #lang._stack
while not lang._stack[i][k] and i > 1 do
i = i - 1
end
return lang._stack[i][k]
end
end,
-- Retain immutability (as writing to rawData will break functionality).
__newindex = function()
error("table from mw.loadData is read-only")
end
})
-- Non-etymological code is the parent code.
lang._fullCode = EtymologyLanguage._code
-- Parent is etymology language.
else
-- Copy over rawData and stack to the new object, and add new layer to stack.
lang._rawData = EtymologyLanguage._rawData
lang._stack = EtymologyLanguage._stack
table.insert(lang._stack, data)
-- Copy non-etymological code.
lang._fullCode = EtymologyLanguage._fullCode
end
lang._familyCode = familyCode
return setmetatable(lang, EtymologyLanguage)
end
function export.getByCode(code)
return export.makeObject(code)
end
function export.getByCanonicalName(name)
local byName = mw.loadData("Module:etymology languages/canonical names")
local code = byName and byName[name] or
byName[name:gsub(" [Ss]ubstrate$", "")] or
byName[name:gsub("^a ", "")] or
byName[name:gsub("^a ", ""):gsub(" [Ss]ubstrate$", "")]
if not code then
return nil
end
return export.makeObject(code)
end
return export
ez0ctupbado1gvfkxrt0qcno98t8da7
Mòideal:etymology languages/by code
828
16816
86348
2026-07-23T00:45:48Z
Altronic
4137
Copy from English Wiktionary
86348
Scribunto
text/plain
local export = {}
for code, data in pairs(require("Module:etymology languages/data")) do
export[code] = data[1]
end
return export
8j22cngeqbkzn3bn0capeyip8mnnqt3
Mòideal:etymology languages/data
828
16817
86349
2026-07-23T00:46:17Z
Altronic
4137
Copy from English Wiktionary
86349
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
----------------------------------------------------------------------------------------------------------------------
-- Afroasiatic varieties --
----------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
-- Berber varieties --
--------------------------------------------------------------------------------------
m["shi-med"] = {
"Medieval Tashelhit",
34152,
"shi",
}
-- Tuareg lects
m["thv"] = {
"Tamahaq",
56703,
"tmh",
}
m["ttq"] = {
"Tawellemmet",
56390,
"tmh",
}
m["taq"] = {
"Tamasheq",
4670066,
"tmh",
}
m["thz"] = {
"Tayert",
56388,
"tmh",
}
m["thv-ght"] = {
"Ghat",
47012900,
"thv",
}
--------------------------------------------------------------------------------------
-- Cushitic varieties --
--------------------------------------------------------------------------------------
-- Oromo varieties
m["hae"] = {
"Harar Oromo",
5330355,
"om",
aliases = {"Eastern Oromo"},
}
m["gax"] = {
"Borana",
2910610,
"om",
aliases = {"Southern Oromo"},
}
m["orc"] = {
"Orma",
2919128,
"om",
}
m["ssn"] = {
"Waata",
3501553,
"om",
}
--------------------------------------------------------------------------------------
-- Egyptian varieties --
--------------------------------------------------------------------------------------
-----------------------------------------------------
-- Ancient Egyptian varieties --
-----------------------------------------------------
m["egy-old"] = {
"Old Egyptian",
447117,
"egy",
}
m["egy-mid"] = {
"Middle Egyptian",
657330,
"egy",
aliases = {"Classical Egyptian"},
}
m["egy-nmi"] = {
"Neo-Middle Egyptian",
123735278,
"egy",
aliases = {"Égyptien de tradition", "Traditional Egyptian"},
}
m["egy-lat"] = {
"Late Egyptian",
1852329,
"egy",
}
-----------------------------------------------------
-- Coptic varieties --
-----------------------------------------------------
m["cop-akh"] = {
"Akhmimic Coptic",
125176464,
"cop",
aliases = {"Akhmimic"},
}
m["cop-boh"] = {
"Bohairic Coptic",
890733,
"cop",
aliases = {"Bohairic", "Memphitic Coptic", "Memphitic"},
}
m["cop-ggg"] = {
"Coptic Dialect G",
nil,
"cop",
aliases = {"Dialect G", "Mansuric Coptic", "Mansuric"},
}
m["cop-jjj"] = {
"Coptic Dialect J",
nil,
"cop",
}
m["cop-kkk"] = {
"Coptic Dialect K",
nil,
"cop",
}
m["cop-ppp"] = {
"Coptic Dialect P",
nil,
"cop",
aliases = {"Proto-Theban Coptic", "Palaeo-Theban Coptic"},
}
m["cop-fay"] = {
"Fayyumic Coptic",
1399115,
"cop",
aliases = {"Fayyumic", "Faiyumic Coptic", "Faiyumic", "Fayumic Coptic", "Fayumic",
"Bashmuric Coptic", "Bashmuric"},
}
m["cop-her"] = {
"Hermopolitan Coptic",
nil,
"cop",
aliases = {"Hermopolitan", "Coptic Dialect H", "Ashmuninic", "Ashmuninic Coptic"},
}
m["cop-lyc"] = {
"Lycopolitan Coptic",
nil,
"cop",
aliases = {
"Lycopolitan",
"Assiutic Coptic", "Asyutic Coptic", "Assiutic", "Asyutic",
"Lyco-Diospolitan Coptic", "Lyco-Diospolitan",
"Subakhmimic Coptic", "Subakhmimic"
},
}
m["cop-old"] = {
"Old Coptic",
115518040,
"cop",
}
m["cop-oxy"] = {
"Oxyrhynchite Coptic",
nil,
"cop",
aliases = {"Oxyrhynchite", "Mesokemic Coptic", "Mesokemic", "Middle Egyptian Coptic"},
}
m["cop-ply"] = {
"Proto-Lycopolitan Coptic",
nil,
"cop",
aliases = {"Coptic Dialect i", "Proto-Lyco-Diospolitan Coptic"},
}
m["cop-sah"] = {
"Sahidic Coptic",
2645851,
"cop",
aliases = {"Sahidic", "Saidic Coptic", "Saidic", "Thebaic Coptic", "Thebaic"},
}
--------------------------------------------------------------------------------------
-- Semitic varieties --
--------------------------------------------------------------------------------------
-----------------------------------------------------
-- Akkadian varieties --
-----------------------------------------------------
m["akk-old"] = {
"Old Akkadian",
nil,
"akk",
}
m["akk-obb"] = {
"Old Babylonian",
nil,
"akk",
}
m["akk-oas"] = {
"Old Assyrian",
nil,
"akk",
}
m["akk-mbb"] = {
"Middle Babylonian",
nil,
"akk",
}
m["akk-mas"] = {
"Middle Assyrian",
nil,
"akk",
}
m["akk-nbb"] = {
"Neo-Babylonian",
nil,
"akk",
}
m["akk-nas"] = {
"Neo-Assyrian",
nil,
"akk",
}
m["akk-lbb"] = {
"Late Babylonian",
nil,
"akk",
}
m["akk-stb"] = {
"Standard Babylonian",
nil,
"akk",
}
-----------------------------------------------------
-- Arabic varieties --
-----------------------------------------------------
m["jrb"] = {
"Judeo-Arabic",
37733,
"ar",
pseudo_families = "qfa-jew",
}
m["apc-leb"] = {
"Lebanese North Levantine Arabic",
1516642,
"apc",
aliases = {"Lebanese Arabic"},
}
m["apc-sle"] = {
"South Lebanese North Levantine Arabic",
14206590,
"apc",
aliases = {"South Lebanese Arabic"},
}
m["apc-nle"] = {
"North Lebanese North Levantine Arabic",
nil,
"apc",
aliases = {"North Lebanese Arabic"},
}
m["apc-syr"] = {
"Syrian North Levantine Arabic",
2143071,
"apc",
aliases = {"Syrian Arabic"},
}
m["apc-ale"] = {
"Aleppine North Levantine Arabic",
7056921,
"apc-syr",
aliases = {"Aleppo Arabic", "Aleppine Arabic"},
}
m["apc-dam"] = {
"Damascene North Levantine Arabic",
12237466,
"apc-syr",
aliases = {"Damascus Arabic", "Damascene Arabic"},
}
m["acm-khu"] = {
"Khuzestani Arabic",
1040944,
"acm",
}
-----------------------------------------------------
-- Aramaic varieties --
-----------------------------------------------------
m["arc-bib"] = {
"Biblical Aramaic",
843235,
"arc",
family = "sem-are",
}
m["arc-cpa"] = {
"Christian Palestinian Aramaic",
60790119,
"arc",
family = "sem-arw",
aliases = {"Melkite Aramaic", "Palestinian Syriac", "Syropalestinian Aramaic"},
}
m["arc-imp"] = {
"Imperial Aramaic",
7079491,
"arc",
aliases = {"Official Aramaic"},
}
m["arc-hat"] = {
"Hatran Aramaic",
3832926,
"arc",
family = "sem-are",
}
m["arc-jla"] = {
"Jewish Literary Aramaic",
105952842,
"arc",
pseudo_families = "qfa-jew",
}
m["arc-nab"] = {
"Nabataean Aramaic",
36178,
"arc",
}
m["arc-old"] = {
"Old Aramaic",
3398392,
"arc",
}
m["arc-pal"] = {
"Palmyrene Aramaic",
1510113,
"arc",
family = "sem-arw",
}
m["tmr"] = {
"Jewish Babylonian Aramaic",
33407,
"arc",
family = "sem-ase",
pseudo_families = "qfa-jew",
}
m["jpa"] = {
"Jewish Palestinian Aramaic",
948909,
"arc",
family = "sem-arw",
aliases = {"Galilean Aramaic"},
pseudo_families = "qfa-jew",
}
-----------------------------------------------------
-- Hebrew varieties --
-----------------------------------------------------
m["hbo"] = {
"Biblical Hebrew",
1982248,
"he",
aliases = {"Classical Hebrew"},
}
m["he-mis"] = {
"Mishnaic Hebrew",
1649362,
"he",
ancestors = "hbo",
}
m["he-med"] = {
"Medieval Hebrew",
2712572,
"he",
ancestors = "he-mis",
}
m["he-IL"] = {
"Israeli Hebrew",
8141,
"he",
}
----------------------------------------------------------------------------------------------------------------------
-- Ainu varieties --
----------------------------------------------------------------------------------------------------------------------
m["ain-hok"] = {
"Hokkaido Ainu",
20968488,
"ain",
aliases = {"Hokkaidō Ainu"},
}
m["ain-kur"] = {
"Kuril Ainu",
20967012,
"ain",
}
m["ain-sak"] = {
"Sakhalin Ainu",
20747371,
"ain",
}
----------------------------------------------------------------------------------------------------------------------
-- American indigenous varieties --
----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------
-- Inuit varieties --
-----------------------------------------------------
m["esi"] = {
"North Alaskan Inupiatun",
nil,
"ik"
}
m["esk"] = {
"Northwest Alaskan Inupiatun",
25559714,
"ik"
}
-----------------------------------------------------
-- Iroquoian varieties --
-----------------------------------------------------
m["iro-ohu"] = {
"Old Wendat",
nil,
"wdt",
}
m["iro-omo"] = {
"Old Mohawk",
nil,
"moh",
}
m["iro-oon"] = {
"Old Onondaga",
nil,
"ono",
}
-----------------------------------------------------
-- Tupi-Guarani varieties --
-----------------------------------------------------
-- Old Tupi varieties
m["tpw-lga"] = {
"Língua Geral Amazônica",
18275323,
"tpw",
aliases = {"Língua Geral"},
}
m["tpw-lgp"] = {
"Língua Geral Paulista",
2669239,
"tpw",
}
----------------------------------------------------------------------------------------------------------------------
-- Austroasiatic varieties --
----------------------------------------------------------------------------------------------------------------------
-- Khmer varieties
m["okz-ang"] = {
"Angkorian Old Khmer",
nil,
"okz",
wikipedia_article = "Khmer language#Historical periods",
}
m["okz-pre"] = {
"Pre-Angkorian Old Khmer",
nil,
"okz",
wikipedia_article = "Khmer language#Historical periods",
}
-- Central Nicobarese varieties
m["ncb-cam"] = {
"Camorta",
5026908,
"ncb",
aliases = {"Kamorta"},
}
m["ncb-kat"] = {
"Katchal",
17064263,
"ncb",
aliases = {"Tehnu"},
}
m["ncb-nan"] = {
"Nancowry",
6962504,
"ncb",
aliases = {"Nankwari"},
}
----------------------------------------------------------------------------------------------------------------------
-- Austronesian varieties --
----------------------------------------------------------------------------------------------------------------------
-- Malay and related varieties
m["ms-old"] = { -- this has the ISO code 'omy'
"Old Malay",
nil,
"ms",
}
m["ms-cla"] = {
"Classical Malay",
nil,
"ms",
ancestors = "ms-old",
}
m["pse-bsm"] = {
"Besemah",
nil,
"pse",
}
m["bew-kot"] = {
"Betawi Kota",
nil,
"bew",
aliases = {"Urban Betawi"}, -- in Jakarta
}
-- Philippine varieties
m["xnn"] = {
"Northern Kankanaey",
12953609,
"kne",
aliases = {"Northern Kankanay", "Northern Kankana-ey"},
}
m["tl-old"] = {
"Old Tagalog",
12967437,
"tl",
}
m["tl-cls"] = {
"Classical Tagalog",
nil,
"tl",
}
----------------------------------------------------------------------------------------------------------------------
-- Caucasian varieties --
----------------------------------------------------------------------------------------------------------------------
-- Kartvelian varieties
m["ka-mid"] = {
"Middle Georgian",
nil,
"ka",
ancestors = "oge",
}
----------------------------------------------------------------------------------------------------------------------
-- Dravidian varieties --
----------------------------------------------------------------------------------------------------------------------
m["ta-mid"] = {
"Middle Tamil",
20987434,
"ta",
}
m["kn-hav"] = {
"Havigannada",
24276369,
"kn",
}
m["kn-kun"] = {
"Kundagannada",
6444255,
"kn",
}
----------------------------------------------------------------------------------------------------------------------
-- Indo-European varieties --
----------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
-- Albanian varieties --
--------------------------------------------------------------------------------------
m["aln"] = {
"Gheg Albanian",
181037,
"sq",
aliases = {"Gheg"},
}
m["aae"] = {
"Arbëresh Albanian",
1075302,
"als",
aliases = {"Arbëreshë", "Arbëresh"},
}
m["aat"] = {
"Arvanitika Albanian",
29347,
"als",
aliases = {"Arvanitika"},
}
m["als"] = {
"Tosk Albanian",
180937,
"sq",
aliases = {"Tosk"},
}
--------------------------------------------------------------------------------------
-- Armenian varieties --
--------------------------------------------------------------------------------------
m["hyw"] = {
"Western Armenian",
180945,
"hy",
}
m["hye"] = {
"Eastern Armenian",
181059,
"hy",
}
--------------------------------------------------------------------------------------
-- Balto-Slavic varieties --
--------------------------------------------------------------------------------------
-------------------------------------------------------------------------
-- Baltic varieties --
-------------------------------------------------------------------------
m["bat-pro"] = {
"Proto-Baltic",
1703347,
"ine-bsl-pro",
}
m["bat-dni"] = {
"Dnieper Baltic",
4163178,
"bat-pro",
family = "bat",
aliases = {"Dniepr Baltic", "Dnieper-Oka Baltic", "Dniepr-Oka Baltic"},
}
m["bat-gol"] = {
"Golyad",
4142855,
"bat-dni",
aliases = {"Eastern Galindian", "East Galindian"},
}
-------------------------------------------------------------------------
-- Slavic varieties --
-------------------------------------------------------------------------
-----------------------------------------------------
-- Bulgarian varieties --
-----------------------------------------------------
m["cu-bgm"] = {
"Middle Bulgarian",
12294897,
"cu",
ancestors = "cu"
}
-----------------------------------------------------
-- Church Slavonic varieties --
-----------------------------------------------------
-- Old Moscow Church Slavonic deleted as it seems not distinct enough from Russian (Synodal) Church Slavonic.
m["zls-chs-ru"] = {
"Russian Church Slavonic",
21662400,
"zls-chs",
aliases = {"Synodal Church Slavonic", "New Moscow Church Slavonic", "Novomoskovsk Church Slavonic"},
}
m["zls-chs-uk"] = {
"Ukrainian Church Slavonic",
12153548,
"zls-chs",
aliases = {"Rusyn Church Slavonic", "Belarusian Church Slavonic"},
}
--[=[
-- Not sure about these yet.
m["zls-chs-bg"] = {
"Bulgarian Church Slavonic",
nil,
"zls-chs",
}
m["zls-chs-cs"] = {
"Czech Church Slavonic",
nil,
"zls-chs",
}
m["zls-chs-hr"] = {
"Croatian Church Slavonic",
nil,
"zls-chs",
}
m["zls-chs-mk"] = {
"Macedonian Church Slavonic",
nil,
"zls-chs",
}
m["zls-chs-ro"] = {
"Romanian Church Slavonic",
nil,
"zls-chs",
}
m["zls-chs-sr"] = {
"Serbian Church Slavonic",
nil,
"zls-chs",
}
]=]
-----------------------------------------------------
-- Czech varieties --
-----------------------------------------------------
m["cs-ear"] = {
"Early Modern Czech",
nil,
"cs",
ancestors = "zlw-ocs"
}
-----------------------------------------------------
-- East Slavic varieties --
-----------------------------------------------------
m["zle-ops"] = {
"Old Pskovian",
4167885,
"zle-ono",
}
m["zle-mru"] = {
"Middle Russian",
35228,
"ru",
"Cyrs",
ancestors = "orv",
translit = "ru-translit",
strip_diacritics = {
Cyrs = {
remove_diacritics = c.grave .. c.acute .. c.diaer,
},
},
}
m["zle-mbe"] = {
"Middle Belarusian",
13211,
"zle-ort",
ancestors = "zle-ort",
}
m["zle-muk"] = {
"Middle Ukrainian",
13211,
"zle-ort",
ancestors = "zle-ort",
}
m["uk-CA"] = {
"Canadian Ukrainian",
4161010,
"uk",
}
m["crp-cpr-kya"] = {
"Kyakhta Chinese Pidgin Russian",
1062960,
"crp-cpr",
}
-----------------------------------------------------
-- Polish varieties --
-----------------------------------------------------
m["zlw-mpl"] = {
"Middle Polish",
402878,
"pl",
ancestors = "zlw-opl",
strip_diacritics = {
remove_diacritics = c.acute,
remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ó", "ó", "Ś", "ś", "Ź", "ź"},
},
}
m["pl-gre"] = {
"Greater Polish",
4106789,
"pl",
}
m["pl-les"] = {
"Lesser Polish",
361709,
"pl",
}
m["pl-mas"] = {
"Masovian Polish",
4274559,
"pl",
}
m["pl-gor"] = {
"Goral",
452889,
"pl",
}
-----------------------------------------------------
-- Serbo-Croatian varieties --
-----------------------------------------------------
m["ckm"] = {
"Chakavian Serbo-Croatian",
337565,
"sh",
aliases = {"Čakavian"},
}
m["kjv"] = {
"Kajkavian Serbo-Croatian",
838165,
"sh",
}
m["sh-tor"] = { -- Linguist code srp-tor
"Torlakian Serbo-Croatian",
1078803,
"sh",
aliases = {"Torlak"},
}
--------------------------------------------------------------------------------------
-- Celtic varieties --
--------------------------------------------------------------------------------------
-----------------------------------------------------
-- Brythonic varieties --
-----------------------------------------------------
m["bry-ear"] = {
"Early Brythonic",
nil,
"cel-bry-pro",
}
m["bry-lat"] = {
"Late Brythonic",
nil,
"cel-bry-pro",
}
-----------------------------------------------------
-- Gaulish varieties --
-----------------------------------------------------
m["xcg"] = {
"Cisalpine Gaulish",
3832927,
"cel-gau",
}
m["xtg"] = {
"Transalpine Gaulish",
29977,
"cel-gau",
}
-----------------------------------------------------
-- Welsh varieties --
-----------------------------------------------------
m["cy-nor"] = {
"North Wales Welsh",
13127692,
"cy",
aliases = {"North Walian Welsh", "Northern Welsh"},
}
m["cy-sou"] = {
"South Wales Welsh",
13127689,
"cy",
aliases = {"South Walian Welsh", "Southern Welsh"},
}
--------------------------------------------------------------------------------------
-- Germanic varieties --
--------------------------------------------------------------------------------------
-- Proto-West Germanic varieties
m["frk"] = {
"Frankish",
10860505,
"gmw-pro",
family = "gmw-frk",
aliases = {"Old Frankish"},
}
m["gem-sue"] = {
"Suevic",
134600275,
"gmw-pro",
aliases = {"Suebian"},
}
m["gmw-afr-pro"] = {
"Proto-Anglo-Frisian",
134603379,
"gmw-nsg-pro",
family = "gmw-afr",
}
m["gmw-nsg-pro"] = {
"Proto-North Sea Germanic",
134603374,
"gmw-pro",
family = "gmw-nsg",
aliases = {"Proto-Ingvaeonic"},
}
-----------------------------------------------------
-- Dutch varieties --
-----------------------------------------------------
m["nl-BE"] = {
"Belgian Dutch",
34147,
"nl",
aliases = {"Flemish", "Flemish Dutch", "Southern Dutch"},
}
-----------------------------------------------------
-- English and Scots varieties --
-----------------------------------------------------
-- English varieties
m["en-AU"] = {
"Australian English",
44679,
"en",
}
m["en-GB"] = {
"British English",
7979,
"en",
}
m["en-GB-SCT"] = {
"Scottish English",
1553250,
"en-GB",
}
m["en-GB-WLS"] = {
"Welsh English",
2363292,
"en-GB",
}
m["en-IM"] = {
"Manx English",
6753295,
"en-GB",
}
m["en-aae"] = {
"Australian Aboriginal English",
783347,
"en-AU",
}
m["en-ear"] = {
"Early Modern English",
1472196,
"en",
ancestors = "enm",
aliases = {"Early New English"},
}
m["en-geo"] = {
"Geordie",
653421,
"en",
ancestors = "enm-nor",
}
m["en-IE"] = { -- FIXME: "IE" doesn't cover Northern Ireland
"Irish English",
665624,
"en",
}
m["en-uls"] = {
"Ulster English",
6840826,
"en-IE",
}
m["en-GB-NIR"] = {
"Northern Irish English",
6840826, -- actually the code for Ulster English
"en-uls",
}
m["en-NNN"] = { -- NA = Namibia; NNN is NATO 3-letter code for North America
"North American English",
7053766,
"en",
ietf_subtag = "en-021" -- 021 = UN M49 code for "Northern America" (i.e. North America wihout Central America or the Caribbean)
}
m["en-US"] = {
"American English",
7976,
"en-NNN",
}
m["en-NZ"] = {
"New Zealand English",
44661,
"en"
}
m["en-ZA"] = {
"South African English",
1156228,
"en"
}
m["en-US-CA"] = {
"California English",
1026812,
"en-US",
}
m["en-CA"] = {
"Canadian English",
44676,
"en-US",
}
m["en-HK"] = {
"Hong Kong English",
1068863,
"en",
}
m["en-IN"] = {
"Indian English",
1348800,
"en",
}
m["pld"] = {
"Polari",
1359130,
"en",
}
-- Scots varieties
m["sco-ins"] = {
"Insular Scots",
16919205,
"sco",
}
m["sco-uls"] = {
"Ulster Scots",
201966,
"sco",
}
m["sco-nor"] = {
"Northern Scots",
16928150,
"sco",
}
m["sco-sou"] = {
"Southern Scots",
7570457,
"sco",
aliases = {"South Scots", "Borders Scots"},
}
-- Middle English varieties
m["enm-esc"] = { -- Part of Middle English until it developed into Middle Scots.
"Early Scots",
5326738,
"enm",
ancestors = "enm-nor",
aliases = {"Old Scots", "Scottish Middle English"},
}
m["enm-emi"] = {
"East Midland Middle English",
134238810,
"enm",
ancestors = "ang-ang", -- Technically ang-mer, but attested Mercian is mostly WM IIRC
}
m["enm-ken"] = {
"Kentish Middle English",
134238532,
"enm",
ancestors = "ang-ken",
}
m["enm-nor"] = {
"Northern Middle English",
134238541,
"enm",
ancestors = "ang-nor",
}
m["enm-sou"] = {
"Southern Middle English",
134238528,
"enm",
ancestors = "ang-wsx",
}
m["enm-wmi"] = {
"West Midland Middle English",
134238824,
"enm",
ancestors = "ang-mer",
}
-- Old English varieties
-- Includes both Mercian and Northumbrian.
m["ang-ang"] = {
"Anglian Old English",
121142917,
"ang",
}
m["ang-ken"] = {
"Kentish Old English",
11687485,
"ang",
}
m["ang-mer"] = {
"Mercian Old English",
602072,
"ang-ang",
}
m["ang-nor"] = {
"Northumbrian Old English",
1798915,
"ang-ang",
}
m["ang-wsx"] = {
"West Saxon Old English",
2658603,
"ang",
}
-----------------------------------------------------
-- High German varieties --
-----------------------------------------------------
-- (modern) German varieties
m["de-AT"] = {
"Austrian German",
306626,
"de",
}
m["de-AT-vie"] = {
"Viennese German",
56474,
"de-AT",
}
m["de-CH"] = {
"Switzerland German",
1366643,
"de",
aliases = {"Schweizer Hochdeutsch", "Swiss Standard German", "Swiss High German"},
}
m["de-bal"] = {
"Baltic German",
15785413,
"de",
}
m["de-ear"] = {
"Early New High German",
1472199,
"de",
ancestors = "gmh",
aliases = {"Early Modern High German"},
}
m["ksh"] = {
"Kölsch",
4624,
"gmw-cfr",
}
m["pfl"] = {
"Palatine German",
23014,
"gmw-rfr",
aliases = {"Pfälzisch", "Pälzisch", "Palatinate German"},
}
m["sli"] = {
"Silesian East Central German",
152965,
"gmw-ecg",
aliases = {"Silesian"},
}
m["sxu"] = {
"Upper Saxon German",
699284,
"gmw-ecg",
}
-- Old High German varieties
m["lng"] = {
"Lombardic",
35972,
"goh",
}
-- Alemannic German varieties
m["gsw-low"] = {
"Low Alemannic German",
503724,
"gsw",
}
m["gsw-FR-als"] = {
"Alsatian Alemannic German",
8786,
"gsw-low",
}
m["gsw-hig"] = {
"High Alemannic German",
503728,
"gsw",
}
m["gsw-hst"] = {
"Highest Alemannic German",
687538,
"gsw",
}
m["wae"] = {
"Walser German",
680517,
"gsw-hst",
}
-----------------------------------------------------
-- Low German varieties --
-----------------------------------------------------
m["nds-de"] = {
"German Low German",
25433,
"nds",
ietf_subtag = "nds-DE", -- should we make this the actual code?
wikimedia_codes = "nds",
}
m["nds-nl"] = {
"Dutch Low Saxon",
516137,
"nds",
ietf_subtag = "nds-NL", -- should we make this the actual code?
wikimedia_codes = "nds-nl",
}
m["act"] = {
"Achterhoeks",
153627,
"nds-nl",
aliases = {"Achterhoek", "Achterhooks"},
}
m["drt"] = {
"Drents",
2736709,
"nds-nl",
aliases = {"Drèents", "Dreins", "Dreints", "Drints"},
}
m["frs"] = {
"East Frisian Low German",
149208,
"nds-de",
aliases = {"East Frisian", "East Frisian Low Saxon"},
}
m["gos"] = {
"Gronings",
508854,
"nds-nl",
aliases = {"Grunnegs", "Grönnegs"},
}
m["nds-lpr"] = {
"Low Prussian",
33982,
"nds-de",
}
m["sdz"] = {
"Sallands",
3436668,
"nds-nl",
aliases = {"Sallaans", "Sallaands"},
}
m["stl"] = {
"Stellingwerfs",
506010,
"nds-nl",
aliases = {"Stellingwarfs"},
}
m["twd"] = {
"Twents",
497363,
"nds-nl",
aliases = {"Tweants"},
}
m["vel"] = {
"Veluws",
2484810,
"nds-nl",
}
m["wep"] = {
"Westphalian",
505655,
"nds-de",
aliases = {"Westfalish", "Westphalien"},
}
-----------------------------------------------------
-- North Frisian varieties --
-----------------------------------------------------
m["frr-ins"] = {
"Insular North Frisian",
110629610,
"frr",
}
m["frr-fam"] = {
"Föhr-Amrum North Frisian",
110629601,
"frr-ins",
}
m["frr-foh"] = {
"Föhr North Frisian",
28185,
"frr-fam",
aliases = {"Föhr Frisian", "Fering",
"Ferring", -- Glottolog
},
varieties = {"Aasdring", "Weesdring"},
}
m["frr-amr"] = {
"Amrum North Frisian",
28192,
"frr-fam",
aliases = {"Amrum Frisian", "Amrum", "Öömrang"},
}
m["frr-hel"] = {
"Heligoland North Frisian",
28086,
"frr-ins",
aliases = {"Heligoland Frisian", "Halunder", "Heligolandic Frisian", "Heligolandic North Frisian",
"Helgoland Frisian", "Helgoland North Frisian", "Helgoland"},
}
m["frr-syl"] = {
"Sylt North Frisian",
28181,
"frr-ins",
aliases = {"Sylt Frisian", "Söl'ring",
"Sölreng", -- Glottolog
},
}
m["frr-mai"] = {
"Mainland North Frisian",
110629626,
"frr",
}
m["frr-hal"] = {
"Halligen North Frisian",
28177,
"frr-mai",
aliases = {"Halligen Frisian", "Halifreesk", "Hallingen Frisian", "Hallingen North Frisian",
"Hallingen", -- Glottolog
},
}
m["frr-moo"] = {
"Mooring North Frisian",
28187,
"frr-mai",
aliases = {"Bökingharde North Frisian", "Bökingharde Frisian", "Böökinghiirder frasch",
"Mooring", "Moring",
},
varieties = {{"East Mooring", "Ostermooring"}, {"West Mooring", "Westermooring"}},
}
m["frr-kar"] = {
"Karrharde North Frisian",
28191,
"frr-mai",
aliases = {"Karrharde Frisian", "Karrharder",
},
}
m["frr-goe"] = {
-- Technically this refers to three adjacent dialects (Northern, Central and Southern), the latter of which went
-- extinct in 1980-1981. As a result, Glottolog speaks of "Norder-Mittelgoesharde", referring to the remaining two.
"Goesharde North Frisian",
28183,
"frr-mai",
aliases = {"Norder-Mittelgoesharde North Frisian", "Norder-Mittelgoesharde Frisian", "Norder-Mittelgoesharde",
"Goesharde Frisian", "Goesharde", "Gooshiirder",
},
}
m["frr-wie"] = {
"Wiedingharde North Frisian",
28171,
"frr-mai",
aliases = {"Wiedingharde Frisian", "Wiedingharde", "Wiringhiirder freesk",
},
}
-----------------------------------------------------
-- Old Norse varieties --
-----------------------------------------------------
m["non-grn"] = {
"Greenlandic Norse",
855236,
"non-own",
}
m["non-oen"] = {
"Old East Norse",
10498031,
"non",
ancestors = "non",
}
m["non-own"] = {
"Old West Norse",
2377483,
"non",
ancestors = "non",
}
-----------------------------------------------------
-- Old Swedish varieties --
-----------------------------------------------------
m["gmq-osw-lat"] = {
"Late Old Swedish",
10723594,
"gmq-osw",
ancestors = "gmq-osw",
}
--------------------------------------------------------------------------------------
-- Greek varieties --
--------------------------------------------------------------------------------------
m["qsb-grc"] = {
"Pre-Greek",
965052,
"und",
family = "qfa-sub",
}
m["grc-aeo"] = {
"Aeolic Greek",
406373,
"grc",
aliases = {"Lesbic Greek", "Lesbian Greek", "Aeolian Greek"},
}
m["grc-arc"] = {
"Arcadian Greek",
nil,
"grc-arp",
}
m["grc-arp"] = {
"Arcadocypriot Greek",
499602,
"grc",
}
m["grc-att"] = {
"Attic Greek",
506588,
"grc",
}
m["grc-boi"] = {
"Boeotian Greek",
406373,
"grc-aeo",
}
m["grc-cyp"] = {
"Cypriot Ancient Greek", -- to distinguish from Cypriot Greek below
nil,
"grc-arp",
}
m["grc-dor"] = {
"Doric Greek",
285494,
"grc",
}
m["grc-ela"] = {
"Elean Greek",
nil,
"grc",
}
m["grc-epi"] = {
"Epic Greek",
990062,
"grc",
aliases = {"Homeric Greek"},
}
m["grc-ion"] = {
"Ionic Greek",
504165,
"grc",
}
m["grc-koi"] = {
"Koine Greek",
107358,
"grc",
ancestors = "grc-att",
aliases = {"Hellenistic Greek"},
}
m["grc-kre"] = {
"Cretan Ancient Greek", -- to distinguish from Cretan Greek below
nil,
"grc-dor",
}
m["grc-opl"] = {
"Opuntian Locrian",
nil,
"grc",
}
m["grc-ozl"] = {
"Ozolian Locrian",
nil,
"grc",
}
m["grc-pam"] = {
"Pamphylian Greek",
2271793,
"grc",
}
m["grc-ths"] = {
"Thessalian Greek",
406373,
"grc-aeo",
}
m["gkm"] = {
"Byzantine Greek",
36387,
"grc",
ancestors = "grc-koi",
aliases = {"Medieval Greek"},
}
m["el-cyp"] = {
"Cypriot Greek",
245899,
"el",
aliases = {"Cypriotic Greek"},
}
m["el-pap"] = {
"Paphian Greek",
nil,
"el",
}
m["el-crt"] = {
"Cretan Greek",
588306,
"el",
}
m["el-kth"] = {
"Katharevousa",
35961,
"el",
"Polyt",
ancestors = "gkm",
aliases = {"Katharevousa Greek"},
-- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]]
}
m["el-kal"] = {
"Kaliarda",
12878658,
"el",
}
--------------------------------------------------------------------------------------
-- Indo-Iranian varieties --
--------------------------------------------------------------------------------------
-------------------------------------------------------------------------
-- Indo-Aryan varieties --
-------------------------------------------------------------------------
-- reconstructed intermediate stages
m["pra-pro"] = {
"Proto-New Indo-Aryan",
nil,
"pra",
}
m["inc-ash-pro"] = {
"Proto-Middle Indo-Aryan",
nil,
"inc-ash",
}
m["inc-mit"] = {
"Mitanni",
1986700,
"inc-pro",
}
m["bra-old"] = {
"Old Braj",
nil,
"bra",
}
-- Apabhramsas
m["inc-aav"] = {
"Avahattha",
nil,
"inc-apa",
aliases = {"Abahattha"},
}
m["inc-asa"] = {
"Sauraseni Apabhramsa",
nil,
"inc-apa",
}
m["inc-agu"] = {
"Gurjara Apabhramsa",
nil,
"inc-apa",
}
m["inc-aka"] = {
"Kasmiri Apabhramsa",
nil,
"inc-apa",
}
m["inc-ama"] = {
"Maharastri Apabhramsa",
nil,
"inc-apa",
}
m["inc-ata"] = {
"Takka Apabhramsa",
nil,
"inc-apa",
}
m["inc-avr"] = {
"Vracada Apabhramsa",
nil,
"inc-apa",
}
-- Assamese varieties
m["as-bkm"] = {
"Barpetia Kamrupi Assamese",
30642960,
"as",
}
m["as-nkm"] = {
"Nalbaria Kamrupi Assamese",
85787678,
"as",
}
m["as-pkm"] = {
"Palasbaria Kamrupi Assamese",
nil,
"as",
}
-- Bengali varieties
m["bn-dvn"] = {
"Dhakaiya Vaṅga Bengali",
48726851,
"bn", -- Eastern Bengali variety
}
m["bn-nvn"] = {
"Noakhailla Vaṅga Bengali",
107548681,
"bn", -- Eastern Bengali variety
}
-- Dhivehi varieties
m["dv-old"] = {
"Old Dhivehi",
117790875,
"dv",
}
m["dv-mul"] = {
"Mulaku Dhivehi",
nil,
"dv",
aliases = {"Mulaku Divehi", "Mulaku Bas"},
}
m["dv-huv"] = {
"Huvadhu Dhivehi",
nil,
"dv",
aliases = {"Huvadhu Divehi", "Huvadhu Bas"},
}
m["dv-add"] = {
"Addu Dhivehi",
nil,
"dv",
aliases = {"Addu Divehi", "Addu Bas"},
}
-- Gujarati varieties
m["gu-kat"] = {
"Kathiyawadi",
nil,
"gu",
aliases = {"Kathiyawadi Gujarati", "Kathiawadi"},
}
m["gu-lda"] = {
"Lisan ud-Dawat Gujarati",
nil,
"gu",
aliases = {"Lisan ud-Dawat", "LDA"},
}
-- Hindi varieties
m["hi-mum"] = {
"Bombay Hindi",
3543151,
"hi",
aliases = {"Mumbai Hindi", "Bambaiyya Hindi"},
}
m["hi-mid"] = {
"Middle Hindi",
nil,
"inc-ohi",
ancestors = "inc-ohi",
}
-- Konkani varieties
m["kok-mid"] = {
"Middle Konkani",
nil,
"kok",
aliases = {"Medieval Konkani"},
}
m["kok-old"] = {
"Old Konkani",
nil,
"kok",
aliases = {"Early Konkani"},
}
-- Prakrits
m["pra-ard"] = {
"Ardhamagadhi Prakrit",
35217,
"pra",
aliases = {"Ardhamagadhi"},
}
m["pra-hel"] = {
"Helu Prakrit",
15080869,
"pra",
aliases = {"Elu", "Elu Prakrit", "Helu"},
}
m["pra-kha"] = {
"Khasa Prakrit",
nil,
"pra",
aliases = {"Khasa"},
}
m["pra-mag"] = {
"Magadhi Prakrit", -- Not to be confused with Magahi (mag)
2652214,
"pra",
aliases = {"Magadhi"},
}
m["pra-mah"] = {
"Maharastri Prakrit",
2586773,
"pra",
aliases = {"Maharashtri Prakrit", "Maharastri", "Maharashtri"},
}
m["pra-pai"] = {
"Paisaci Prakrit",
2995607,
"pra-sau",
aliases = {"Paisaci", "Paisachi"},
ancestors = "pra-sau"
}
m["pra-sau"] = {
"Sauraseni Prakrit",
2452885,
"pra",
aliases = {"Sauraseni", "Shauraseni"},
}
m["pra-ava"] = {
"Avanti",
nil,
"pra",
aliases = {"Avanti Prakrit"},
}
m["pra-pra"] = {
"Pracya",
nil,
"pra",
aliases = {"Pracya Prakrit"},
}
m["pra-bah"] = {
"Bahliki",
nil,
"pra",
aliases = {"Bahliki Prakrit"},
}
m["pra-dak"] = {
"Daksinatya",
nil,
"pra",
aliases = {"Daksinatya Prakrit"},
}
m["pra-sak"] = {
"Sakari",
nil,
"pra",
aliases = {"Sakari Prakrit"},
}
m["pra-can"] = {
"Candali",
nil,
"pra",
aliases = {"Candali Prakrit"},
}
m["pra-sab"] = {
"Sabari",
nil,
"pra",
aliases = {"Sabari Prakrit"},
}
m["pra-abh"] = {
"Abhiri",
nil,
"pra",
aliases = {"Abhiri Prakrit"},
}
m["pra-dra"] = {
"Dramili",
nil,
"pra",
aliases = {"Dramili Prakrit"},
}
m["pra-odr"] = {
"Odri",
nil,
"pra",
aliases = {"Odri Prakrit"},
}
-- Punjabi varieties
m["pnb"] = {
"Western Punjabi",
58635,
"pa",
"pa-Arab",
}
-- Sanskrit varieties
m["vsn"] = {
"Vedic Sanskrit",
36858,
"sa",
}
m["cls"] = {
"Classical Sanskrit",
9333703,
"sa",
}
m["sa-bhs"] = {
"Buddhist Hybrid Sanskrit",
248758,
"sa",
}
m["sa-bra"] = {
"Brahmanic Sanskrit",
139822891,
"vsn",
}
m["sa-epi"] = {
"Epic Sanskrit",
56702805,
"cls",
}
m["sa-neo"] = {
"New Sanskrit",
nil,
"sa",
}
m["sa-rig"] = {
"Rigvedic Sanskrit",
139822680,
"vsn",
}
-- Sinhalese varieties
m["si-med"] = {
"Medieval Sinhalese",
nil,
"si",
aliases = {"Medieval Sinhala"},
}
-------------------------------------------------------------------------
-- Iranian varieties --
-------------------------------------------------------------------------
m["qsb-bma"] = {
"the BMAC substrate",
133187435,
"und",
family = "qfa-sub",
aliases = {"the Bactria-Margiana substrate", "the Bactria-Margiana Archaeological Complex substrate"},
}
-- Historical and current Iranian dialects
m["ae-old"] = {
"Old Avestan",
29572,
"ae",
aliases = {"Gathic Avestan"},
}
m["ae-yng"] = {
"Younger Avestan",
29572,
"ae-old",
aliases = {"Young Avestan"},
}
m["bcc"] = {
"Southern Balochi",
33049,
"bal",
aliases = {"Southern Baluchi"},
}
m["bgp"] = {
"Eastern Balochi",
33049,
"bal",
aliases = {"Eastern Baluchi"},
}
m["bgn"] = {
"Western Balochi",
33049,
"bal",
aliases = {"Western Baluchi"},
}
m["bsg-ban"] = {
"Bandari",
nil,
"bsg",
}
m["bsg-hor"] = {
"Hormozi",
nil,
"bsg",
}
m["bsg-min"] = {
"Minabi",
nil,
"bsg",
}
m["kho-old"] = {
"Old Khotanese",
nil,
"kho",
}
m["kho-lat"] = {
"Late Khotanese",
nil,
"kho-old",
}
m["peo-ear"] = {
"Early Old Persian",
nil,
"peo",
}
m["peo-lat"] = {
"Late Old Persian",
nil,
"peo",
}
m["pal-ear"] = {
"Early Middle Persian",
nil,
"pal",
}
m["pal-lat"] = {
"Late Middle Persian",
nil,
"pal",
ancestors = "pal-ear",
}
m["ps-nwe"] = {
"Northwestern Pashto",
nil,
"ps",
}
m["ps-cgi"] = {
"Central Ghilzay",
nil,
"ps-nwe",
}
m["ps-mah"] = {
"Mahsudi",
nil,
"ps-nwe",
}
m["ps-nea"] = {
"Northeastern Pashto",
nil,
"ps",
}
m["ps-afr"] = {
"Afridi",
nil,
"ps-nea",
}
m["ps-bng"] = {
"Bangash",
nil,
"ps-nea",
}
m["ps-xat"] = {
"Khatak",
nil,
"ps-nea",
}
m["ps-pes"] = {
"Peshawari",
nil,
"ps-nea",
}
m["ps-sea"] = {
"Southeastern Pashto",
nil,
"ps",
}
m["ps-ban"] = {
"Bannu",
nil,
"ps-sea",
}
m["ps-kak"] = {
"Kakari",
nil,
"ps-sea",
}
m["ps-ser"] = {
"Sher",
nil,
"ps-sea",
}
m["ps-waz"] = {
"Waziri",
12274473,
"ps-sea",
}
m["ps-swe"] = {
"Southwestern Pashto",
nil,
"ps",
}
m["ps-kan"] = {
"Kandahari",
nil,
"ps-swe",
}
m["ps-jad"] = {
"Jadrani",
nil,
"ps",
ancestors = "ira-pat-pro"
}
m["xme-azr"] = {
"Old Azari",
nil,
"xme-ott",
aliases = {"Old Azeri", "Azari", "Azeri", "Āḏarī", "Adari", "Adhari"},
}
m["xme-ttc-cen"] = {
"Central Tati",
nil,
"xme-ott",
}
m["xme-ttc-eas"] = {
"Eastern Tati",
nil,
"xme-ott",
}
m["xme-ttc-nor"] = {
"Northern Tati",
nil,
"xme-ott",
}
m["xme-ttc-sou"] = {
"Southern Tati",
nil,
"xme-ott",
}
m["xme-ttc-wes"] = {
"Western Tati",
nil,
"xme-ott",
}
m["xmn"] = {
"Manichaean Middle Persian",
nil,
"pal-lat",
}
m["fa-ear"] = {
"Early New Persian",
127413796,
"fa",
ancestors = "pal-lat",
translit = "fa-cls-translit",
}
m["fa-cls"] = {
"Classical Persian",
9168,
"fa",
ancestors = "fa-ear",
translit = "fa-cls-translit",
}
m["fa-ira"] = {
"Iranian Persian",
3513637,
"fa",
aliases = {"Modern Persian", "Western Persian"},
translit = "fa-ira-translit",
}
m["prs"] = {
"Dari",
178440,
"fa",
aliases = {"Dari Persian", "Central Persian", "Eastern Persian", "Afghan Persian"},
translit = "fa-cls-translit",
}
m["haz"] = {
"Hazaragi",
33398,
"prs",
translit = "fa-cls-translit",
}
m["os-dig"] = {
"Digor Ossetian",
3027861,
"os",
aliases = {"Digoron", "Digor"},
}
m["os-iro"] = {
"Iron Ossetian",
nil,
"os",
aliases = {"Iron"},
}
m["sog-ear"] = {
"Early Sogdian",
nil,
"sog",
}
m["sog-lat"] = {
"Late Sogdian",
nil,
"sog-ear",
}
m["ro-MD"] = {
"Moldovan",
36392,
"ro",
aliases = {"Moldavian"},
}
m["oru-kan"] = {
"Kaniguram",
6363164,
"oru",
}
m["oru-log"] = {
"Logar",
nil,
"oru",
}
m["oos"] = {
"Old Ossetic",
65455882,
"xln",
}
m["oos-ear"] = {
"Early Old Ossetic",
nil,
"oos",
}
m["oos-lat"] = {
"Late Old Ossetic",
nil,
"oos",
}
m["rdb-jir"] = {
"Jirofti",
nil,
"rdb",
}
m["rdb-kah"] = {
"Kahnuji",
nil,
"rdb",
}
-- Southwestern Fars lects
m["fay-bur"] = {
"Burenjani",
nil,
"fay",
}
m["fay-bsh"] = {
"Bushehri",
nil,
"fay",
}
m["fay-dsh"] = {
"Dashtaki",
nil,
"fay",
}
m["fay-dav"] = {
"Davani",
5228140,
"fay",
}
m["fay-eze"] = {
"Emamzada Esmaili",
nil,
"fay",
}
m["fay-gav"] = {
"Gavkoshaki",
nil,
"fay",
}
m["fay-kho"] = {
"Khollari",
nil,
"fay",
}
m["fay-kon"] = {
"Kondazi",
nil,
"fay",
}
m["fay-kzo"] = {
"Old Kazeruni",
nil,
"fay",
}
m["fay-mas"] = {
"Masarami",
nil,
"fay",
}
m["fay-pap"] = {
"Papuni",
nil,
"fay",
}
m["fay-sam"] = {
"Samghani",
nil,
"fay",
}
m["fay-shr"] = {
"Shirazi",
nil,
"fay",
}
m["fay-sho"] = {
"Old Shirazi",
nil,
"fay",
}
m["fay-kar"] = {
"Khargi",
nil,
"fay",
}
m["fay-sor"] = {
"Sorkhi",
nil,
"fay",
}
-- Talysh lects
m["tly-cen"] = {
"Central Talysh",
nil,
"tly",
}
m["tly-asa"] = {
"Asalemi",
nil,
"tly-cen",
}
m["tly-kar"] = {
"Karganrudi",
nil,
"tly-cen",
}
m["tly-tul"] = {
"Tularudi",
nil,
"tly-cen",
}
m["tly-tal"] = {
"Taleshdulabi",
nil,
"tly-cen",
}
m["tly-nor"] = {
"Northern Talysh",
nil,
"tly",
}
m["tly-aze"] = {
"Azerbaijani Talysh",
nil,
"tly-nor",
}
m["tly-anb"] = {
"Anbarani",
nil,
"tly-nor",
}
m["tly-sou"] = {
"Southern Talysh",
nil,
"tly",
}
m["tly-fum"] = {
"Fumani",
nil,
"tly-sou",
}
m["tly-msu"] = {
"Masulei",
nil,
"tly-sou",
}
m["tly-msa"] = {
"Masali",
nil,
"tly-sou",
}
m["tly-san"] = {
"Shandarmani",
nil,
"tly-sou",
}
-- Tafreshi lects
m["xme-amo"] = {
"Amorehi",
nil,
"xme-taf",
}
m["atn"] = {
"Ashtiani",
3436590,
"xme-taf",
}
m["xme-bor"] = {
"Borujerdi",
nil,
"xme-taf",
}
m["xme-ham"] = {
"Hamadani",
6302426,
"xme-taf",
}
m["xme-kah"] = {
"Kahaki",
nil,
"xme-taf",
}
m["vaf"] = {
"Vafsi",
32611,
"xme-taf",
}
-- Kermanic lects
m["kfm"] = {
"Khunsari",
6403030,
"xme-ker",
}
m["xme-mah"] = {
"Mahallati",
nil,
"xme-ker",
}
m["xme-von"] = {
"Vonishuni",
nil,
"xme-ker",
}
m["xme-bdr"] = {
"Badrudi",
nil,
"xme-ker",
}
m["xme-del"] = {
"Delijani",
nil,
"xme-ker",
}
m["xme-kas"] = {
"Kashani",
nil,
"xme-ker",
}
m["xme-kes"] = {
"Kesehi",
nil,
"xme-ker",
}
m["xme-mey"] = {
"Meymehi",
nil,
"xme-ker",
}
m["ntz"] = {
"Natanzi",
6968399,
"xme-ker",
}
m["xme-abz"] = {
"Abuzeydabadi",
nil,
"xme-ker",
}
m["xme-aby"] = {
"Abyanehi",
nil,
"xme-ker",
}
m["xme-far"] = {
"Farizandi",
nil,
"xme-ker",
}
m["xme-jow"] = {
"Jowshaqani",
nil,
"xme-ker",
}
m["xme-nas"] = {
"Nashalji",
nil,
"xme-ker",
}
m["xme-qoh"] = {
"Qohrudi",
nil,
"xme-ker",
}
m["xme-yar"] = {
"Yarandi",
nil,
"xme-ker",
}
m["soj"] = {
"Soi",
7930463,
"xme-ker",
aliases = {"Sohi"},
}
m["xme-tar"] = {
"Tari",
nil,
"xme-ker",
}
m["gzi"] = {
"Gazi",
5529130,
"xme-ker",
}
m["xme-sed"] = {
"Sedehi",
nil,
"xme-ker",
}
m["xme-ard"] = {
"Ardestani",
nil,
"xme-ker",
}
m["xme-zef"] = {
"Zefrehi",
nil,
"xme-ker",
}
m["xme-isf"] = {
"Isfahani",
nil,
"xme-ker",
}
m["xme-kaf"] = {
"Kafroni",
nil,
"xme-ker",
}
m["xme-vrz"] = {
"Varzenehi",
nil,
"xme-ker",
}
m["xme-xur"] = {
"Khuri",
nil,
"xme-ker",
}
m["nyq"] = {
"Nayini",
6983146,
"xme-ker",
}
m["xme-ana"] = {
"Anaraki",
nil,
"xme-ker",
}
m["gbz"] = {
"Zoroastrian Dari",
32389,
"xme-ker",
aliases = {"Behdināni", "Gabri", "Gavrŭni", "Gabrōni"},
}
m["xme-krm"] = {
"Kermani",
nil,
"xme-ker",
}
m["xme-yaz"] = {
"Yazdi",
nil,
"xme-ker",
}
m["xme-bid"] = {
"Bidhandi",
nil,
"xme-ker",
}
m["xme-bij"] = {
"Bijagani",
nil,
"xme-ker",
}
m["xme-cim"] = {
"Chimehi",
nil,
"xme-ker",
}
m["xme-han"] = {
"Hanjani",
nil,
"xme-ker",
}
m["xme-kom"] = {
"Komjani",
nil,
"xme-ker",
}
m["xme-nar"] = {
"Naraqi",
nil,
"xme-ker",
}
m["xme-nus"] = {
"Nushabadi",
nil,
"xme-ker",
}
m["xme-qal"] = {
"Qalhari",
nil,
"xme-ker",
}
m["xme-trh"] = {
"Tarehi",
nil,
"xme-ker",
}
m["xme-val"] = {
"Valujerdi",
nil,
"xme-ker",
}
m["xme-var"] = {
"Varani",
nil,
"xme-ker",
}
m["xme-zor"] = {
"Zori",
nil,
"xme-ker",
}
-- Ramandi lects
m["tks-ebr"] = {
"Ebrahimabadi",
nil,
"tks",
}
m["tks-sag"] = {
"Sagzabadi",
nil,
"tks",
}
m["tks-esf"] = {
"Esfarvarini",
nil,
"tks",
}
m["tks-tak"] = {
"Takestani",
nil,
"tks",
}
m["tks-cal"] = {
"Chali Tati",
nil,
"tks",
aliases = {"Chāli"},
}
m["tks-dan"] = {
"Danesfani",
nil,
"tks",
}
m["tks-xia"] = {
"Khiaraji",
nil,
"tks",
}
m["tks-xoz"] = {
"Khoznini",
nil,
"tks",
}
-- Shughni dialects
m["sgh-bro"] = {
"Bartangi-Oroshori",
nil,
"sgh",
}
m["sgh-bar"] = {
"Bartangi",
nil,
"sgh-bro",
}
m["sgh-oro"] = {
"Oroshori",
nil,
"sgh-bro",
aliases = {"Roshorvi"},
}
m["sgh-rsx"] = {
"Roshani-Khufi",
nil,
"sgh",
}
m["sgh-xuf"] = {
"Khufi",
2562249,
"sgh-rsx",
aliases = {"Xufi", "Xūfī"},
}
m["sgh-ros"] = {
"Roshani",
2597566,
"sgh-rsx",
aliases = {"Rushani", "Rōšāni"},
}
m["sgh-xgb"] = {
"Khughni-Bajui",
nil,
"sgh",
}
m["sgh-xug"] = {
"Khughni",
nil,
"sgh-xgb",
}
m["sgh-baj"] = {
"Bajui",
nil,
"sgh-xgb",
}
-------------------------------------------------------------------------
-- Nuristani varieties --
-------------------------------------------------------------------------
m["bsh-kat"] = {
"Kativiri",
2605045,
"bsh",
aliases = {"Katə́viri"},
}
m["xvi"] = {
"Kamviri",
1193495,
"bsh",
aliases = {"Kamvíri"},
}
m["bsh-mum"] = {
"Mumviri",
nil,
"bsh",
aliases = {"Mumvíri"},
}
--------------------------------------------------------------------------------------
-- Italic varieties --
--------------------------------------------------------------------------------------
-------------------------------------------------------------------------
-- Latin varieties --
-------------------------------------------------------------------------
-- Latin varieties by period
m["itc-ola"] = {
"Old Latin",
12289,
"la",
"Latn, Ital",
translit = {
Ital = "Ital-translit"
},
}
m["itc-lan"] = {
"Lanuvian",
16890829,
"itc-ola",
aliases = {"Lanuvine"},
}
m["itc-pra"] = {
"Praenestine",
16889772,
"itc-ola",
aliases = {"Praenestinian"},
}
m["la-cla"] = {
"Classical Latin",
253854,
"la",
}
m["la-vul"] = {
"Vulgar Latin",
37560,
"la-cla",
}
m["la-afr"] = {
"African Romance",
162064,
"roa-pro",
}
m["la-lat"] = {
"Late Latin",
1503113,
"la",
ancestors = "la-cla",
}
m["la-med"] = {
"Medieval Latin",
1163234,
"la",
ancestors = "la-lat",
}
m["la-eme"] = {
"Early Medieval Latin",
nil,
"la-med",
}
m["la-ecc"] = {
"Ecclesiastical Latin",
1247932,
"la",
aliases = {"Church Latin", "Liturgical Latin"},
ancestors = "la-lat",
}
m["la-ren"] = {
"Renaissance Latin",
499083,
"la",
ancestors = "la-med",
}
m["la-new"] = {
"New Latin",
1248221,
"la",
aliases = {"Modern Latin"},
ancestors = "la-ren",
}
m["la-con"] = {
"Contemporary Latin",
1246397,
"la-new",
}
-------------------------------------------------------------------------
-- Miscellaneous Italic varieties --
-------------------------------------------------------------------------
m["xfa-cap"] = {
"Capenate",
133182969,
"xfa",
}
m["osc-luc"] = {
"Lucanian",
3265025,
"osc",
}
m["osc-sam"] = {
"Samnite",
133184287,
"osc",
}
-------------------------------------------------------------------------
-- Romance varieties --
-------------------------------------------------------------------------
m["roa-pro"] = {
"Proto-Romance",
3408029,
"la-lat",
ancestors = "la-vul",
}
-----------------------------------------------------
-- Catalan varieties --
-----------------------------------------------------
m["ca-val"] = {
"Valencian",
32641,
"ca",
}
-----------------------------------------------------
-- Franco-Provençal varieties --
-----------------------------------------------------
m["frp-old"] = {
"Old Franco-Provençal",
nil,
"frp",
}
-----------------------------------------------------
-- French and derived creole varieties --
-----------------------------------------------------
m["fro-nor"] = {
"Old Northern French",
2044917,
"fro",
aliases = {"Old Norman", "Old Norman French"},
}
m["fro-pic"] = {
"Picard Old French",
nil,
"fro",
}
m["xno"] = {
"Anglo-Norman",
35214,
"fro-nor",
}
m["xno-law"] = {
"Law French",
2044323,
"xno",
}
m["zrp"] = {
"Zarphatic",
36994,
"fro",
aliases = {"Judeo-French"},
pseudo_families = "qfa-jew",
}
m["fr-CA"] = {
"Canadian French",
1450506,
"fr",
}
m["fr-CH"] = {
"Swiss French",
1480152,
"fr",
}
m["fr-aca"] = {
"Acadian French",
415109,
"fr",
}
m["fr-lou"] = {
"Louisiana French",
3083213,
"fr",
}
m["fr-mis"] = {
"Missouri French",
3083210,
"fr",
}
m["frc"] = {
"Cajun French",
880301,
"fr-lou",
}
m["ht-sdm"] = {
"Saint Dominican Creole French",
nil,
"ht",
ancestors = "fr",
}
-- Norman varieties
m["nrf-grn"] = {
"Guernsey Norman",
56428,
"nrf",
aliases = {"Guernsey"},
}
m["nrf-jer"] = {
"Jersey Norman",
56430,
"nrf",
aliases = {"Jersey"},
}
-----------------------------------------------------
-- Gallo-Italic varieties --
-----------------------------------------------------
m["egl-old"] = {
"Old Emilian",
nil,
"egl",
}
m["lij-old"] = {
"Old Ligurian",
nil,
"lij",
aliases = {"Old Genoese"},
}
m["lmo-old"] = {
"Old Lombard",
97165320,
"lmo",
}
m["pms-old"] = {
"Old Piedmontese",
nil,
"pms",
aliases = {"Old Piemontese"},
}
m["vec-old"] = {
"Old Venetan",
nil,
"vec",
aliases = {"Old Venetian"},
}
m["rgn-old"] = {
"Old Romagnol",
nil,
"rgn",
}
-----------------------------------------------------
-- Italo-Romance varieties --
-----------------------------------------------------
-- Italian varieties
m["roa-oit"] = {
"Old Italian",
nil,
"it",
}
m["it-CH"] = {
"Switzerland Italian",
672147,
"it",
}
-- Other Italo-Romance varieties
m["nap-old"] = {
"Old Neapolitan",
nil,
"nap",
}
m["scn-old"] = {
"Old Sicilian",
nil,
"scn",
}
-----------------------------------------------------
-- Occitan varieties --
-----------------------------------------------------
m["oc-auv"] = {
"Auvergnat",
35359,
"oc",
aliases = {"Auvernhat", "Auvergnese"},
}
m["oc-gas"] = {
"Gascon",
35735,
"oc",
}
-- standardized dialect of Gascon
m["oc-ara"] = {
"Aranese",
10196,
"oc-gas",
}
m["oc-lan"] = {
"Languedocien",
942602,
"oc",
aliases = {"Lengadocian"},
}
m["oc-lim"] = {
"Limousin",
427614,
"oc",
}
m["oc-pro"] = {
"Provençal",
241243,
"oc",
aliases = {"Provencal"},
}
m["oc-pro-old"] = {
"Old Provençal",
2779185,
"pro",
}
m["oc-viv"] = {
"Vivaro-Alpine",
1649613,
"oc",
}
m["oc-jud"] = {
"Shuadit",
56472,
"oc",
aliases = {
"Chouhadite", "Chouhadit", "Chouadite", "Chouadit", "Shuhadit",
"Judeo-Occitan", "Judæo-Occitan", "Judaeo-Occitan",
"Judeo-Provençal", "Judæo-Provençal", "Judaeo-Provençal",
"Judeo-Provencal", "Judaeo-Provencal",
"Judeo-Comtadin", "Judæo-Comtadin", "Judaeo-Comtadin",
},
pseudo_families = "qfa-jew",
}
-----------------------------------------------------
-- Portuguese and derived creole varieties --
-----------------------------------------------------
-- Portuguese
m["pt-BR"] = {
"Brazilian Portuguese",
750553,
"pt",
}
m["pt-PT"] = {
"European Portuguese",
922399,
"pt",
}
-- Kabuverdianu (Cape Verde Creole, Cape Verdean Creole)
m["kea-bar"] = {
"Barlavento Kabuverdianu",
2217638,
"kea",
aliases = {"Barlavento", "Barlavento Creole", "Sampadjudu"},
}
m["kea-bvi"] = {
"Boa Vista Kabuverdianu",
16501837,
"kea-bar",
aliases = {"Boa Vista Creole"},
}
m["kea-sal"] = {
"Sal Kabuverdianu",
18707467,
"kea-bar",
aliases = {"Sal Creole"},
}
m["kea-saa"] = {
"Santo Antão Kabuverdianu",
18707472,
"kea-bar",
aliases = {"Santo Antão Creole"},
}
m["kea-sni"] = {
"São Nicolau Kabuverdianu",
18707549,
"kea-bar",
aliases = {"São Nicolau Creole"},
}
m["kea-svi"] = {
"São Vicente Kabuverdianu",
18707550,
"kea-bar",
aliases = {"São Vicente Creole"},
}
m["kea-sot"] = {
"Sotavento Kabuverdianu",
10261559,
"kea",
aliases = {"Sotavento", "Sotavento Creole", "Badiu"},
}
m["kea-bra"] = {
"Brava Kabuverdianu",
18670181,
"kea-sot",
aliases = {"Brava Creole"},
}
m["kea-fog"] = {
"Fogo Kabuverdianu",
18706861,
"kea-sot",
aliases = {"Fogo Creole"},
}
m["kea-mai"] = {
"Maio Kabuverdianu",
18707286,
"kea-sot",
aliases = {"Maio Creole"},
}
m["kea-san"] = {
"Santiago Kabuverdianu",
35117,
"kea-sot",
aliases = {"Santiago Creole"},
}
m["kea-alu"] = {
"ALUPEC Kabuverdianu",
375704,
"kea",
aliases = {"ALUPEC", "Alfabeto Unificado para a Escrita do Cabo-Verdiano"},
}
-----------------------------------------------------
-- Rhaeto-Romance varieties --
-----------------------------------------------------
-- Friulian varieties
m["fur-old"] = {
"Old Friulian",
nil,
"fur",
}
-- Ladin varieties
m["lld-amp"] = {
"Ampezan Ladin",
25617466,
"lld",
aliases = {"Anpezan", "Ampezan", "Ampezzan", "Ampezzano"},
}
m["lld-bad"] = {
"Badiot Ladin",
3706562,
"lld",
aliases = {"Badiot", "Badioto", "Badiotto"},
}
m["lld-cad"] = {
"Cadorino Ladin",
3706570,
"lld",
aliases = {"Cadorino"},
}
m["lld-fas"] = {
"Fascian Ladin",
742627,
"lld",
aliases = {"Fascian", "Fassano"},
}
m["lld-fod"] = {
"Fodom Ladin",
3706605,
"lld",
aliases = {"Fodom", "Livinallese"},
}
m["lld-for"] = {
"Fornes Ladin",
5470374,
"lld",
aliases = {"Fornes"},
}
m["lld-ghe"] = {
"Gherdëina Ladin",
3706597,
"lld",
aliases = {"Gherdëina", "Gardenese", "Val Gardena"},
}
m["lld-non"] = {
"Nones Ladin",
1055027,
"lld",
aliases = {"Nones", "Noneso"},
}
-- Romansh varieties
m["rm-old"] = {
"Old Romansh",
nil,
"rm",
}
m["rm-put"] = {
"Puter Romansh",
688309,
"rm",
aliases = {"Puter", "Putèr", "Upper Engadine", "rm-puter"},
}
m["rm-srm"] = {
"Surmiran Romansh",
690216,
"rm",
aliases = {"Surmiran", "rm-surmiran",
"Surmiran-Albula", -- Glottolog
},
}
m["rm-srs"] = {
"Sursilvan Romansh",
688348,
"rm",
aliases = {"Sursilvan", "rm-sursilv"},
}
m["rm-sut"] = {
"Sutsilvan Romansh",
688272,
"rm",
aliases = {"Sutsilvan", "rm-sutsilv"},
varieties = {"Scharans Sutsilvan"}, -- per Glottolog
}
m["rm-val"] = {
"Vallader Romansh",
690226,
"rm",
aliases = {"Vallader", "Putèr", "Lower Engadine", "rm-vallader"},
}
m["rm-gri"] = {
"Rumantsch Grischun",
688873,
"rm",
aliases = {"rm-rumgr"},
}
-----------------------------------------------------
-- Sardinian varieties --
-----------------------------------------------------
m["sc-old"] = {
"Old Sardinian",
nil,
"sc",
}
m["sc-src"] = {
"Logudorese",
777974,
"sc",
aliases = {"Logudorese Sardinian"},
}
m["sc-nuo"] = {
"Nuorese",
nil,
"sc-src",
aliases = {"Nuorese Sardinian"},
}
m["sc-sro"] = {
"Campidanese",
35348,
"sc",
aliases = {"Campidanese Sardinian"},
}
-----------------------------------------------------
-- Spanish varieties --
-----------------------------------------------------
m["es-ear"] = {
"Early Modern Spanish",
5364419,
"es",
}
m["es-AR"] = {
"Rioplatense Spanish",
509780,
"es",
}
m["es-BO"] = {
"Bolivian Spanish",
510730,
"es",
}
m["es-CL"] = {
"Chilean Spanish",
857295,
"es",
}
m["es-CO"] = {
"Colombian Spanish",
1115875,
"es",
}
m["es-CU"] = {
"Cuban Spanish",
824909,
"es",
}
m["es-MX"] = {
"Mexican Spanish",
616620,
"es",
}
m["es-PE"] = {
"Peruvian Spanish",
736236,
"es",
}
m["es-PH"] = {
"Philippine Spanish",
22091406,
"es",
}
m["es-US"] = {
"United States Spanish",
2301077,
"es",
aliases = {"US Spanish"},
}
--use label "US Spanish" to put Spanish terms in this category
m["es-PR"] = {
"Puerto Rican Spanish",
7258609,
"es",
}
m["es-VE"] = {
"Venezuelan Spanish",
840017,
"es",
}
m["es-lun"] = {
"Lunfardo",
1401612,
"es",
}
----------------------------------------------------------------------------------------------------------------------
-- Japonic varieties --
----------------------------------------------------------------------------------------------------------------------
-- Japanese varieties
m["ja-mid"] = {
"Middle Japanese",
6841474,
"ojp",
ancestors = "ojp",
}
m["ja-mid-ear"] = {
"Early Middle Japanese",
182695,
"ja-mid",
}
m["ja-mid-lat"] = {
"Late Middle Japanese",
1816184,
"ja-mid",
ancestors = "ja-mid-ear",
}
m["ja-ear"] = {
"Early Modern Japanese",
5326692,
"ja",
ancestors = "ja-mid-lat",
}
m["ojp-eas"] = {
"Eastern Old Japanese",
65247957,
"ojp",
}
m["ja-cla"] = {
"Classical Japanese",
1332057,
"ja",
-- FIXME: This is redundant because Classical Japanese is considered a child of (Modern) Japanese, which has ja-mid-ear
-- (as well as ja-mid-lat) as ancestors. However, the intent here is that the *direct* ancestor of ja-cla is ja-mid-ear
-- and ja-mid-lat is not an ancestor. Need to rethink ancestor handling.
-- ancestors = "ja-mid-ear",
}
----------------------------------------------------------------------------------------------------------------------
-- Koreanic varieties --
----------------------------------------------------------------------------------------------------------------------
-- Korean varieties
m["oko-lat"] = {
"Late Old Korean",
nil,
"oko",
}
m["okm-ear"] = {
"Early Middle Korean",
nil,
"okm",
}
m["ko-cen"] = {
"Central Korean",
nil,
"ko",
}
m["ko-gyg"] = {
"Gyeonggi Korean",
485492,
"ko-cen",
aliases = {"Seoul Korean"},
}
m["ko-chu"] = {
"Chungcheong Korean",
625800,
"ko-cen",
aliases = {"Hoseo Korean"},
}
m["ko-hwa"] = {
"Hwanghae Korean",
16183706,
"ko-cen",
}
m["ko-gan"] = {
"Gangwon Korean",
11260444,
"ko-cen",
aliases = {"Yeongdong Korean"},
}
m["ko-gys"] = {
"Gyeongsang Korean",
488002,
"ko",
aliases = {"Southeastern Korean"},
}
m["ko-jeo"] = {
"Jeolla Korean",
11250166,
"ko",
aliases = {"Southwestern Korean"},
}
m["ko-pyo"] = {
"Pyongan Korean",
7263142,
"ko",
aliases = {"Northwestern Korean"},
}
m["ko-ham"] = {
"Hamgyong Korean",
860702,
"ko",
aliases = {"Northeastern Korean"},
}
m["ko-yuk"] = {
"Yukjin Korean",
16171275,
"ko",
aliases = {"Yukchin Korean", "Ryukjin Korean", "Ryukchin Korean"},
}
----------------------------------------------------------------------------------------------------------------------
-- Mongolic varieties --
----------------------------------------------------------------------------------------------------------------------
m["xng-ear"] = {
"Early Middle Mongol",
nil,
"xng",
}
m["xng-lat"] = {
"Late Middle Mongol",
nil,
"xng",
ancestors = "xng-ear",
}
m["mn-kha"] = {
"Khalkha Mongolian",
6399808,
"mn",
aliases = {"Khalkha"},
}
m["mn-ord"] = {
"Ordos Mongolian",
716904,
"mn",
aliases = {"Ordos"},
}
m["mn-cha"] = {
"Chakhar Mongolian",
907425,
"mn",
aliases = {"Chakhar"},
}
m["mn-khr"] = {
"Khorchin Mongolian",
3196210,
"mn",
aliases = {"Khorchin"},
}
----------------------------------------------------------------------------------------------------------------------
-- Niger-Congo varieties --
----------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------
-- Akan varieties --
-----------------------------------------------------
m["tw"] = {
"Twi Akan",
36850,
"ak",
aliases = {"Twi"},
}
m["abr"] = {
"Abron",
34831,
"tw",
aliases = {"Brong", "Bono", "Bono Twi"},
}
m["tw-asa"] = {
"Asante Twi",
19261685,
"tw",
aliases = {"Asante", "Ashanti", "Ashante"},
}
m["tw-aku"] = {
"Akuapem Twi",
31150449,
"tw",
aliases = {"Akuapem", "Akuapim", "Akwapem Twi", "Akwapi"},
}
m["fat"] = {
"Fante Akan",
35570,
"ak",
aliases = {"Fante", "Fanti", "Fantse", "Mfantse"},
}
m["wss"] = {
"Wasa",
36914,
"ak",
}
-- creole
m["alv-kro"] = {
"Kromanti",
1093206,
"crp-mar",
}
-----------------------------------------------------
-- Bantu varieties --
-----------------------------------------------------
m["bnt-cmn"] = {
"Common Bantu",
nil,
"bnt-pro",
}
m["xh-bha"] = {
"Bhaca",
4900493,
"xh",
aliases = {"isiBhaca", "IsiBhaca"},
}
-- Rwanda-Rundi varieties
m["rw-kin"] = {
"Kinyarwanda",
33573,
"rw",
aliases = {"Rwanda"},
}
m["rw-run"] = {
"Kirundi",
33583,
"rw",
aliases = {"Rundi"},
}
-----------------------------------------------------
-- Fula varieties --
-----------------------------------------------------
m["fuc"] = {
"Pulaar",
1420205,
"ff",
}
m["fuf"] = {
"Pular",
3915357,
"ff",
}
m["ffm"] = {
"Maasina Fulfulde",
3915322,
"ff",
}
m["fue"] = {
-- no enwiki entry as of yet but frwiki and pmswiki have one
"Borgu Fulfulde",
12952426,
"ff",
}
m["fuh"] = {
-- no enwiki entry as of yet but frwiki and pmswiki have one
"Western Niger Fulfulde",
12952430,
"ff",
}
m["fuq"] = {
-- no enwiki entry as of yet but frwiki, hrwiki and pmswiki have one
"Central-Eastern Niger Fulfulde",
12628799,
"ff",
}
m["fuv"] = {
-- no enwiki entry as of yet but dewiki, frwiki, hrwiki, pmswiki and swwiki have one
"Nigerian Fulfulde",
36129,
"ff",
}
m["fub"] = {
-- no enwiki entry as of yet but dewiki, frwiki, hrwiki, pmswiki, ptwiki, swwiki and yowiki have one
"Adamawa Fulfulde",
34776,
"ff",
}
m["fui"] = {
-- no enwiki entry as of yet but pmswiki and swwiki have one
"Bagirmi Fulfulde",
11003859,
"ff",
}
----------------------------------------------------------------------------------------------------------------------
-- Papuan varieties --
----------------------------------------------------------------------------------------------------------------------
m["kze"] = {
"Kosena",
12952663,
"auy",
}
m["ont"] = {
"Ontenu",
3352827,
"gaj",
aliases = {"Ontena"},
}
----------------------------------------------------------------------------------------------------------------------
-- Salishan varieties --
----------------------------------------------------------------------------------------------------------------------
m["lut-nor"] = {
"Northern Lushootseed",
nil,
"lut",
aliases = {"Northern Puget Sound Salish"},
}
m["slh"] = {
"Southern Lushootseed",
7997684,
"lut",
aliases = {"Southern Puget Sound Salish", "Twulshootseed", "Whulshootseed"},
}
m["ska"] = {
"Skagit",
12642471,
"lut-nor",
}
m["sno"] = {
"Snohomish",
25559662,
"lut-nor",
}
----------------------------------------------------------------------------------------------------------------------
-- Sino-Tibetan varieties --
----------------------------------------------------------------------------------------------------------------------
m["tbq-pro"] = {
"Proto-Tibeto-Burman",
7251864,
"sit-pro",
}
-----------------------------------------------------
-- Chinese varieties --
-----------------------------------------------------
------------- Old Chinese, Middle Chinese -------------
m["och-ear"] = {
"Early Old Chinese",
nil,
"och",
}
m["och-lat"] = {
"Late Old Chinese",
nil,
"och",
}
m["ltc-ear"] = {
"Early Middle Chinese",
nil,
"ltc",
}
m["ltc-lat"] = {
"Late Middle Chinese",
nil,
"ltc",
}
------------- Classical/Literary varieties -------------
-- FIXME: Temporary.
m["lzh-shi"] = {
"Traditional Chinese poetry",
1759242,
"lzh",
}
-- FIXME: Temporary.
m["lzh-cii"] = {
"Ci",
1091366,
"lzh",
}
-- FIXME: Temporary.
m["lzh-yue"] = {
"Classical Cantonese",
nil,
"lzh",
}
-- FIXME: Temporary.
m["lzh-cmn"] = {
"Classical Mandarin",
nil,
"lzh",
}
-- FIXME: Temporary.
m["lzh-tai"] = {
"Classical Taishanese",
nil,
"lzh",
}
-- FIXME: Temporary.
m["lzh-cmn-TW"] = {
"Classical Taiwanese Mandarin",
nil,
"lzh-cmn",
}
-- FIXME: Temporary.
m["lzh-VI"] = {
"Vietnamese Classical Chinese",
17034227,
"lzh",
}
-- FIXME: Temporary.
m["lzh-KO"] = {
"Korean Classical Chinese",
10496257,
"lzh",
ietf_subtag = "lzh-KR" -- KR = South Korea, as there is no code for Korea as a whole
}
-- FIXME: Temporary.
m["lzh-lit"] = {
"Literary Chinese",
nil,
"lzh",
}
-- FIXME: Temporary. FIXME: Do we need this? How does it differ from Old Chinese?
m["lzh-pre"] = {
"Pre-Classical Chinese",
nil,
"lzh",
}
------------- Written Vernacular varieties -------------
-- FIXME: Temporary.
m["cmn-wvc"] = {
"Written vernacular Mandarin",
783605,
"cmn",
}
-- FIXME: Temporary. FIXME: How does this differ from "Literary Cantonese"?
m["yue-wvc"] = {
"Written vernacular Cantonese",
nil,
"yue",
}
-- FIXME: Temporary.
m["zhx-tai-wvc"] = {
"Written vernacular Taishanese",
nil,
"zhx-tai",
}
------------- Mandarin varieties -------------
-- FIXME: Temporary. NOTE: The Linguist List assigns the "w:Beijing dialect" (Wikidata 1147606) the code "cmn-bej" and
-- the larger "w:Beijing Mandarin (division of Mandarin)" dialect group (Wikidata 2169652; what we call "Beijingic
-- Mandarin", after Glottolog) the code "cmn-bei".
m["cmn-bei"] = {
"Beijing Mandarin",
1147606,
"cmn-bec",
}
-- FIXME: Temporary.
m["cmn-bec"] = {
"Beijingic Mandarin",
2169652,
"cmn",
}
-- FIXME: Temporary. NOTE: The Linguist List uses the code cmn-zho.
m["cmn-cep"] = {
"Central Plains Mandarin",
3048775,
"cmn",
aliases = {"Zhongyuan Mandarin"},
}
m["cmn-ear"] = {
"Early Mandarin",
837169,
"cmn",
ancestors = "ltc",
}
-- FIXME: Temporary.
m["cmn-gua"] = {
"Guanzhong Mandarin",
3431648,
"cmn-cep",
}
-- FIXME: Temporary. Appears to be a subdialect of Guiliu Mandarin, which in turn is a subdialect of Southwestern Mandarin.
m["cmn-gui"] = {
"Guilin Mandarin",
11111636,
"cmn-sow",
}
m["cmn-jhu"] = {
"Jianghuai Mandarin",
2128953,
"cmn",
aliases = {"Lower Yangtze Mandarin"},
}
-- FIXME: Temporary.
m["cmn-lan"] = {
"Lanyin Mandarin",
662754,
"cmn",
}
-- FIXME: Temporary.
m["cmn-MY"] = {
"Malaysian Mandarin",
13646143,
"cmn",
}
-- FIXME: Temporary.
m["cmn-nan"] = {
"Nanjing Mandarin",
2681098,
"cmn-jhu",
}
-- FIXME: Temporary.
m["cmn-noe"] = {
"Northeastern Mandarin",
1064504,
"cmn",
}
-- FIXME: Temporary.
m["cmn-PH"] = {
"Philippine Mandarin",
7185155,
"cmn",
}
-- FIXME: Temporary.
m["cmn-SG"] = {
"Singapore Mandarin",
1048980,
"cmn",
}
-- FIXME: Temporary.
m["cmn-sow"] = {
"Southwestern Mandarin",
2609239,
"cmn",
}
-- FIXME: Temporary. Appears to be a subdialect of Jilu Mandarin.
m["cmn-tia"] = {
"Tianjin Mandarin",
7800220,
"cmn",
}
-- FIXME: Temporary. NOTE: Wikidata also has Q4380827 "Taiwanese Mandarin", defined as "rare dialect of Standard Chinese
-- (Mandarin) used in Taiwan, which is strongly influenced by Taiwanese Hokkien; mostly used by elderlies" and having no
-- English Wikipedia article (but see w:zh:臺灣國語).
m["cmn-TW"] = {
"Taiwanese Mandarin",
262828,
"cmn",
}
-- FIXME: Temporary. Appears to be a subdialect of Wu-Tian Mandarin, in turn a subdialect of Southwestern Mandarin.
-- Given the code cmn-xwu in the Linguist List.
m["cmn-wuh"] = {
"Wuhan Mandarin",
11124731,
"cmn-sow",
aliases = {"Wuhanese"},
}
-- FIXME: Temporary. Appears to be a subdialect of Lanyin Mandarin.
m["cmn-xin"] = {
"Xining Mandarin",
nil,
"cmn-lan",
}
-- FIXME: Temporary.
m["cmn-yan"] = {
"Yangzhou Mandarin",
nil,
"cmn-jhu",
}
------------- Cantonese varieties -------------
-- FIXME: Temporary.
m["yue-gua"] = {
"Guangzhou Cantonese",
nil,
"yue",
}
-- FIXME: Temporary. Given the codes yue-yue or yue-can in the Linguist List.
m["yue-HK"] = {
"Hong Kong Cantonese",
5894342,
"yue",
}
-- FIXME: Temporary. FIXME: How does this differ from "Written vernacular Cantonese"?
m["yue-lit"] = {
"Literary Cantonese",
2472605,
"yue",
}
------------- Wu varieties -------------
m["wuu-han"] = {
"Hangzhounese",
5648144,
"wuu",
}
m["wuu-nin"] = {
"Ningbonese",
3972199,
"wuu",
}
-- FIXME: Temporary.
m["wuu-nor"] = {
"Northern Wu",
7675988,
"wuu",
aliases = {"Taihu Wu"},
}
-- FIXME: Temporary? Subvariety of Taihu Wu. NOTE: "chm" stands for Chongming, the main dialect, to avoid a conflict
-- with Shanghainese.
m["wuu-chm"] = {
"Shadi Wu",
6112340,
"wuu-nor",
}
m["wuu-sha"] = {
"Shanghainese",
36718,
"wuu-nor",
}
m["wuu-suz"] = {
"Suzhounese",
831744,
"wuu-nor",
}
-- FIXME: Temporary. May be converted into a full language and/or split.
m["wuu-wen"] = {
"Wenzhounese",
710218,
"wuu",
}
------------- Xiang varieties -------------
m["hsn-lou"] = {
"Loudi Xiang",
10943823,
"hsn-old",
}
m["hsn-hya"] = {
"Hengyang Xiang",
20689035,
"hsn-hzh",
}
m["hsn-hzh"] = {
"Hengzhou Xiang",
nil,
"hsn",
}
m["hsn-new"] = {
"New Xiang",
7012696,
"hsn",
aliases = {"Chang-Yi"},
}
m["hsn-old"] = {
"Old Xiang",
7085453,
"hsn",
aliases = {"Lou-Shao"},
}
------------- Hakka varieties -------------
-- FIXME: Temporary.
m["hak-dab"] = {
"Dabu Hakka",
19855566,
"hak", -- formerly hak-TW but seems to be spoken primary in Dabu County in Guangdong
}
-- FIXME: Temporary.
m["hak-eam"] = {
"Early Modern Hakka",
nil,
"hak",
}
-- FIXME: Temporary.
m["hak-hai"] = {
"Hailu Hakka",
17038519,
"hak", -- often considered a Taiwanese lect but also spoken in [[Shanwei]], [[Guangdong]]
}
-- FIXME: Temporary.
m["hak-HK"] = {
"Hong Kong Hakka",
2675834,
"hak",
}
-- FIXME: Temporary.
m["hak-hui"] = {
"Huiyang Hakka",
16873881,
"hak",
}
-- FIXME: Temporary.
m["hak-hui-MY"] = {
"Malaysian Huiyang Hakka",
nil,
"hak-hui",
}
-- FIXME: Temporary. Similar to and possibly the parent of Sixian Hakka in Taiwan.
m["hak-mei"] = {
"Meixian Hakka",
839295,
"hak",
aliases = {"Moiyan Hakka", "Meizhou Hakka"},
}
-- FIXME: Temporary.
m["hak-six"] = {
"Sixian Hakka",
9668261,
"hak-TW",
}
-- FIXME: Temporary.
m["hak-TW"] = {
"Taiwanese Hakka",
2391532,
"hak",
}
-- FIXME: Temporary.
m["hak-zha"] = {
"Zhao'an Hakka",
6703311,
"hak",
aliases = {"Zhangzhou Hakka"},
}
-- Southern Min varieties --
m["nan-anx"] = {
"Anxi Hokkien",
97064149,
"nan-qua",
}
m["nan-cha"] = {
"Changtai Hokkien",
nil,
"nan-zha",
}
m["nan-hou"] = {
"Houlu Min",
19855492,
"nan-dat",
}
m["nan-hui"] = {
"Hui'an Hokkien",
16241797,
"nan-qua",
}
m["nan-jin"] = {
"Jinjiang Hokkien",
11089375,
"nan-qua",
}
m["nan-kin"] = {
"Kinmenese Hokkien",
56278342,
"nan-xia",
aliases = {"Kinmen Hokkien"},
}
m["nan-med"] = {
"Medan Hokkien",
6805114,
"nan-zha",
}
m["nan-pen"] = {
"Penang Hokkien",
11120689,
"nan-zha",
}
m["nan-hbl-PH"] = {
"Philippine Hokkien",
3236692,
"nan-qua",
}
m["nan-qia"] = {
"Qianlu Min",
19842517,
"nan-dat",
}
m["nan-qua"] = {
"Quanzhou Hokkien",
2251677,
"nan-hbl",
aliases = {"Chinchew", "Choanchew"},
}
-- FIXME: Temporary? Derived from both Quanzhou and Zhangzhou Hokkien.
m["nan-hbl-SG"] = {
"Singapore Hokkien",
3846528,
"nan-hbl",
}
m["nan-spm"] = {
"Southern Malaysian Hokkien",
7570322,
"nan-qua",
aliases = {"Southern Malaysia Hokkien", "Southern Peninsular Malaysian Hokkien", "Southern Peninsular Malaysia Hokkien"}
}
m["nan-hbl-TW"] = {
"Taiwanese Hokkien",
36778,
"nan-hbl",
}
m["nan-ton"] = {
"Tong'an Hokkien",
nil,
"nan-xia",
}
m["nan-xia"] = {
"Xiamen Hokkien",
68744,
"nan-hbl",
aliases = {"Amoy", "Amoyese", "Amoynese", "Xiamenese"},
}
m["nan-yon"] = {
"Yongchun Hokkien",
65118728,
"nan-qua",
}
m["nan-zha"] = {
"Zhangzhou Hokkien",
8070492,
"nan-hbl",
aliases = {"Changchew", "Chiangchew", "Changchow"},
}
m["nan-zho"] = {
"Zhao'an Hokkien",
65118728,
"nan-zha",
aliases = {"Zhao'an", "Chawan", "Chawan Hokkien"},
}
m["nan-zhp"] = {
"Zhangping Hokkien",
15937822,
"nan-zha",
}
------------- Other Min varieties -------------
-- FIXME: Temporary. Affiliation within Min uncertain; some combination of Eastern and Southern.
m["zhx-zho"] = {
"Zhongshan Min",
8070958,
"zh",
}
------------- Other Chinese varieties -------------
-- FIXME: Temporary. Affiliation within Chinese uncertain; possibly Yue.
m["zhx-dan"] = {
"Danzhou Chinese",
2578935,
"zh",
}
------------- Chinese romanization varieties -------------
-- [[Wiktionary:Information desk/2022/June#Etymology Coding Issue]]
-- [[Wiktionary:Grease pit/2022/June#Transliteration Systems in Etymologies 2]]
m["cmn-pinyin"] = {
"Hanyu Pinyin",
42222,
"cmn",
aliases = {"Pinyin"},
}
m["cmn-tongyong"] = {
"Tongyong Pinyin",
700739,
"cmn",
}
m["cmn-wadegiles"] = {
"Wade–Giles",
208442,
"cmn",
aliases = {"Wade-Giles", "Wade Giles"},
}
m["zh-postal"] = {
"Postal Romanization",
151868,
"zh",
}
-- Chinese cyrillization
m["cmn-palladius"] = {
"Palladius",
1234239,
"cmn",
aliases = {"Palladius system"},
}
-----------------------------------------------------
-- Tibetic varieties --
-----------------------------------------------------
m["adx"] = {
"Amdo Tibetan",
56509,
"bo",
}
m["kbg"] = {
"Khamba",
12952626,
"bo",
}
m["khg"] = {
"Khams Tibetan",
56601,
"bo",
}
m["tsk"] = {
"Tseku",
11159532,
"bo",
}
----------------------------------------------------------------------------------------------------------------------
-- Tai-Kadai varieties --
----------------------------------------------------------------------------------------------------------------------
m["th-old"] = {
"Old Thai",
nil,
"tai-swe-pro",
wikipedia_article = "Thai language#Old Thai",
}
m["th-suk"] = {
"Sukhothai Old Thai", -- 1238-1438. Cannot use "Sukhothai Thai" as Sukhothai is the current city and "Sukhothai Thai" is a lect.
nil,
"th-old",
aliases = {"Sukhothai Siamese"},
wikipedia_article = "Thai language#Old Thai",
}
m["th-ayu"] = {
"Ayutthaya Old Thai", -- 1351-1767. Cannot use "Ayutthaya Thai" as Ayutthaya is the current city.
nil,
"th-old",
aliases = {"Ayutthaya Siamese"},
wikipedia_article = "Thai language#Old Thai",
}
--[[
m["th-new"] = {
"Hacked Thai", -- temporary for testing new translit/display methods
nil,
"th",
translit = "User:Benwing2/th-scraping-translit",
display_text = "User:Benwing2/th-scraping-translit",
strip_diacritics = "User:Benwing2/th-scraping-translit",
preprocess_links = "User:Benwing2/th-scraping-translit",
}
]]
m["tai-shz"] = {
"Shangsi Zhuang",
13216,
"za",
}
----------------------------------------------------------------------------------------------------------------------
-- Turkic varieties --
----------------------------------------------------------------------------------------------------------------------
m["trk-cmn-pro"] = {
"Proto-Common Turkic",
1126028,
"trk-pro",
}
m["trk-ogr-pro"] = {
"Proto-Oghur",
1422731,
"trk-pro",
family = "trk-ogr",
}
m["trk-bul-pro"] = {
"Proto-Bulgar",
nil,
"trk-ogr-pro",
}
m["trk-ogz-pro"] = {
"Proto-Oghuz",
494600,
"trk-pro",
family = "trk-ogz",
aliases = {"Southwestern Common Turkic"},
}
m["crh-dbj"] = {
"Dobrujan Tatar",
12811566,
"crh",
aliases = {"Romanian Tatar"},
}
m["cv-ana"] = {
"Anatri Chuvash",
nil,
"cv",
aliases = {"Anatri", "Lower Chuvash"},
}
m["cv-mid"] = {
"Middle Chuvash",
nil,
"cv",
ancestors = "cv-old",
}
m["cv-old"] = {
"Old Chuvash",
nil,
"cv",
ancestors = "xbo-vol",
}
m["cv-vir"] = {
"Viryal Chuvash",
4278332,
"cv",
aliases = {"Viryal", "Upper Chuvash"},
}
m["kjh-fyu"] = {
"Fuyu Kyrgyz",
2598963,
"kjh",
aliases = {"Fuyu Kirgiz", "Fuyu Kirghiz", "Manchurian Kyrgyz", "Manchurian Kirgiz", "Manchurian Kirghiz"},
}
m["klj-arg"] = {
"Arghu",
33455,
"klj",
ancestors = "trk-cmn-pro",
}
m["otk-kir"] = {
"Old Kirghiz",
83142,
"otk",
aliases = {"Yenisei Turkic", "Yenisei Kyrgyz"},
}
m["otk-ork"] = {
"Orkhon Turkic",
31295480,
"otk",
}
m["qwm-cum"] = {
"Cuman",
1075050,
"qwm",
aliases = {"Kuman", "Polovtsian", "Polovcian"},
}
m["qwm-arm"] = {
"Armeno-Kipchak",
2027503,
"qwm",
ancestors = "qwm-cum",
aliases = {"Xıpçaχ tili", "Tatarça"},
}
m["qwm-mam"] = {
"Mamluk-Kipchak",
4279942,
"qwm",
aliases = {"Mameluk-Kipchak"},
}
m["az-cls"] = {
"Classical Azerbaijani",
nil,
"az",
aliases = {"Classical Azeri"},
}
m["qxq"] = {
"Qashqai",
13192,
"az",
aliases = {"Qaşqay", "Qashqayi", "Kashkai", "Kashkay"},
}
m["tr-CY"] = {
"Cypriot Turkish",
7917392,
"tr",
}
m["uz-afg"] = {
-- NOTE: has ISO 639-3 code uzs assigned to it.
"Afghan Uzbek",
1066787,
"uz",
aliases = {"Southern Uzbek"},
translit = "uz-afg-translit",
}
m["xbo-dan"] = {
"Danube Bulgar",
nil,
"xbo",
}
m["xbo-vol"] = {
"Volga Bulgar",
nil,
"xbo",
}
----------------------------------------------------------------------------------------------------------------------
-- Uralic varieties --
----------------------------------------------------------------------------------------------------------------------
m["fiu-pro"] = {
"Proto-Finno-Ugric",
79890,
"urj-pro",
}
m["urj-fpr-pro"] = {
"Proto-Finno-Permic",
nil,
"urj-pro",
}
m["krl-nor"] = {
"North Karelian",
125501196,
"krl",
}
m["krl-sou"] = {
"South Karelian",
129812730,
"krl",
}
m["mns-eas"] = {
"Eastern Mansi",
30311755,
"mns-cen",
}
m["mns-wes"] = {
"Western Mansi",
30311756,
"mns-cen",
}
----------------------------------------------------------------------------------------------------------------------
-- Yeneseian varieties --
----------------------------------------------------------------------------------------------------------------------
m["qfa-yke-pro"] = {
"Proto-Ketic",
nil,
"qfa-yen-pro",
family = "qfa-yke",
}
m["qfa-yko-pro"] = {
"Proto-Kottic",
nil,
"qfa-yen-pro",
family = "qfa-yko",
}
m["qfa-yrn-pro"] = {
"Proto-Arinic",
nil,
"qfa-yen-pro",
family = "qfa-yrn",
}
m["qfa-ypm-pro"] = {
"Proto-Pumpokolic",
nil,
"qfa-yen-pro",
family = "qfa-ypm",
}
----------------------------------------------------------------------------------------------------------------------
-- Miscellaneous varieties --
----------------------------------------------------------------------------------------------------------------------
m["mul-tax"] = {
"taxonomic name",
522190,
"mul",
}
-----------------------------------------------------
-- Elamite varieties --
-----------------------------------------------------
m["elx-old"] = {
"Old Elamite",
nil,
"elx",
}
m["elx-mid"] = {
"Middle Elamite",
nil,
"elx",
}
m["elx-neo"] = {
"Neo-Elamite",
nil,
"elx",
}
m["elx-ach"] = {
"Achaemenid Elamite",
nil,
"elx",
}
-----------------------------------------------------
-- Substrates --
-----------------------------------------------------
-- Pre-Roman substrates
m["qsb-ibe"] = {
"Paleo-Hispanic",
246801,
"und",
family = "qfa-sub",
aliases = {"Palaeo-Hispanic", "Paleohispanic", "Palaeohispanic", "Paleo-Iberian", "Palaeo-Iberian"},
}
m["qsb-bal"] = {
"Paleo-Balkan",
1815070,
"und",
family = "qfa-sub",
aliases = {"Palaeo-Balkan", "Paleobalkan", "Palaeobalkan"},
}
m["xaq"] = {
"Aquitanian",
500522,
"euq-pro",
family = "euq",
}
return require("Module:languages").finalizeData(m, "language", true)
83dn29jlgbktzhj3fbjqygqjhl86u5c
Mòideal:etymology languages/by name
828
16818
86352
2026-07-23T00:52:11Z
Altronic
4137
Copy from English Wiktionary
86352
Scribunto
text/plain
local export = {}
for code, data in pairs(require("Module:etymology languages/data")) do
export[data[1]] = export[data[1]] or data.main_code or code
end
return export
c4hna67ht9yk2vttwj1nllq6cc4qa7d
Mòideal:scripts/print
828
16819
86355
2026-07-23T01:09:35Z
Altronic
4137
Copy from English Wiktionary
86355
Scribunto
text/plain
local m_languages_print = require("Module:languages/print")
local deep_copy = require("Module:table/deepCopy")
local mt = {}
-- Redirect to [[Module:languages/print]], but add "script" as the second
-- argument.
function mt:__index(funcname)
local function func(frame)
local args = frame.args
if args[2] == nil then
args = deep_copy(args)
args[2] = "script"
frame = frame:newChild{args = args}
end
return m_languages_print[funcname](frame)
end
self[funcname] = func
return func
end
return setmetatable({}, mt)
cz51j3cds0bvb37fhfylnch3lmvwtqj
Mòideal:scripts/charToScript
828
16820
86357
2026-07-23T01:11:52Z
Altronic
4137
Copy from English Wiktionary
86357
Scribunto
text/plain
local subexport = {}
local require_when_needed = require("Module:require when needed")
local cp = require_when_needed("Module:string utilities", "codepoint")
local floor = math.floor
local get_plaintext = require_when_needed("Module:utilities", "get_plaintext")
local get_script = require_when_needed("Module:scripts", "getByCode")
local insert = table.insert
local ipairs = ipairs
local min = math.min
local pairs = pairs
local setmetatable = setmetatable
local sort = table.sort
local split = require_when_needed("Module:string utilities", "split")
local table_len = require_when_needed("Module:table", "length")
local type = type
-- Copied from [[Module:Unicode data]].
local function binaryRangeSearch(codepoint, ranges)
local low, mid, high
low, high = 1, ranges.length or table_len(ranges)
while low <= high do
mid = floor((low + high) / 2)
local range = ranges[mid]
if codepoint < range[1] then
high = mid - 1
elseif codepoint <= range[2] then
return range, mid
else
low = mid + 1
end
end
return nil, mid
end
-- Copied from [[Module:Unicode data]].
local function linearRangeSearch(codepoint, ranges)
for i, range in ipairs(ranges) do
if codepoint < range[1] then
break
elseif codepoint <= range[2] then
return range
end
end
end
local function compareRanges(range1, range2)
return range1[1] < range2[1]
end
-- Save previously used codepoint ranges in case another character is in the
-- same range.
local rangesCache = {}
--[=[
Takes a codepoint or a character and finds the script code(s) (if any) that are appropriate for it based on the codepoint, using the data module [[Module:scripts/recognition data]]. The data module was generated from the patterns in [[Module:scripts/data]] using [[Module:User:Erutuon/script recognition]].
By default, it returns only the first script code if there are multiple matches (i.e. the code we take to be the default). If `all_scripts` is set, then a table of all matching codes is returned.
]=]
local charToScriptData
function subexport.charToScript(char, all_scripts)
charToScriptData = charToScriptData or mw.loadData("Module:scripts/recognition data")
local t = type(char)
local codepoint
if t == "string" then
local etc
codepoint, etc = cp(char, 1, 2)
if etc then
error("bad argument #1 to 'charToScript' (expected a single character)")
end
elseif t == "number" then
codepoint = char
else
error(("bad argument #1 to 'charToScript' (expected string or a number, got %s)")
:format(t))
end
local ret = {}
local individualMatch = charToScriptData.individual[codepoint]
if individualMatch then
ret = split(individualMatch, "%s*,%s*", true)
else
local range
if rangesCache[1] then
range = linearRangeSearch(codepoint, rangesCache)
if range then
for i, script in ipairs(range) do
if i > 2 then
insert(ret, script)
if not all_scripts then
break
end
end
end
end
end
if not ret[1] then
local index = floor(codepoint / 0x1000)
range = linearRangeSearch(index, charToScriptData.blocks)
if not range and charToScriptData[index] then
range = binaryRangeSearch(codepoint, charToScriptData[index])
if range then
insert(rangesCache, range)
sort(rangesCache, compareRanges)
end
end
if range then
for i, script in ipairs(range) do
if i > 2 then
insert(ret, script)
if not all_scripts then
break
end
end
end
end
end
end
if not ret[1] then
insert(ret, "None")
end
if all_scripts then
return ret
else
return ret[1]
end
end
--[=[
Finds the best script for a string in a language-agnostic way.
Converts each character to a codepoint. Iterates the counter for the script code if the codepoint is in the list
of individual characters, or if it is in one of the defined ranges in the 4096-character block that it belongs to.
Each script has a two-part counter, for primary and secondary matches. Primary matches are when the script is the
first one listed; otherwise, it's a secondary match. When comparing scripts, first the total of both are compared
(i.e. the overall number of matches). If these are the same, the number of primary and then secondary matches are
used as tiebreakers. For example, this is used to ensure that `Grek` takes priority over `Polyt` if no characters
which exclusively match `Polyt` are found, as `Grek` is a subset of `Polyt`.
If `none_is_last_resort_only` is specified, this will never return None if any characters in `text` belong to a
script. Otherwise, it will return None if there are more characters that don't belong to a script than belong to
any individual script. (FIXME: This behavior is probably wrong, and `none_is_last_resort_only` should probably
become the default.)
]=]
function subexport.findBestScriptWithoutLang(text, none_is_last_resort_only)
-- `scripts` contains counters for any scripts detected so far. Jpan and Kore are handled as special-cases, as they are combinations of other scripts.
local scripts_mt = {Jpan = true, Kore = true}
local weights_mt = {
__lt = function(a, b)
if a[1] + a[2] ~= b[1] + b[2] then
return a[1] + a[2] < b[1] + b[2]
elseif a[1] ~= b[1] then
return a[1] < b[1]
elseif a[2] ~= b[2] then
return a[2] < b[2]
else
return false
end
end
}
scripts_mt.__index = function(t, k)
local ret = {}
if k == "Jpan" and scripts_mt.Jpan then
for i = 1, 2 do
ret[i] = t["Hani"][i] + t["Hira"][i] + t["Kana"][i]
end
elseif k == "Kore" and scripts_mt.Kore then
for i = 1, 2 do
ret[i] = t["Hani"][i] + t["Hang"][i]
end
else
for i = 1, 2 do
insert(ret, 0)
end
end
return setmetatable(ret, weights_mt)
end
local scripts = setmetatable({}, scripts_mt)
text = get_plaintext(text)
local combined_scripts = {
Jpan = {["Hani"] = true, ["Hira"] = true, ["Kana"] = true},
Kore = {["Hani"] = true, ["Hang"] = true}
}
for character in text:gmatch(".[\128-\191]*") do
for i, script in ipairs(subexport.charToScript(character, true)) do
if not none_is_last_resort_only or script ~= "None" then
scripts[script] = scripts[script]
local weight = min(i, 2)
scripts[script][weight] = scripts[script][weight] + 1
end
end
end
-- Check the combined script counts. If a single constituent has the same count (i.e. it's the only one), discard the combined script.
for combined_script, set in pairs(combined_scripts) do
for script in pairs(set) do
scripts[combined_script] = scripts[combined_script]
if (scripts[script][1] + scripts[script][2]) == (scripts[combined_script][1] + scripts[combined_script][2]) then
scripts[combined_script] = nil
break
end
end
end
local bestScript
local greatestCount
for script, count in pairs(scripts) do
if (not greatestCount) or greatestCount < count then
bestScript = script
greatestCount = count
end
end
bestScript = bestScript or "None"
return get_script(bestScript)
end
return subexport
cs19bg8d41yuv7ovit6o3v0kd4ou9kq
Mòideal:scripts/chain
828
16821
86359
2026-07-23T01:18:55Z
Altronic
4137
Copy from English Wiktionary
86359
Scribunto
text/plain
local p = {}
local scripts = mw.loadData("Module:scripts/data")
local function format(code)
local name = scripts[code][1]
if not name:find("[Ss]script$") then
name = name .. " script"
end
return "<code>[[:Category:" .. name .. "|" .. scripts[code][1] .. " <span style=\"color:var(--wikt-palette-green-9,green);\">(" .. code .. ")</span>]]</code>"
end
local function dump(data, prefix)
if type(data) == "string" then
return format(data)
else
local result = ""
local branch = "├───"
local next_level = prefix .. "│ "
local current = ""
for i,val in ipairs(data) do
if i == #data then
branch = "└───"
next_level = prefix .. " "
end
if #val == 0 then
result = result .. prefix .. branch .. dump(val.name) .. "<br/>"
else
result = result .. "{{(!}} class=mw-collapsible style=border-collapse:collapse\n{{!}}"
result = result .. prefix .. branch .. dump(val.name)
result = result .. "\n{{!-}}\n{{!}}"
result = result .. dump(val, next_level)
result = result .. "\n{{!)}}\n"
end
end
return result
end
end
local function deep_sort(current)
local result = {}
local is_table = {}
for key,val in pairs(current) do
if type(key) == "number" then
table.insert(result, val)
else
is_table[key] = true
table.insert(result, key)
end
end
table.sort(result, function(a,b)
return (scripts[a] or error(a))[1] < (scripts[b] or error(b))[1]
end)
local i = 2
while i<#result do
while scripts[result[i-1]] == scripts[result[i]] do
table.remove(result,i)
end
i = i + 1
end
for i=1,#result do
if is_table[result[i]] then
local name = result[i]
result[i] = deep_sort(current[result[i]])
result[i].name = name
else
result[i] = {name = result[i]}
end
end
return result
end
function p.show(frame)
local children = {}
local function find_ancestors(origin,key,val)
if val.parent then
return {val.parent}
end
end
for key,val in pairs(scripts) do
local ancestors = find_ancestors(key,key,val)
if ancestors then
for _, ancestor in ipairs(ancestors) do
if ancestor ~= key then
if children[ancestor] then
table.insert(children[ancestor], key)
else
children[ancestor] = {key}
end
end
end
end
end
local function make_nested(data)
local make_nil = {}
for key,val in pairs(data) do
if type(key) == "number" then
if children[val] then
data[val] = make_nested(children[val])
table.insert(make_nil, key)
children[val] = nil
end
else
data[key] = make_nested(val)
end
end
for _,key in ipairs(make_nil) do
data[key] = nil
end
return data
end
local nested = make_nested(children)
nested = deep_sort(nested)
local result = ""
for i=1,#nested do
result = result .. "\n\n\n{| class=mw-collapsible style=border-collapse:collapse\n|" .. format(nested[i].name) .. "\n|-\n|"
result = result .. dump(nested[i], " ")
result = result .. "\n|}"
end
return frame:preprocess(result)
end
return p
n7rwekag3ubwghvqs396az92op21y49
Mòideal:require when needed
828
16822
86360
2026-07-23T01:20:48Z
Altronic
4137
Copy from English Wiktionary
86360
Scribunto
text/plain
local getmetatable = getmetatable
local ipairs = ipairs
local loaded = package.loaded
local pairs = pairs
local require = require
local select = select
local setmetatable = setmetatable
local tostring = tostring
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local function get_nested(obj, ...)
local n = select("#", ...)
if n == 0 then
return obj
end
obj = obj[...]
for i = 2, n do
obj = obj[select(i, ...)]
end
return obj
end
local function get_obj(mt)
local obj = require(mt[1])
if #mt > 1 then
obj = get_nested(obj, unpack(mt, 2))
end
mt[0] = obj
return obj
end
local function __call(self, ...)
local mt = getmetatable(self)
local obj = mt[0]
if obj == nil then
obj = get_obj(mt)
end
return obj(...)
end
local function __index(self, k)
local mt = getmetatable(self)
local obj = mt[0]
if obj == nil then
obj = get_obj(mt)
end
return obj[k]
end
local function __ipairs(self)
local mt = getmetatable(self)
local obj = mt[0]
if obj == nil then
obj = get_obj(mt)
end
return ipairs(obj)
end
local function __newindex(self, k, v)
local mt = getmetatable(self)
local obj = mt[0]
if obj == nil then
obj = get_obj(mt)
end
obj[k] = v
end
local function __pairs(self)
local mt = getmetatable(self)
local obj = mt[0]
if obj == nil then
obj = get_obj(mt)
end
return pairs(obj)
end
local function __tostring(self)
local mt = getmetatable(self)
local obj = mt[0]
if obj == nil then
obj = get_obj(mt)
end
return tostring(obj)
end
return function(modname, ...)
local mod = loaded[modname]
if mod ~= nil then
return get_nested(mod, ...)
end
return setmetatable({}, {
modname,
__call = __call,
__index = __index,
__ipairs = __ipairs,
__newindex = __newindex,
__pairs = __pairs,
__tostring = __tostring,
-- TODO: other metamethods, if needed.
...
})
end
1p8upm5p2cm943t5atixatwvtsenpe2
Mòideal:scripts/recognition data
828
16823
86361
2026-07-23T01:22:00Z
Altronic
4137
Copy from English Wiktionary
86361
Scribunto
text/plain
local data = {
[0x00] = {
{ 0x00041, 0x0005A, "Latn"},
{ 0x00061, 0x0007A, "Latn"},
{ 0x000C0, 0x000D6, "Latn"},
{ 0x000D8, 0x000F6, "Latn"},
{ 0x000F8, 0x0024F, "Latn"},
{ 0x00370, 0x003E1, "Grek", "Polyt" },
{ 0x003E2, 0x003EF, "Copt" },
{ 0x003F0, 0x003FF, "Grek", "Polyt" },
{ 0x00400, 0x0045F, "Cyrl" },
{ 0x00460, 0x00469, "Cyrs" },
{ 0x0046A, 0x0046D, "Cyrl" },
{ 0x0046E, 0x00471, "Cyrs" },
{ 0x00472, 0x00475, "Cyrl" },
{ 0x00476, 0x00489, "Cyrs" },
{ 0x0048A, 0x00527, "Cyrl" },
{ 0x00531, 0x0058F, "Armn" },
{ 0x00590, 0x005FF, "Hebr" },
{ 0x00600, 0x006FF, "Arab" },
{ 0x00700, 0x0074F, "Syrc" },
{ 0x00750, 0x0077F, "Arab" },
{ 0x00780, 0x007B1, "Thaa" },
{ 0x007C0, 0x007FF, "Nkoo" },
{ 0x00800, 0x0083E, "Samr" },
{ 0x00840, 0x0085E, "Mand" },
{ 0x00860, 0x0086A, "Syrc" },
{ 0x008A0, 0x008FF, "Arab" },
{ 0x00900, 0x0097F, "Deva" },
{ 0x00980, 0x00983, "Beng" },
{ 0x00985, 0x0098C, "Beng" },
{ 0x00993, 0x009A8, "Beng" },
{ 0x009AA, 0x009B0, "Beng" },
{ 0x009B6, 0x009B9, "Beng" },
{ 0x009BC, 0x009C4, "Beng" },
{ 0x009CB, 0x009CE, "Beng" },
{ 0x009E0, 0x009E3, "Beng" },
{ 0x009E6, 0x009EF, "Beng" },
{ 0x009F0, 0x009F1, "as-Beng" },
{ 0x00A01, 0x00A76, "Guru" },
{ 0x00A81, 0x00AF1, "Gujr" },
{ 0x00B01, 0x00B77, "Orya" },
{ 0x00B82, 0x00BFA, "Taml" },
{ 0x00C00, 0x00C7F, "Telu" },
{ 0x00C80, 0x00CF2, "Knda" },
{ 0x00D02, 0x00D7F, "Mlym" },
{ 0x00D82, 0x00DF4, "Sinh" },
{ 0x00E01, 0x00E5B, "Thai" },
{ 0x00E81, 0x00EDF, "Laoo" },
{ 0x00F00, 0x00FDA, "Tibt" },
},
[0x01] = {
{ 0x01000, 0x0109F, "Mymr" },
{ 0x010A0, 0x010CD, "Geok" },
{ 0x010D0, 0x010FF, "Geor" },
{ 0x01100, 0x011FF, "Hang" },
{ 0x01200, 0x01399, "Ethi" },
{ 0x013A0, 0x013F4, "Cher" },
{ 0x01400, 0x0167F, "Cans" },
{ 0x01680, 0x0169C, "Ogam" },
{ 0x016A0, 0x016F0, "Runr" },
{ 0x01700, 0x01714, "Tglg" },
{ 0x01720, 0x01734, "Hano" },
{ 0x01740, 0x01753, "Buhd" },
{ 0x01760, 0x01773, "Tagb" },
{ 0x01780, 0x017F9, "Khmr" },
{ 0x01800, 0x018AA, "Mong" },
{ 0x01900, 0x0194F, "Limb" },
{ 0x01950, 0x01974, "Tale" },
{ 0x01980, 0x019DF, "Talu" },
{ 0x019E0, 0x019FF, "Khmr" },
{ 0x01A00, 0x01A1F, "Bugi" },
{ 0x01A20, 0x01AAD, "Lana" },
{ 0x01B00, 0x01B7C, "Bali" },
{ 0x01B80, 0x01BBF, "Sund" },
{ 0x01BC0, 0x01BFF, "Batk" },
{ 0x01C00, 0x01C4F, "Lepc" },
{ 0x01C50, 0x01C7F, "Olck" },
{ 0x01C90, 0x01CBF, "Geor" },
{ 0x01E00, 0x01EFF, "Latn" },
{ 0x01F00, 0x01FFE, "Polyt" },
},
[0x02] = {
{ 0x02190, 0x021FF, "Zsym" },
{ 0x02200, 0x022FF, "Zmth" },
{ 0x02300, 0x023FF, "Zsym" },
{ 0x02500, 0x027BF, "Zsym" },
{ 0x027C0, 0x027EF, "Zmth" },
{ 0x02800, 0x028FF, "Brai" },
{ 0x02980, 0x02AFF, "Zmth" },
{ 0x02B00, 0x02BFE, "Zsym" },
{ 0x02C00, 0x02C5E, "Glag" },
{ 0x02C60, 0x02C7F, "Latn" },
{ 0x02C80, 0x02CFF, "Copt" },
{ 0x02D00, 0x02D2D, "Geok" },
{ 0x02D30, 0x02D7F, "Tfng" },
{ 0x02D80, 0x02DDE, "Ethi" },
{ 0x02E80, 0x02FDF, "Hani" },
},
[0x03] = {
{ 0x03001, 0x03002, "Hani", "Bopo", "Hang", "Hira", "Kana", "Yiii" },
{ 0x03003, 0x03007, "Hani" },
{ 0x03008, 0x03011, "Hani", "Bopo", "Hang", "Hira", "Kana", "Yiii" },
{ 0x03012, 0x03013, "Hani" },
{ 0x03014, 0x0301B, "Hani", "Bopo", "Hang", "Hira", "Kana", "Yiii" },
{ 0x0301C, 0x0301F, "Hani", "Bopo", "Hang", "Hira", "Kana" },
{ 0x03020, 0x0303F, "Hani" },
{ 0x03041, 0x0309F, "Hira" },
{ 0x030A0, 0x030FF, "Kana" },
{ 0x03105, 0x0312F, "Bopo" },
{ 0x03131, 0x0318E, "Hang" },
{ 0x031A0, 0x031BA, "Bopo" },
{ 0x031C0, 0x031E3, "Hani" },
{ 0x031F0, 0x031FF, "Kana" },
{ 0x03220, 0x03247, "Hani" },
{ 0x03280, 0x032B0, "Hani" },
{ 0x032C0, 0x032CB, "Hani" },
{ 0x03300, 0x03357, "Kana" },
{ 0x03358, 0x03370, "Hani" },
{ 0x0337B, 0x0337F, "Hani" },
{ 0x033E0, 0x033FE, "Hani" },
{ 0x03400, 0x03FFF, "Hani" },
},
[0x04] = {
{ 0x04000, 0x04DB5, "Hani" },
{ 0x04E00, 0x04FFF, "Hani" },
},
[0x05] = {
{ 0x05000, 0x05FFF, "Hani" },
},
[0x06] = {
{ 0x06000, 0x06FFF, "Hani" },
},
[0x07] = {
{ 0x07000, 0x07FFF, "Hani" },
},
[0x08] = {
{ 0x08000, 0x08FFF, "Hani" },
},
[0x09] = {
{ 0x09000, 0x09FFF, "Hani" },
},
[0x0A] = {
{ 0x0A000, 0x0A4C6, "Yiii" },
{ 0x0A4D0, 0x0A4FF, "Lisu" },
{ 0x0A500, 0x0A62B, "Vaii" },
{ 0x0A640, 0x0A67F, "Cyrs" },
{ 0x0A680, 0x0A697, "Cyrl" },
{ 0x0A6A0, 0x0A6F7, "Bamu" },
{ 0x0A720, 0x0A7FF, "Latn" },
{ 0x0A800, 0x0A82B, "Sylo" },
{ 0x0A830, 0x0A832, "Deva", "Dogr", "Gujr", "Guru", "Khoj", "Knda", "Kthi", "Mahj", "Modi", "Nand", "Sind", "Takr", "Tirh"},
{ 0x0A833, 0x0A835, "Deva", "Dogr", "Gujr", "Guru", "Khoj", "Knda", "Kthi", "Mahj", "Mlym", "Modi", "Nand", "Sind", "Takr", "Tirh"},
{ 0x0A836, 0x0A839, "Deva", "Dogr", "Gujr", "Guru", "Khoj", "Kthi", "Mahj", "Modi", "Sind", "Takr", "Tirh"},
{ 0x0A840, 0x0A877, "Phag" },
{ 0x0A880, 0x0A8D9, "Saur" },
{ 0x0A8E0, 0x0A8FF, "Deva" },
{ 0x0A900, 0x0A92F, "Kali" },
{ 0x0A930, 0x0A95F, "Rjng" },
{ 0x0A980, 0x0A9DF, "Java" },
{ 0x0A9E0, 0x0A9FE, "Mymr" },
{ 0x0AA00, 0x0AA5F, "Cham" },
{ 0x0AA60, 0x0AA7F, "Mymr" },
{ 0x0AA80, 0x0AADF, "Tavt" },
{ 0x0AAE0, 0x0AAFF, "Mtei" },
{ 0x0AB01, 0x0AB2E, "Ethi" },
{ 0x0AB30, 0x0AB65, "Latn" },
{ 0x0AB70, 0x0ABBF, "Cher" },
{ 0x0ABC0, 0x0ABFF, "Mtei" },
{ 0x0AC00, 0x0AFFF, "Hang" },
},
[0x0B] = {
{ 0x0B000, 0x0BFFF, "Hang" },
},
[0x0C] = {
{ 0x0C000, 0x0CFFF, "Hang" },
},
[0x0D] = {
{ 0x0D000, 0x0D7A3, "Hang" },
},
[0x0F] = {
{ 0x0FA27, 0x0FA29, "Hani" },
{ 0x0FB13, 0x0FB17, "Armn" },
{ 0x0FB1D, 0x0FB4F, "Hebr" },
{ 0x0FB50, 0x0FDFD, "Arab" },
{ 0x0FE45, 0x0FE46, "Hani", "Bopo", "Hang", "Hira", "Kana" },
{ 0x0FE70, 0x0FEFC, "Arab" },
{ 0x0FF61, 0x0FF65, "Hani", "Bopo", "Hang", "Hira", "Kana", "Yiii" },
},
[0x10] = {
{ 0x10000, 0x100FA, "Linb" },
{ 0x10280, 0x1029C, "Lyci" },
{ 0x102A0, 0x102D0, "Cari" },
{ 0x102E1, 0x102FB, "Copt" },
{ 0x10300, 0x10323, "Ital" },
{ 0x10330, 0x1034A, "Goth" },
{ 0x10350, 0x1037A, "Perm" },
{ 0x10380, 0x1039F, "Ugar" },
{ 0x103A0, 0x103D5, "Xpeo" },
{ 0x10400, 0x1044F, "Dsrt" },
{ 0x10450, 0x1047F, "Shaw" },
{ 0x10480, 0x104A9, "Osma" },
{ 0x104B0, 0x104FB, "Osge" },
{ 0x10500, 0x10527, "Elba" },
{ 0x10530, 0x10563, "Aghb" },
{ 0x10600, 0x10767, "Lina" },
{ 0x10800, 0x1083F, "Cprt" },
{ 0x10840, 0x1085F, "Armi" },
{ 0x10860, 0x1087F, "Palm" },
{ 0x10880, 0x108AF, "Nbat" },
{ 0x108E0, 0x108FF, "Hatr" },
{ 0x10900, 0x1091F, "Phnx" },
{ 0x10920, 0x1093F, "Lydi" },
{ 0x10980, 0x1099F, "Mero" },
{ 0x109A0, 0x109BF, "Merc" },
{ 0x10A00, 0x10A58, "Khar" },
{ 0x10A60, 0x10A7F, "Sarb" },
{ 0x10A80, 0x10A9F, "Narb" },
{ 0x10AC0, 0x10AF6, "Mani" },
{ 0x10B00, 0x10B3F, "Avst" },
{ 0x10B40, 0x10B5F, "Prti" },
{ 0x10B60, 0x10B7F, "Phli" },
{ 0x10B80, 0x10BAF, "Phlp" },
{ 0x10C00, 0x10C48, "Orkh" },
{ 0x10C80, 0x10CB2, "Hung" },
{ 0x10D00, 0x10D39, "Rohg" },
{ 0x10E60, 0x10E7E, "Rumin" },
{ 0x10F00, 0x10F27, "Sogo" },
{ 0x10F30, 0x10F59, "Sogd" },
{ 0x10F70, 0x10FAF, "Ougr" },
{ 0x10FE0, 0x10FFF, "Elym" },
},
[0x11] = {
{ 0x11000, 0x1107F, "Brah" },
{ 0x11080, 0x110CD, "Kthi" },
{ 0x110D0, 0x110F9, "Sora" },
{ 0x11100, 0x11146, "Cakm" },
{ 0x11150, 0x11176, "Mahj" },
{ 0x11180, 0x111D9, "Shrd" },
{ 0x11200, 0x1123D, "Khoj" },
{ 0x11280, 0x112A9, "Mult" },
{ 0x112B0, 0x112F9, "Sind" },
{ 0x11301, 0x11374, "Gran" },
{ 0x11400, 0x1145E, "Newa" },
{ 0x11480, 0x114D9, "Tirh" },
{ 0x11580, 0x115DD, "Sidd" },
{ 0x11600, 0x11659, "Modi" },
{ 0x11680, 0x116C9, "Takr" },
{ 0x11700, 0x1173F, "Ahom" },
{ 0x11800, 0x1183B, "Dogr" },
{ 0x118A0, 0x118FF, "Wara" },
{ 0x119A0, 0x119FF, "Nand" },
{ 0x11A00, 0x11A47, "Zanb" },
{ 0x11A50, 0x11AA2, "Soyo" },
{ 0x11AC0, 0x11AF8, "Pauc" },
{ 0x11C00, 0x11C6C, "Bhks" },
{ 0x11C70, 0x11CB6, "Marc" },
{ 0x11D00, 0x11D59, "Gonm" },
{ 0x11D60, 0x11DA9, "Gong" },
{ 0x11EE0, 0x11EF8, "Maka" },
},
[0x12] = {
{ 0x12000, 0x1236E, "Xsux" },
{ 0x12400, 0x12473, "Xsux" },
{ 0x12F90, 0x12FFF, "Cpmn" },
},
[0x13] = {
{ 0x13000, 0x1342E, "Egyp" },
},
[0x14] = {
{ 0x14400, 0x14646, "Hluw" },
},
[0x16] = {
{ 0x16800, 0x16A38, "Bamu" },
{ 0x16A40, 0x16A6F, "Mroo" },
{ 0x16AD0, 0x16AF5, "Bass" },
{ 0x16B00, 0x16B8F, "Hmng" },
{ 0x16E40, 0x16E9A, "Medf" },
{ 0x16F00, 0x16F9F, "Plrd" },
},
[0x17] = {
{ 0x17000, 0x17FFF, "Tang" },
},
[0x18] = {
{ 0x18000, 0x18AF2, "Tang" },
},
[0x1B] = {
{ 0x1B001, 0x1B11E, "Hira" },
{ 0x1B170, 0x1B2FB, "Nshu" },
{ 0x1BC00, 0x1BC9F, "Dupl" },
},
[0x1C] = {
{ 0x1CF00, 0x1CFCF, "Zname" },
},
[0x1D] = {
{ 0x1D100, 0x1D1DD, "Music" },
{ 0x1D2E0, 0x1D2F3, "Maya" },
{ 0x1D400, 0x1D7FF, "Zmth" },
{ 0x1D800, 0x1DAAF, "Sgnw" },
},
[0x1E] = {
{ 0x1E000, 0x1E02A, "Glag" },
{ 0x1E800, 0x1E8D6, "Mend" },
{ 0x1E900, 0x1E95F, "Adlm" },
},
[0x1F] = {
{ 0x1F000, 0x1F0F5, "Zsym" },
{ 0x1F300, 0x1FA6D, "Zsym" },
},
[0x20] = {
{ 0x20000, 0x20FFF, "Hani" },
},
[0x21] = {
{ 0x21000, 0x21FFF, "Hani" },
},
[0x22] = {
{ 0x22000, 0x22FFF, "Hani" },
},
[0x23] = {
{ 0x23000, 0x23FFF, "Hani" },
},
[0x24] = {
{ 0x24000, 0x24FFF, "Hani" },
},
[0x25] = {
{ 0x25000, 0x25FFF, "Hani" },
},
[0x26] = {
{ 0x26000, 0x26FFF, "Hani" },
},
[0x27] = {
{ 0x27000, 0x27FFF, "Hani" },
},
[0x28] = {
{ 0x28000, 0x28FFF, "Hani" },
},
[0x29] = {
{ 0x29000, 0x29FFF, "Hani" },
},
[0x2A] = {
{ 0x2A000, 0x2AFFF, "Hani" },
},
[0x2B] = {
{ 0x2B000, 0x2BFFF, "Hani" },
},
[0x2C] = {
{ 0x2C000, 0x2CFFF, "Hani" },
},
[0x2D] = {
{ 0x2D000, 0x2DFFF, "Hani" },
},
[0x2E] = {
{ 0x2E000, 0x2EBE0, "Hani" },
},
[0x30] = {
{ 0x30000, 0x30FFF, "Hani" },
},
[0x31] = {
{ 0x31000, 0x31FFF, "Hani" },
},
[0x32] = {
{ 0x32000, 0x32FFF, "Hani" },
},
[0x33] = {
{ 0x33000, 0x33FFF, "Hani" },
},
}
for _, v in next, data do
v.length = #v
end
data.individual = {
[0x00462] = "Cyrl",
[0x00463] = "Cyrl",
[0x0060C] = "Arab, Nkoo, Rohg, Syrc, Thaa, Yezi",
[0x0061B] = "Arab, Nkoo, Rohg, Syrc, Thaa, Yezi",
[0x0061F] = "Arab, Adlm, Nkoo, Rohg, Syrc, Thaa, Yezi",
[0x00640] = "Arab, Adlm, Mand, Mani, Ougr, Phlp, Rohg, Sogd, Syrc",
[0x00951] = "Deva, Beng, Gran, Gujr, Guru, Knda, Latn, Mlym, Orya, Shrd, Taml, Telu, Tirh",
[0x00952] = "Deva, Beng, Gran, Gujr, Guru, Knda, Latn, Mlym, Orya, Taml, Telu, Tirh",
[0x00964] = "Deva, Beng, Dogr, Gong, Gonm, Gran, Gujr, Guru, Knda, Mahj, Mlym, Nand, Orya, Sind, Sinh, Sylo, Takr, Taml, Telu, Tirh",
[0x00965] = "Deva, Beng, Dogr, Gong, Gonm, Gran, Gujr, Guru, Knda, Limb, Mahj, Mlym, Nand, Orya, Sind, Sinh, Sylo, Takr, Taml, Telu, Tirh",
[0x0098F] = "Beng",
[0x00990] = "Beng",
[0x009A1] = "Beng",
[0x009A2] = "Beng",
[0x009AF] = "Beng",
[0x009B2] = "Beng",
[0x009BC] = "Beng",
[0x009C7] = "Beng",
[0x009C8] = "Beng",
[0x009D7] = "Beng",
[0x01CDA] = "Deva, Knda, Mlym, Orya, Taml, Telu",
[0x01CF2] = "Deva, Beng, Gran, Knda, Nand, Orya, Telu, Tirh",
[0x02135] = "Zmth",
[0x03000] = "Hani",
[0x03003] = "Hani, Bopo, Hang, Hira, Kana",
[0x03013] = "Hani, Bopo, Hang, Hira, Kana",
[0x03030] = "Hani, Bopo, Hang, Hira, Kana",
[0x03037] = "Hani, Bopo, Hang, Hira, Kana",
[0x030FB] = "Kana, Hani, Bopo, Hang, Hira, Yiii",
[0x032FF] = "Hani",
[0x0FA0E] = "Hani",
[0x0FA0F] = "Hani",
[0x0FA11] = "Hani",
[0x0FA13] = "Hani",
[0x0FA14] = "Hani",
[0x0FA1F] = "Hani",
[0x0FA21] = "Hani",
[0x0FA23] = "Hani",
[0x0FA24] = "Hani",
[0x1056F] = "Aghb",
[0x16FE0] = "Tang",
[0x16FE1] = "Nshu",
[0x1B000] = "Kana",
}
data.blocks = {
{ 0x04, 0x09, "Hani" },
{ 0x0B, 0x0D, "Hang" },
{ 0x17, 0x18, "Tang" },
{ 0x20, 0x2E, "Hani" },
}
return data
4m69qs8gnq8knzros5qbkff3yz21cb5
Mòideal:string/patternEscape
828
16824
86362
2026-07-23T01:22:53Z
Altronic
4137
Copy from English Wiktionary
86362
Scribunto
text/plain
local gsub = string.gsub
local chars
local function get_chars()
chars, get_chars = {
["\000"] = "%z", ["$"] = "%$", ["%"] = "%%", ["("] = "%(", [")"] = "%)",
["*"] = "%*", ["+"] = "%+", ["-"] = "%-", ["."] = "%.", ["?"] = "%?",
["["] = "%[", ["]"] = "%]", ["^"] = "%^",
}, nil
return chars
end
--[==[Escapes the magic characters used in a pattern: {$%()*+-.?[]^}, and converts the null character to {%z}. For example, {"^$()%.[]*+-?\0"} becomes {"%^%$%(%)%%%.%[%]%*%+%-%?%z"}. This is necessary when constructing a pattern involving arbitrary text (e.g. from user input).]==]
return function(str)
return (gsub(str, "[%z$%%()*+%-.?[%]^]", chars or get_chars()))
end
kdhwp5dohwvh931huz7m0oufqqh05wl
Mòideal:string/replacementEscape
828
16825
86363
2026-07-23T01:23:43Z
Altronic
4137
Copy from English Wiktionary
86363
Scribunto
text/plain
local gsub = string.gsub
--[==[Escapes {%}, which is the only magic character used in replacement strings, which are given as the third argument to {string.gsub} and {mw.ustring.gsub}, as well as format strings given to {string.format} and {mw.ustring.format}.]==]
return function(str)
return (gsub(str, "%%", "%%%%"))
end
aid90he3azqkc4qrytnczmfsjczbfe3
Mòideal:string/encode entities
828
16826
86364
2026-07-23T01:24:23Z
Altronic
4137
Copy from English Wiktionary
86364
Scribunto
text/plain
-- TO BE REPLACED BY encode_entities in [[Module:string utilities]]. This function decodes on input by default to prevent double-encoding, which the new function does not, so implementations need to take this into account when being converted.
local debug_track_module = "Module:debug/track"
local string_decode_entities_module = "Module:string/decodeEntities"
local string_utilities_module = "Module:string utilities"
local require = require
local function decode_entities(...)
decode_entities = require(string_decode_entities_module)
return decode_entities(...)
end
local function encode_entities(...)
encode_entities = require(string_utilities_module).encode_entities
return encode_entities(...)
end
local function track(...)
track = require(debug_track_module)
return track(...)
end
return function(str, charset, raw)
if not raw then
local decoded = decode_entities(str)
if decoded ~= str then
track("string/encode entities/decoded first")
end
str = decoded
end
return encode_entities(str, charset, nil, true)
end
bvh4hqobw96dy8gcuv3yoq2nlvj06si
Mòideal:string/isutf8
828
16827
86365
2026-07-23T01:25:14Z
Altronic
4137
Copy from English Wiktionary
86365
Scribunto
text/plain
local byte = string.byte
local match = string.match
--[==[Returns {true} if `str` is a valid UTF-8 string. This is true if, for each character, all of the following are true:
* It has the expected number of bytes, which is determined by value of the leading byte: 1-byte characters are `0x00` to `0x7F`, 2-byte characters start with `0xC2` to `0xDF`, 3-byte characters start with `0xE0` to `0xEF`, and 4-byte characters start with `0xF0` to `0xF4`.
* The leading byte must not fall outside of the above ranges.
* The trailing byte(s) (if any), must be between `0x80` to `0xBF`.
* The character's codepoint must be between U+0000 (`0x00`) and U+10FFFF (`0xF4 0x8F 0xBF 0xBF`).
* The character cannot have an overlong encoding: for each byte length, the lowest theoretical encoding is equivalent to U+0000 (e.g. `0xE0 0x80 0x80`, the lowest theoretical 3-byte encoding, is exactly equivalent to U+0000). Encodings that use more than the minimum number of bytes are not considered valid, meaning that the first valid 3-byte character is `0xE0 0xA0 0x80` (U+0800), and the first valid 4-byte character is `0xF0 0x90 0x80 0x80` (U+10000). Formally, 2-byte characters have leading bytes ranging from `0xC0` to `0xDF` (rather than `0xC2` to `0xDF`), but `0xC0 0x80` to `0xC1 0xBF` are overlong encodings, so it is simpler to say that the 2-byte range begins at `0xC2`.
If `allow_surrogates` is set, surrogates (U+D800 to U+DFFF) will be treated as valid UTF-8. Surrogates are used in UTF-16, which encodes codepoints U+0000 to U+FFFF with 2 bytes, and codepoints from U+10000 upwards using a pair of surrogates, which are taken together as a 4-byte unit. Since surrogates have no use in UTF-8, as it encodes higher codepoints in a different way, they are not considered valid in UTF-8 text. However, there are limited circumstances where they may be necessary: for instance, JSON escapes characters using the format `\u0000`, which must contain exactly 4 hexadecimal digits; under the scheme, codepoints above U+FFFF must be escaped as the equivalent pair of surrogates, even though the text itself must be encoded in UTF-8 (e.g. U+10000 becomes `\uD800\uDC00`).]==]
return function(str, allow_surrogates)
local loc, str_len = 1, #str
while true do
-- Skipping ASCII bytes with [^\128-\255]* is much faster than searching
-- for [\128-\255].
loc = match(str, "^[^\128-\255]*()", loc)
if loc > str_len then
return true
end
-- Grab 5 bytes (i.e. at least one extra), to determine when the loop
-- should break.
local b1, b2, b3, b4, b5 = byte(str, loc, loc + 4)
while true do
-- 1 byte can't be valid, as the 1-byte characters \x00-\x7F are
-- ignored. The leading bytes for 2-byte encodings are formally
-- [\xC0-\xDF], but [\xC0\xC1] always form overlong encodings.
if b1 < 0xC2 or not b2 or b2 > 0xBF then
return false
-- 2 bytes: [\xC2-\xDF]...
elseif b1 < 0xE0 then
if b2 < 0x80 then
return false
end
loc = loc + 2
if not b3 then
return true
elseif b3 < 0x80 then
break
end
b1, b2, b3, b4, b5 = b3, b4, b5, byte(str, loc + 3, loc + 4)
-- Trailing byte: [\x80-\xBF].
elseif not b3 or b3 < 0x80 or b3 > 0xBF then
return false
-- 3 bytes: [\xE0-\xEF]...
elseif b1 < 0xF0 then
-- If b2 is [\x80-\x9F], exclude \xE0[\x80-\x9F]..., which are
-- overlong encodings.
if b2 < 0xA0 then
if b1 < 0xE1 then
return false
end
-- The remaining b2 values [\xA0-\xBF] can form the surrogates
-- \xED[\xA0-\xBF]...
elseif b1 < 0xE0 or b1 == 0xED and not allow_surrogates then
return false
end
loc = loc + 3
if not b4 then
return true
elseif b4 < 0x80 then
break
end
b1, b2, b3, b4, b5 = b4, b5, byte(str, loc + 2, loc + 4)
-- Trailing byte: [\x80-\xBF].
elseif not b4 or b4 < 0x80 or b4 > 0xBF then
return false
-- 4-bytes: [\xF0-\xF4]...
-- If b2 is [\x80-\x8F], exclude \xF0[\x80-\x8F]..., which are
-- overlong encodings, but allow \xF4 as a leading byte, since
-- \xF4\8F\BF\BF is the highest valid codepoint (U+10FFFF).
else
if b2 < 0x90 then
if b1 < 0xF1 or b1 > 0xF4 then
return false
end
elseif b1 < 0xF0 or b1 > 0xF3 or b2 < 0x80 then
return false
end
loc = loc + 4
if not b5 then
return true
elseif b5 < 0x80 then
break
end
b1, b2, b3, b4, b5 = b5, byte(str, loc + 1, loc + 4)
end
end
end
end
je4tjhlqfo4f35rsheojotm6imsgq22
Mòideal:string/charsetEscape
828
16828
86366
2026-07-23T01:25:56Z
Altronic
4137
Copy from English Wiktionary
86366
Scribunto
text/plain
local gsub = string.gsub
local chars
local function get_chars()
chars, get_chars = {
["\000"] = "%z", ["%"] = "%%", ["-"] = "%-", ["]"] = "%]", ["^"] = "%^",
}, nil
return chars
end
--[==[Escapes the magic characters used in pattern character sets: {%-]^}, and converts the null character to {%z}.]==]
return function(str)
return (gsub(str, "[%z%%%-%]^]", chars or get_chars()))
end
jrbz2u5ynegbco1b6oqpnqiz7xje0en
Mòideal:string/nowiki
828
16829
86367
2026-07-23T01:26:31Z
Altronic
4137
Copy from English Wiktionary
86367
Scribunto
text/plain
local table_list_to_set_module = "Module:table/listToSet"
local byte = string.byte
local char = string.char
local find = string.find
local format = string.format
local gsub = string.gsub
local lower = string.lower
local sub = string.sub
local function list_to_set(...)
list_to_set = require(table_list_to_set_module)
return list_to_set(...)
end
local function escape_byte(_, b)
return format("&#%d;", b)
end
local absolute
local function get_absolute()
absolute, get_absolute = list_to_set({"\"", "&", "'", ";", "<", "=", ">", "[", "]", "{", "|", "}"}, function(_, ch)
return format("&#%d;", byte(ch))
end), nil
return absolute
end
local after_newline
local function get_after_newline()
after_newline, get_after_newline = list_to_set({0x9, 0xA, 0xD, 0x20, 0x21, 0x23, 0x2A, 0x3A}, escape_byte), nil
return after_newline
end
local scheme_chars, unused_scheme_chars, uri_schemes
local function get_scheme_chars()
local _uri_schemes = {"bitcoin", "geo", "magnet", "mailto", "matrix", "news", "sip", "sips", "sms", "tel", "urn", "xmpp"}
uri_schemes, get_scheme_chars = list_to_set(_uri_schemes), nil
_uri_schemes = table.concat(_uri_schemes)
-- Add alphanumeric characters used in a listed scheme to `scheme_chars`,
-- and those that aren't to `unused_scheme_chars`.
scheme_chars, unused_scheme_chars = {}, {}
for i = 0x61, 0x7A do
local chars = find(_uri_schemes, char(i), nil, true) and scheme_chars or unused_scheme_chars
chars[i] = true
chars[i - 0x20] = true
end
unused_scheme_chars[0x5F] = true -- _
return scheme_chars
end
local after_magic_link
local function get_after_magic_link()
after_magic_link, get_after_magic_link = list_to_set({0x9, 0xA, 0xC, 0xD, 0x20}, escape_byte), nil
return after_magic_link
end
-- Temporary variables. No risk of collisions across stack levels, since there's
-- no way for nowiki() to be called recursively.
local _str, esc, esc_next, esc_next2
local function nowiki(loc, ch)
if esc_next ~= nil then
esc, esc_next, esc_next2 = esc_next, esc_next2, nil
return esc or nil
end
esc = (absolute or get_absolute())[ch]
if esc then
return esc
elseif ch == "\n" or ch == "\r" then
esc_next = (after_newline or get_after_newline())[byte(_str, loc + 1)]
elseif ch == "!" then
if byte(_str, loc + 1) == 0x21 then -- !
esc_next = "!"
end
elseif ch == ":" then
if sub(_str, loc + 1, loc + 2) == "//" then
return ":"
end
local n, b = 0
repeat
n = n + 1
b = byte(_str, loc - n)
until not (scheme_chars or get_scheme_chars())[b]
-- Abort on an unused scheme character, as it can't be a scheme.
if unused_scheme_chars[b] then
return
-- Otherwise, check if the the word before the colon matches a scheme.
elseif uri_schemes[lower(sub(_str, loc - n + 1, loc - 1))] then
return ":"
end
elseif ch == "-" then
local prev = byte(_str, loc - 1)
if (prev == 0xA or prev == 0xD) and sub(_str, loc + 1, loc + 3) == "---" then
return "-"
end
elseif ch == "I" then
local esc_sp = (after_magic_link or get_after_magic_link())[byte(_str, loc + 4)]
if esc_sp and sub(_str, loc + 1, loc + 3) == "SBN" then
esc_next = esc_sp
end
elseif ch == "P" then
local esc_sp = (after_magic_link or get_after_magic_link())[byte(_str, loc + 4)]
if esc_sp and sub(_str, loc + 1, loc + 3) == "MID" then
esc_next, esc_next2 = false, esc_sp -- to avoid escaping "I" in "PMID"
end
elseif ch == "R" then
local esc_sp = (after_magic_link or get_after_magic_link())[byte(_str, loc + 3)]
if esc_sp and sub(_str, loc + 1, loc + 2) == "FC" then
esc_next = esc_sp
end
elseif ch == "_" then
if byte(_str, loc + 1) == 0x5F then -- _
esc_next = "_"
end
elseif ch == "~" then
if sub(_str, loc + 1, loc + 2) == "~~" then
esc_next, esc_next2 = false, "~"
end
end
end
local first
local function get_first()
first, get_first = list_to_set({0x9, 0xA, 0xD, 0x20, 0x21, 0x23, 0x2A, 0x2B, 0x2D, 0x3A, 0x5F, 0x7E}, escape_byte), nil
return first
end
local last
local function get_last()
last, get_last = list_to_set({0x9, 0xA, 0xC, 0xD, 0x20, 0x21, 0x3A, 0x5F, 0x7E}, escape_byte), nil
return last
end
return function(str)
if #str == 0 then
return str
end
_str, esc, esc_next, esc_next2 = str, nil, nil, nil
str = gsub(str, "()([%s!\"#&'*%-:;<=>IPR[%]_{|}~])", nowiki)
local b = byte(str, 1)
local esc_first = (first or get_first())[b]
if #str == 1 then
return esc_first or (last or get_last())[b] or str
end
local esc_last = (last or get_last())[byte(str, -1)]
if esc_first then
if esc_last then
return esc_first .. sub(str, 2, -2) .. esc_last
end
return esc_first .. sub(str, 2)
elseif esc_last then
return sub(str, 1, -2) .. esc_last
end
return str
end
iqdxq0iiw3rpvozlhmhirkfu3sj92s0
Mòideal:string/endswith
828
16830
86368
2026-07-23T01:27:17Z
Altronic
4137
Copy from English Wiktionary
86368
Scribunto
text/plain
local sub = string.sub
--[==[
Returns {true} if the string {str} ends with the string {val}, or {false} if not. The optional indices {i} and {j} can be used to check a substring of {str}.
Note that {val} is a string literal, not a Lua pattern.]==]
return function(str, val, i, j)
return sub(i == nil and j == nil and str or sub(str, i, j), -#val) == val
end
hct575q94d4jzm7l06a7hand6193e4j
Mòideal:languages/canonical names
828
16831
86369
2026-07-23T01:29:08Z
Altronic
4137
Copy from English Wiktionary
86369
Scribunto
text/plain
return {
["'Are'are"] = "alu",
["A'ou"] = "aou",
["A-Hmao"] = "hmd",
["A-Pucikwar"] = "apq",
["Aari"] = "aiw",
["Aasax"] = "aas",
["Aba"] = "utp",
["Abaga"] = "abg",
["Abai"] = "poz-abi",
["Abai Sungai"] = "abf",
["Abanyom"] = "abm",
["Abau"] = "aau",
["Abaza"] = "abq",
["Abenaki"] = "abe",
["Abenlen Ayta"] = "abp",
["Abidji"] = "abi",
["Abinomn"] = "bsa",
["Abipón"] = "axb",
["Abishira"] = "ash",
["Abkhaz"] = "ab",
["Abom"] = "aob",
["Abon"] = "abo",
["Aborlan Tagbanwa"] = "tbw",
["Abu"] = "ado",
["Abu'"] = "aah",
["Abua"] = "abn",
["Abui"] = "abz",
["Abun"] = "kgr",
["Abung"] = "abl",
["Abure"] = "abu",
["Abureni"] = "mgj",
["Abé"] = "aba",
["Acatepec Me'phaa"] = "tpx",
["Acehnese"] = "ace",
["Achagua"] = "aca",
["Achang"] = "acn",
["Ache"] = "yif",
["Acheron"] = "acz",
["Achi"] = "acr",
["Acholi"] = "ach",
["Achuar"] = "acu",
["Achumawi"] = "acv",
["Aché"] = "guq",
["Acroá"] = "acs",
["Adai"] = "xad",
["Adamorobe Sign Language"] = "ads",
["Adang"] = "adn",
["Adangbe"] = "adq",
["Adangme"] = "ada",
["Adap"] = "adp",
["Adasen"] = "tiu",
["Adele"] = "ade",
["Adhola"] = "adh",
["Adi"] = "adi",
["Adioukrou"] = "adj",
["Adithinngithigh"] = "dth",
["Adivasi Odia"] = "ort",
["Adiwasi Garasia"] = "gas",
["Adnyamathanha"] = "adt",
["Adonara"] = "adr",
["Aduge"] = "adu",
["Adzera"] = "adz",
["Adûni"] = "art-adu",
["Aeka"] = "aez",
["Aekyom"] = "awi",
["Aequian"] = "xae",
["Aer"] = "aeq",
["Afade"] = "aal",
["Afar"] = "aa",
["Afghan Sign Language"] = "afg",
["Afitti"] = "aft",
["Afra"] = "ulf",
["Afrihili"] = "afh",
["Afrikaans"] = "af",
["Afro-Seminole Creole"] = "afs",
["Agarabi"] = "agd",
["Agariya"] = "agi",
["Agatu"] = "agc",
["Agavotaguerra"] = "avo",
["Agawam"] = "alg-aga",
["Aghem"] = "agq",
["Aghu"] = "ahh",
["Aghu Tharrnggala"] = "gtu",
["Aghul"] = "agx",
["Aghwan"] = "xag",
["Agi"] = "aif",
["Agob"] = "kit",
["Agoi"] = "ibm",
["Aguacateca"] = "agu",
["Aguano"] = "aga",
["Aguaruna"] = "agr",
["Aguna"] = "aug",
["Agusan Manobo"] = "msm",
["Agutaynen"] = "agn",
["Agwagwune"] = "yay",
["Ahanta"] = "aha",
["Ahirani"] = "ahr",
["Ahom"] = "aho",
["Ahtna"] = "aht",
["Ahwai"] = "nfd",
["Ai-Cham"] = "aih",
["Aighon"] = "aix",
["Aikanã"] = "tba",
["Aiklep"] = "mwg",
["Aimele"] = "ail",
["Aimol"] = "aim",
["Ainbai"] = "aic",
["Ainu"] = "ain",
["Aiome"] = "aki",
["Airoran"] = "air",
["Aisi"] = "mmq",
["Aiton"] = "aio",
["Aja (East Africa)"] = "aja",
["Aja (West Africa)"] = "ajg",
["Ajawa"] = "ajw",
["Ajië"] = "aji",
["Ak"] = "akq",
["Aka (Central Africa)"] = "axk",
["Aka (Sudan)"] = "soh",
["Aka-Bea"] = "abj",
["Aka-Bo"] = "akm",
["Aka-Cari"] = "aci",
["Aka-Kede"] = "akx",
["Aka-Kol"] = "aky",
["Aka-Kora"] = "ack",
["Akan"] = "ak",
["Akar-Bale"] = "acl",
["Akaselem"] = "aks",
["Akatek"] = "knj",
["Akawaio"] = "ake",
["Ake"] = "aik",
["Akebu"] = "keu",
["Akei"] = "tsr",
["Akeu"] = "aeu",
["Akha"] = "ahk",
["Akhvakh"] = "akv",
["Akkadian"] = "akk",
["Akkala Sami"] = "sia",
["Aklanon"] = "akl",
["Akolet"] = "akt",
["Akoose"] = "bss",
["Akoye"] = "miw",
["Akpa"] = "akf",
["Akpes"] = "ibe",
["Akrukay"] = "afi",
["Akuku"] = "ayk",
["Akum"] = "aku",
["Akuntsu"] = "aqz",
["Akurio"] = "ako",
["Akwa"] = "akw",
["Akyaung Ari"] = "nqy",
["Al-Sayyid Bedouin Sign Language"] = "syy",
["Alaba"] = "alw",
["Alabama"] = "akz",
["Alabat Island Agta"] = "dul",
["Alacatlatzala Mixtec"] = "mim",
["Alago"] = "ala",
["Alagwa"] = "wbj",
["Alak"] = "alk",
["Alamblak"] = "amp",
["Alangan"] = "alj",
["Alanic"] = "xln",
["Alapmunte"] = "apv",
["Alas-Kluet Batak"] = "btz",
["Alawa"] = "alh",
["Alazapa"] = "nai-ala",
["Albanian"] = "sq",
["Albanian Sign Language"] = "sqk",
["Alchuka"] = "tuw-alk",
["Alcozauca Mixtec"] = "xta",
["Alege"] = "alf",
["Alekano"] = "gah",
["Alemannic German"] = "gsw",
["Aleut"] = "ale",
["Algerian Arabic"] = "arq",
["Algerian Sign Language"] = "asp",
["Algonquin"] = "alq",
["Ali"] = "aiy",
["Alladian"] = "ald",
["Allar"] = "all",
["Allentiac"] = "sai-all",
["Alngith"] = "aid",
["Alo Phola"] = "ypo",
["Alorese"] = "aol",
["Aloápam Zapotec"] = "zaq",
["Alsea"] = "aes",
["Alu"] = "mte",
["Alu Kurumba"] = "xua",
["Alugu"] = "aub",
["Alumu-Tesu"] = "aab",
["Alune"] = "alp",
["Alungul"] = "aus-alu",
["Aluo"] = "yna",
["Alur"] = "alz",
["Alutiiq"] = "ems",
["Alutor"] = "alr",
["Alviri-Vidari"] = "avd",
["Alyawarr"] = "aly",
["Ama"] = "amm",
["Amahai"] = "amq",
["Amahuaca"] = "amc",
["Amaimon"] = "ali",
["Amal"] = "aad",
["Amanab"] = "amn",
["Amanayé"] = "ama",
["Amara"] = "aie",
["Amarakaeri"] = "amr",
["Amarasi"] = "aaz",
["Amarizana"] = "awd-ama",
["Amasi"] = "alv-ama",
["Amatlán Zapotec"] = "zpo",
["Amba"] = "rwm",
["Ambai"] = "amk",
["Ambakich"] = "aew",
["Ambala Ayta"] = "abc",
["Ambelau"] = "amv",
["Ambele"] = "ael",
["Amblong"] = "alm",
["Ambo"] = "amb",
["Ambonese Malay"] = "abs",
["Ambrak"] = "aag",
["Ambul"] = "apo",
["Ambulas"] = "abt",
["Amdang"] = "amj",
["Amele"] = "aey",
["American Sign Language"] = "ase",
["Amganad Ifugao"] = "ifa",
["Amharic"] = "am",
["Ami"] = "amy",
["Amis"] = "ami",
["Ammonite"] = "sem-amm",
["Amo"] = "amo",
["Amol"] = "alx",
["Amoltepec Mixtec"] = "mbz",
["Amondawa"] = "adw",
["Amorite"] = "sem-amo",
["Ampanang"] = "apg",
["Ampari Dogon"] = "aqd",
["Amri Karbi"] = "ajz",
["Amto"] = "amt",
["Amurdag"] = "amg",
["Ana Tinga Dogon"] = "dti",
["Anaang"] = "anw",
["Anakalangu"] = "akg",
["Anam"] = "pda",
["Anambé"] = "aan",
["Anamgura"] = "imi",
["Anasi"] = "bpo",
["Anauyá"] = "awd-ana",
["Ancient Greek"] = "grc",
["Ancient Ligurian"] = "xlg",
["Ancient Macedonian"] = "xmk",
["Ancient North Arabian"] = "xna",
["Ancient Zapotec"] = "xzp",
["Andai"] = "afd",
["Andajin"] = "ajn",
["Andalusian Arabic"] = "xaa",
["Andaman Creole Hindi"] = "hca",
["Andaqui"] = "ana",
["Andarum"] = "aod",
["Andegerebinha"] = "adg",
["Andh"] = "anr",
["Andi"] = "ani",
["Andio"] = "bzb",
["Andjingith"] = "aus-and",
["Andoa"] = "anb",
["Andoque"] = "ano",
["Andoquero"] = "sai-and",
["Andra-Hus"] = "anx",
["Aneityum"] = "aty",
["Anem"] = "anz",
["Aneme Wake"] = "aby",
["Anfillo"] = "myo",
["Angaataha"] = "agm",
["Angaité"] = "aqt",
["Angal"] = "age",
["Angal Enen"] = "aoe",
["Angal Heneng"] = "akh",
["Angami"] = "njm",
["Angevin"] = "roa-ang",
["Angguruk Yali"] = "yli",
["Angika"] = "anp",
["Angkamuthi"] = "avm",
["Angkola Batak"] = "akb",
["Angkula"] = "aus-ang",
["Angloromani"] = "rme",
["Angolar"] = "aoa",
["Angor"] = "agg",
["Angoram"] = "aog",
["Angosturas Tunebo"] = "tnd",
["Anguthimri"] = "awg",
["Ani Phowa"] = "ypn",
["Anii"] = "blo",
["Animere"] = "anf",
["Anindilyakwa"] = "aoi",
["Anjam"] = "boj",
["Ankave"] = "aak",
["Anmatyerre"] = "amx",
["Annobonese"] = "fab",
["Anong"] = "nun",
["Anor"] = "anj",
["Anserma"] = "ans",
["Ansus"] = "and",
["Antakarinya"] = "ant",
["Antigua and Barbuda Creole English"] = "aig",
["Antillean Creole"] = "gcf",
["Anu"] = "anl",
["Anuak"] = "anu",
["Anufo"] = "cko",
["Anuki"] = "aui",
["Anus"] = "auq",
["Anuta"] = "aud",
["Anyi"] = "any",
["Anyin Morofo"] = "mtb",
["Anāl"] = "anm",
["Aoheng"] = "pni",
["Aore"] = "aor",
["Ap Ma"] = "kbx",
["Apabhramsa"] = "inc-apa",
["Apalachee"] = "xap",
["Apalaí"] = "apy",
["Apali"] = "ena",
["Apasco-Apoala Mixtec"] = "mip",
["Apatani"] = "apt",
["Apiaká"] = "api",
["Apinayé"] = "apn",
["Apma"] = "app",
["Apolista"] = "awd-apo",
["Apro"] = "ahp",
["Apurinã"] = "apu",
["Apurucayali Ashéninka"] = "cpc",
["Aputai"] = "apx",
["Arabana"] = "ard",
["Arabela"] = "arl",
["Arabic"] = "ar",
["Aragonese"] = "an",
["Araki"] = "akr",
["Arakwal"] = "rkw",
["Aralle-Tabulahan"] = "atq",
["Aramaic"] = "arc",
["Arammba"] = "stk",
["Aranadan"] = "aaf",
["Aranama-Tamique"] = "xrt",
["Arandai"] = "jbj",
["Araona"] = "aro",
["Arapaho"] = "arp",
["Arapaso"] = "arj",
["Arara-Karo"] = "arr",
["Ararandewára"] = "xaj",
["Araweté"] = "awt",
["Arawum"] = "awm",
["Arbore"] = "arv",
["Archi"] = "aqc",
["Are"] = "mwc",
["Areba"] = "aea",
["Arem"] = "aem",
["Argentine Sign Language"] = "aed",
["Argobba"] = "agj",
["Arguni"] = "agf",
["Arhuaco"] = "arh",
["Arhâ"] = "aqr",
["Arhö"] = "aok",
["Ari"] = "aac",
["Aribwatsa"] = "laz",
["Aribwaung"] = "ylu",
["Arifama-Miniafia"] = "aai",
["Arigidi"] = "aqg",
["Arikapú"] = "ark",
["Arikara"] = "ari",
["Arikem"] = "ait",
["Arin"] = "xrn",
["Aringa"] = "luc",
["Armazic"] = "xrm",
["Armenian"] = "hy",
["Armenian Sign Language"] = "aen",
["Aromanian"] = "rup",
["Arop-Lokep"] = "apr",
["Arop-Sissano"] = "aps",
["Arosi"] = "aia",
["Arritinngithigh"] = "rrt",
["Arta"] = "atz",
["Arua"] = "aru",
["Aruamu"] = "msy",
["Aruek"] = "aur",
["Aruop"] = "lsr",
["Arutani"] = "atx",
["Aruá"] = "arx",
["Arára (Mato Grosso)"] = "axg",
["Arára (Pará)"] = "aap",
["As"] = "asz",
["Asaba"] = "seo",
["Asaro'o"] = "mtv",
["Ashe"] = "ahs",
["Ashkun"] = "ask",
["Asho Chin"] = "csh",
["Ashokan Prakrit"] = "inc-ash",
["Ashraaf"] = "cus-ash",
["Asháninka"] = "cni",
["Asi"] = "bno",
["Asilulu"] = "asl",
["Askopan"] = "eiv",
["Asoa"] = "asv",
["Assamese"] = "as",
["Assan"] = "xss",
["Assangori"] = "sjg",
["Assiniboine"] = "asb",
["Assyrian Neo-Aramaic"] = "aii",
["Asturian"] = "ast",
["Asu"] = "aum",
["Asue Awyu"] = "psa",
["Asumboa"] = "aua",
["Asunción Mixtepec Zapotec"] = "zoo",
["Asuri"] = "asr",
["Ata"] = "atm",
["Ata Manobo"] = "atd",
["Atakapa"] = "aqp",
["Atampaya"] = "amz",
["Atanques"] = "cba-ata",
["Atatláhuca Mixtec"] = "mib",
["Atauran"] = "adb",
["Atayal"] = "tay",
["Atemble"] = "ate",
["Ateso"] = "teo",
["Athpare"] = "aph",
["Ati"] = "atk",
["Atikamekw"] = "atj",
["Atohwaim"] = "aqm",
["Atong (Cameroon)"] = "ato",
["Atong (India)"] = "aot",
["Atorada"] = "aox",
["Atsahuaca"] = "atc",
["Atsam"] = "cch",
["Atsugewi"] = "atw",
["Attapady Kurumba"] = "pkr",
["Attié"] = "ati",
["Au"] = "avt",
["Auhelawa"] = "kud",
["Aukan"] = "djk",
["Aulua"] = "aul",
["Aurá"] = "aux",
["Aushi"] = "auh",
["Aushiri"] = "avs",
["Auslan"] = "asf",
["Austral"] = "aut",
["Australian Aboriginal Sign Language"] = "asw",
["Australian Kriol"] = "rop",
["Austrian Sign Language"] = "asq",
["Auwe"] = "smf",
["Auyana"] = "auy",
["Auye"] = "auu",
["Auyokawa"] = "auo",
["Avar"] = "av",
["Avatime"] = "avn",
["Avau"] = "avb",
["Avava"] = "tmb",
["Avestan"] = "ae",
["Avikam"] = "avi",
["Avokaya"] = "avu",
["Avá-Canoeiro"] = "avv",
["Awa (China)"] = "vwa",
["Awa (New Guinea)"] = "awb",
["Awa-Cuaiquer"] = "kwi",
["Awabakal"] = "awk",
["Awadhi"] = "awa",
["Awak"] = "awo",
["Awar"] = "aya",
["Awara"] = "awx",
["Awbono"] = "awh",
["Aweer"] = "bob",
["Awera"] = "awr",
["Awetí"] = "awe",
["Awing"] = "azo",
["Awjila"] = "auj",
["Awngi"] = "awn",
["Awngthim"] = "gwm",
["Awtuw"] = "kmn",
["Awun"] = "aww",
["Awutu"] = "afu",
["Awyi"] = "auw",
["Axamb"] = "ahb",
["Axi"] = "yix",
["Ayabadhu"] = "ayd",
["Ayautla Mazatec"] = "vmy",
["Ayere"] = "aye",
["Ayerrerenge"] = "axe",
["Ayi"] = "ayq",
["Ayizi"] = "yyz",
["Ayizo"] = "ayb",
["Aymara"] = "ay",
["Ayomán"] = "sai-ayo",
["Ayoquesco Zapotec"] = "zaf",
["Ayoreo"] = "ayo",
["Ayu"] = "ayu",
["Ayutla Mixtec"] = "miy",
["Azerbaijani"] = "az",
["Azha"] = "aza",
["Azhe"] = "yiz",
["Azoyú Me'phaa"] = "tpc",
["Baa"] = "kwb",
["Baagandji"] = "drl",
["Baan"] = "bvj",
["Baangi"] = "bqx",
["Baatonum"] = "bba",
["Baba"] = "bbw",
["Baba Malay"] = "mbf",
["Babango"] = "bbm",
["Babanki"] = "bbk",
["Babatana"] = "baa",
["Babine-Witsuwit'en"] = "bcr",
["Babole"] = "bvx",
["Babungo"] = "bav",
["Babuza"] = "bzg",
["Bacama"] = "bcy",
["Bacanese Malay"] = "btj",
["Bactrian"] = "xbc",
["Bada"] = "bhz",
["Badaga"] = "bfq",
["Badanchi"] = "bau",
["Bade"] = "bde",
["Badeshi"] = "bdz",
["Badimaya"] = "bia",
["Badjiri"] = "jbi",
["Baduy"] = "bac",
["Badyara"] = "pbp",
["Baeggu"] = "bvd",
["Baekje"] = "pkc",
["Baelelea"] = "bvc",
["Baenan"] = "sai-bae",
["Baetora"] = "btr",
["Bafanji"] = "bfj",
["Bafaw"] = "bwt",
["Bafia"] = "ksf",
["Bafut"] = "bfd",
["Baga Kaloum"] = "bqf",
["Baga Koga"] = "bgo",
["Baga Manduri"] = "bmd",
["Baga Pokur"] = "bcg",
["Baga Sitemu"] = "bsp",
["Baga Sobané"] = "bsv",
["Bagheli"] = "bfy",
["Bagirmi"] = "bmi",
["Bago-Kusuntu"] = "bqg",
["Bagri"] = "bgq",
["Bagua"] = "sai-bag",
["Bagupi"] = "bpi",
["Bagusa"] = "bqb",
["Bagvalal"] = "kva",
["Baha"] = "yha",
["Baham"] = "bdw",
["Bahamian Creole"] = "bah",
["Baharna Arabic"] = "abv",
["Bahau"] = "bhv",
["Bahinemo"] = "bjh",
["Bahing"] = "bhj",
["Bahnar"] = "bdq",
["Bahonsuai"] = "bsu",
["Bai (South Sudan)"] = "bdj",
["Baibai"] = "bbf",
["Baikeno"] = "bkx",
["Bailang"] = "tbq-blg",
["Baima"] = "bqh",
["Baimak"] = "bmx",
["Bainouk Gubeeher"] = "alv-bgu",
["Bainouk-Gunyaamolo"] = "bcz",
["Bainouk-Gunyuño"] = "bab",
["Bainouk-Samik"] = "bcb",
["Baiso"] = "bsw",
["Baissa Fali"] = "fah",
["Bajan"] = "bjs",
["Bajelani"] = "bjm",
["Bajjika"] = "vjk",
["Baka"] = "bkc",
["Bakairí"] = "bkq",
["Bakaka"] = "bqz",
["Bakhtiari"] = "bqi",
["Baki"] = "bki",
["Bakoko"] = "bkh",
["Bakole"] = "kme",
["Bakpinka"] = "bbs",
["Bakulung"] = "bbu",
["Bakumpai"] = "bkr",
["Bakung"] = "xkl",
["Bakwé"] = "bjw",
["Bala"] = "tuw-bal",
["Balaesang"] = "bls",
["Balangao"] = "blw",
["Balangingi"] = "sse",
["Balanta-Ganja"] = "bjt",
["Balanta-Kentohe"] = "ble",
["Balantak"] = "blz",
["Balau"] = "blg",
["Baldemu"] = "bdn",
["Bali"] = "bcp",
["Baliledo"] = "poz-bal",
["Balinese"] = "ban",
["Balinese Malay"] = "mhp",
["Balkan Gagauz Turkish"] = "bgx",
["Balkan Romani"] = "rmn",
["Balo"] = "bqo",
["Baloi"] = "biz",
["Balong"] = "bnt-bal",
["Balti"] = "bft",
["Baltic Romani"] = "rml",
["Baluan-Pam"] = "blq",
["Baluchi"] = "bal",
["Bamako Sign Language"] = "bog",
["Bamali"] = "bbq",
["Bambalang"] = "bmo",
["Bambam"] = "ptu",
["Bambara"] = "bm",
["Bambassi"] = "myf",
["Bambili-Bambui"] = "baw",
["Bamenyam"] = "bce",
["Bamu"] = "bcf",
["Bamukumbit"] = "bqt",
["Bamum"] = "bax",
["Bamunka"] = "bvm",
["Bamwe"] = "bmg",
["Ban Khor Sign Language"] = "bfk",
["Bana"] = "bcw",
["Banao Itneg"] = "bjx",
["Banaro"] = "byz",
["Banda"] = "bnd",
["Banda Malay"] = "bpq",
["Banda-Bambari"] = "liy",
["Banda-Banda"] = "bpd",
["Banda-Mbrès"] = "bqk",
["Banda-Ndélé"] = "bfl",
["Banda-Yangere"] = "yaj",
["Bandi"] = "bza",
["Bandial"] = "bqj",
["Bandjalang"] = "bdy",
["Bangala"] = "bxg",
["Bangandu"] = "bgf",
["Bangba"] = "bbe",
["Banggai"] = "bgz",
["Bangi"] = "bni",
["Bangime"] = "dba",
["Bangka"] = "mfb",
["Bangolan"] = "bgj",
["Bangru"] = "sit-ban",
["Bangubangu"] = "bnx",
["Bangwinji"] = "bsj",
["Baniva"] = "bvv",
["Baniwa"] = "bwi",
["Banjarese"] = "bjn",
["Banka"] = "bxw",
["Bankan Tey Dogon"] = "dbw",
["Bankon"] = "abb",
["Banoni"] = "bcm",
["Bantawa"] = "bap",
["Bantayanon"] = "bfx",
["Bantik"] = "bnq",
["Banyumasan"] = "map-bms",
["Baoule"] = "bci",
["Baraamu"] = "brd",
["Barai"] = "bbb",
["Barakai"] = "baj",
["Baram Kayan"] = "kys",
["Barama"] = "bbg",
["Barambu"] = "brm",
["Baramu"] = "bmz",
["Barapasi"] = "brp",
["Baras"] = "brs",
["Barasana"] = "bsn",
["Barbareño"] = "boi",
["Barclayville Grebo"] = "gry",
["Bardi"] = "bcj",
["Barein"] = "bva",
["Bargam"] = "mlp",
["Bari"] = "bfa",
["Bariai"] = "bch",
["Bariji"] = "bjc",
["Barikanchi"] = "bxo",
["Barikewa"] = "jbk",
["Barngarla"] = "bjb",
["Barok"] = "bjk",
["Barombi"] = "bbi",
["Barranbinya"] = "aus-bra",
["Barro Negro Tunebo"] = "tbn",
["Barrow Point"] = "bpt",
["Baruga"] = "bjz",
["Barunggam"] = "aus-brm",
["Baruya"] = "byr",
["Barwe"] = "bwg",
["Barzani Jewish Neo-Aramaic"] = "bjf",
["Baré"] = "bae",
["Barí"] = "mot",
["Basa"] = "bzw",
["Basa-Gumna"] = "bsl",
["Basa-Gurmana"] = "buj",
["Basaa"] = "bas",
["Basap"] = "bdb",
["Basay"] = "byq",
["Bashkardi"] = "bsg",
["Bashkir"] = "ba",
["Basketo"] = "bst",
["Basque"] = "eu",
["Basque-Icelandic Pidgin"] = "crp-bip",
["Bassa"] = "bsq",
["Bassa-Kontagora"] = "bsr",
["Bassari"] = "bsc",
["Bassossi"] = "bsi",
["Bata"] = "bta",
["Bataan Ayta"] = "ayt",
["Batad Ifugao"] = "ifb",
["Batanga"] = "bnm",
["Batek"] = "btq",
["Bateri"] = "btv",
["Bathari"] = "bhm",
["Bati (Cameroon)"] = "btc",
["Bati (Indonesia)"] = "bvt",
["Bats"] = "bbl",
["Batu"] = "btu",
["Batui"] = "zbt",
["Batuley"] = "bay",
["Bau"] = "bbd",
["Bau Bidayuh"] = "sne",
["Bauchi"] = "bsf",
["Bauni"] = "bpe",
["Baure"] = "brg",
["Bauria"] = "bge",
["Bauro"] = "bxa",
["Bauwaki"] = "bwk",
["Bauzi"] = "bvz",
["Bavarian"] = "bar",
["Bawm Chin"] = "bgr",
["Bay Miwok"] = "mkq",
["Bayali"] = "bjy",
["Baybayanon"] = "bvy",
["Baygo"] = "byg",
["Bayogoula"] = "nai-bay",
["Bayono"] = "byl",
["Bayot"] = "bda",
["Bayungu"] = "bxj",
["Bazigar"] = "bfr",
["Beami"] = "beo",
["Beary"] = "dra-bry",
["Beaver"] = "bea",
["Beba"] = "bfp",
["Bebe"] = "bzv",
["Bebele"] = "beb",
["Bebeli"] = "bek",
["Bebil"] = "bxp",
["Bedik"] = "tnr",
["Bedjond"] = "bjv",
["Bedoanas"] = "bed",
["Beeke"] = "bkf",
["Beele"] = "bxq",
["Beembe"] = "beq",
["Beezen"] = "bnz",
["Befang"] = "bby",
["Begbere-Ejar"] = "bqv",
["Beja"] = "bej",
["Bekati'"] = "bei",
["Bekwarra"] = "bkv",
["Bekwel"] = "bkw",
["Belait"] = "beg",
["Belanda Bor"] = "bxb",
["Belanda Viri"] = "bvi",
["Belarusian"] = "be",
["Belhariya"] = "byw",
["Beli (New Guinea)"] = "bey",
["Beli (South Sudan)"] = "blm",
["Belizean Creole"] = "bzj",
["Bella Coola"] = "blc",
["Bellari"] = "brw",
["Belter Creole"] = "art-bel",
["Bemba"] = "bem",
["Bembe"] = "bmb",
["Ben Tey"] = "dbt",
["Bena"] = "yun",
["Benabena"] = "bef",
["Bench"] = "bcq",
["Bende"] = "bdp",
["Bendi"] = "bct",
["Beneraf"] = "bnv",
["Beng"] = "nhb",
["Benga"] = "bng",
["Bengali"] = "bn",
["Benggoi"] = "bgy",
["Bengkala Sign Language"] = "bqy",
["Bentong"] = "bnu",
["Benyadu'"] = "byd",
["Beothuk"] = "bue",
["Bepour"] = "bie",
["Bera"] = "brf",
["Berakou"] = "bxv",
["Berau Malay"] = "bve",
["Berawan"] = "lod",
["Berbice Creole Dutch"] = "brc",
["Bergish"] = "gmw-bgh",
["Berik"] = "bkl",
["Berinomo"] = "bit",
["Berom"] = "bom",
["Berta"] = "wti",
["Berti"] = "byt",
["Besisi"] = "mhe",
["Besme"] = "bes",
["Besoa"] = "bep",
["Betaf"] = "bfe",
["Betawi"] = "bew",
["Bete"] = "byf",
["Bete-Bendi"] = "btt",
["Betoi"] = "sai-bet",
["Betta Kurumba"] = "xub",
["Bezhta"] = "kap",
["Bhadrawahi"] = "bhd",
["Bhalay"] = "bhx",
["Bharia"] = "bha",
["Bhatri"] = "bgw",
["Bhattiyali"] = "bht",
["Bhaya"] = "bhe",
["Bhele"] = "bhy",
["Bhilali"] = "bhi",
["Bhili"] = "bhb",
["Bhojpuri"] = "bho",
["Bhoti Kinnauri"] = "nes",
["Bhunjia"] = "bhu",
["Biafada"] = "bif",
["Biage"] = "bdf",
["Biak"] = "bhw",
["Biali"] = "beh",
["Bian Marind"] = "bpv",
["Biangai"] = "big",
["Biao"] = "byk",
["Biao Mon"] = "bmt",
["Biao-Jiao Mien"] = "bje",
["Biatah Bidayuh"] = "bth",
["Bibaali"] = "bcn",
["Bibbulman"] = "xbp",
["Bidiyo"] = "bid",
["Bidyara"] = "bym",
["Bidyogo"] = "bjg",
["Biem"] = "bmc",
["Bierebo"] = "bnk",
["Bieria"] = "brj",
["Biete"] = "biu",
["Big Nambas"] = "nmb",
["Biga"] = "bhc",
["Bigambal"] = "xbe",
["Bih"] = "ibh",
["Bihari"] = "bh",
["Bijori"] = "bix",
["Bikya"] = "byb",
["Bila"] = "bip",
["Bilaspuri"] = "kfs",
["Bilba"] = "bpz",
["Bilbil"] = "brz",
["Bile"] = "bil",
["Biliau"] = "bcu",
["Biloxi"] = "bll",
["Bilua"] = "blb",
["Bilur"] = "bxf",
["Bima"] = "bhp",
["Bimin"] = "bhl",
["Bimoba"] = "bim",
["Bina"] = "bmn",
["Binahari"] = "bxz",
["Binandere"] = "bhg",
["Binawa"] = "byj",
["Bindal"] = "xbd",
["Bine"] = "bon",
["Binji"] = "bpj",
["Binongan Itneg"] = "itb",
["Bintauna"] = "bne",
["Bintulu"] = "bny",
["Binukid"] = "bkd",
["Binumarien"] = "bjr",
["Bipi"] = "biq",
["Birao"] = "brr",
["Birgid"] = "brk",
["Birgit"] = "btf",
["Birhor"] = "biy",
["Biri"] = "bzr",
["Biritai"] = "bqq",
["Birri"] = "bvq",
["Birrpayi"] = "xbj",
["Birwa"] = "brl",
["Biseni"] = "ije",
["Bishnupriya Manipuri"] = "bpy",
["Bishuo"] = "bwh",
["Bisis"] = "bnw",
["Bislama"] = "bi",
["Bisorio"] = "bir",
["Bissa"] = "bib",
["Bisu"] = "bzi",
["Bit"] = "bgk",
["Bitare"] = "brt",
["Bitur"] = "mcc",
["Biwat"] = "bwm",
["Biyo"] = "byo",
["Biyom"] = "bpm",
["Blablanga"] = "blp",
["Black Speech"] = "art-bsp",
["Blackfoot"] = "bla",
["Blafe"] = "bfh",
["Blagar"] = "beu",
["Blang"] = "blr",
["Blin"] = "byn",
["Bo"] = "bgl",
["Bo-Rukul"] = "mae",
["Bo-Ung"] = "mux",
["Boano (Maluku)"] = "bzn",
["Boano (Sulawesi)"] = "bzl",
["Bobongko"] = "bgb",
["Bobot"] = "bty",
["Bodo (Central Africa)"] = "boy",
["Bodo (India)"] = "brx",
["Bodo Gadaba"] = "gbj",
["Bodo Parja"] = "bdv",
["Bofi"] = "bff",
["Boga"] = "bvw",
["Bogaya"] = "boq",
["Boghom"] = "bux",
["Boguru"] = "bqu",
["Bohtan Neo-Aramaic"] = "bhn",
["Boikin"] = "bzf",
["Bokar"] = "sit-bok",
["Bokha"] = "ybk",
["Boko"] = "bqc",
["Bokobaru"] = "bus",
["Bokoto"] = "bdt",
["Bokyi"] = "bky",
["Bola"] = "bnp",
["Bolak"] = "art-blk",
["Bolango"] = "bld",
["Bole"] = "bol",
["Bolgo"] = "bvo",
["Bolia"] = "bli",
["Bolinao"] = "smk",
["Bolivian Sign Language"] = "bvl",
["Boloki"] = "bkt",
["Bolon"] = "bof",
["Bolondo"] = "bzm",
["Bolyu"] = "ply",
["Bom"] = "bmf",
["Boma Nkuu"] = "bnt-bon",
["Boma Yumu"] = "bnt-boy",
["Bomboli"] = "bml",
["Bomboma"] = "bws",
["Bomitaba"] = "zmx",
["Bomu"] = "bmq",
["Bomwali"] = "bmw",
["Bon Gula"] = "glc",
["Bonan"] = "peh",
["Bondei"] = "bou",
["Bondo"] = "bfw",
["Bondoukou Kulango"] = "kzc",
["Bondum Dom Dogon"] = "dbu",
["Bonerate"] = "bna",
["Bonggi"] = "bdg",
["Bonggo"] = "bpg",
["Bongili"] = "bui",
["Bongo"] = "bot",
["Bongu"] = "bpu",
["Bonjo"] = "bok",
["Bonkeng"] = "bvg",
["Bonkiman"] = "bop",
["Bookan"] = "bnb",
["Boon"] = "bnl",
["Boor"] = "bvf",
["Bora"] = "boa",
["Border Kuna"] = "kvn",
["Borei"] = "gai",
["Boro"] = "xxb",
["Borong"] = "ksr",
["Boruca"] = "brn",
["Borôro"] = "bor",
["Boselewa"] = "bwf",
["Bosngun"] = "bqs",
["Bote-Majhi"] = "bmj",
["Botlikh"] = "bph",
["Botolan Sambal"] = "sbl",
["Bouna Kulango"] = "nku",
["Bouni"] = "suo",
["Bourbonnais-Berrichon"] = "roa-bbn",
["Bourguignon"] = "roa-brg",
["Bouyei"] = "pcc",
["Bozaba"] = "bzo",
["Bragat"] = "aof",
["Brahui"] = "brh",
["Braj"] = "bra",
["Brazilian Sign Language"] = "bzs",
["Brek Karen"] = "kvl",
["Brem"] = "buq",
["Breri"] = "brq",
["Breton"] = "br",
["Bribri"] = "bzd",
["British Sign Language"] = "bfi",
["Brokkat"] = "bro",
["Brokpake"] = "sgt",
["Brokskat"] = "bkk",
["Brooke's Point Palawano"] = "plw",
["Broome Pearling Lugger Pidgin"] = "bpl",
["Brunei Bisaya"] = "bsb",
["Brunei Malay"] = "kxd",
["Bruny Island"] = "xpz",
["Bu"] = "jid",
["Bu-Nao Bunu"] = "bwx",
["Bua"] = "bub",
["Bualkhaw Chin"] = "cbl",
["Buamu"] = "box",
["Bube"] = "bvb",
["Bubi"] = "buw",
["Bubia"] = "bbx",
["Budeh Stieng"] = "stt",
["Budibud"] = "btp",
["Budong-Budong"] = "bdx",
["Budu"] = "buu",
["Budukh"] = "bdk",
["Buduma"] = "bdm",
["Budza"] = "bja",
["Buena Vista Yokuts"] = "yok-bvy",
["Bugan"] = "bbh",
["Bughotu"] = "bgt",
["Buginese"] = "bug",
["Buglere"] = "sab",
["Bugun"] = "bgg",
["Buhi'non Bikol"] = "ubl",
["Buhid"] = "bku",
["Buhutu"] = "bxh",
["Bujhyal"] = "byh",
["Bukar-Sadung Bidayuh"] = "sdo",
["Bukat"] = "bvk",
["Bukawa"] = "buk",
["Bukhari"] = "bhh",
["Bukit Malay"] = "bvu",
["Bukitan"] = "bkn",
["Bukiyip"] = "ape",
["Buksa"] = "tkb",
["Bukusu"] = "bxk",
["Bulgar"] = "xbo",
["Bulgarian"] = "bg",
["Bulgarian Sign Language"] = "bqn",
["Bulgebi"] = "bmp",
["Buli (Ghana)"] = "bwu",
["Buli (Indonesia)"] = "bzq",
["Bulo Stieng"] = "sti",
["Bulu (Cameroon)"] = "bum",
["Bulu (New Guinea)"] = "bjl",
["Bulungan"] = "blj",
["Bum"] = "bmv",
["Bumaji"] = "byp",
["Bumang"] = "bvp",
["Bumbita Arapesh"] = "aon",
["Bumthangkha"] = "kjz",
["Bun"] = "buv",
["Buna"] = "bvn",
["Bunaba"] = "bck",
["Bunak"] = "bfn",
["Bunama"] = "bdd",
["Bundeli"] = "bns",
["Bung"] = "bqd",
["Bungain"] = "but",
["Bunganditj"] = "xbg",
["Bungku"] = "bkz",
["Bungu"] = "wun",
["Bunoge"] = "dgb",
["Bunun"] = "bnn",
["Buol"] = "blf",
["Bura"] = "bwr",
["Bura Mabang"] = "mde",
["Burak"] = "bys",
["Buraka"] = "bkg",
["Burarra"] = "bvr",
["Burate"] = "bti",
["Burduna"] = "bxn",
["Bure"] = "bvh",
["Burgundian"] = "gme-bur",
["Burji"] = "bji",
["Burmbar"] = "vrt",
["Burmese"] = "my",
["Burmeso"] = "bzu",
["Buru (Indonesia)"] = "mhs",
["Buru (Nigeria)"] = "bqw",
["Burui"] = "bry",
["Burumakok"] = "aip",
["Burun"] = "bdi",
["Burundian Sign Language"] = "lsb",
["Burunge"] = "bds",
["Burushaski"] = "bsk",
["Burusu"] = "bqr",
["Buruwai"] = "asi",
["Buryat"] = "bua",
["Busa"] = "bqp",
["Busam"] = "bxs",
["Busami"] = "bsm",
["Busang Kayan"] = "bfg",
["Bushoong"] = "buf",
["Buso"] = "bso",
["Busoa"] = "bup",
["Bussa"] = "dox",
["Busuu"] = "bju",
["Butbut Kalinga"] = "kyb",
["Butchulla"] = "xby",
["Butmas-Tur"] = "bnr",
["Butuanon"] = "btw",
["Buwal"] = "bhs",
["Buyeo"] = "xpy",
["Buyu"] = "byi",
["Buyuan Jino"] = "jiy",
["Bwa"] = "bww",
["Bwaidoka"] = "bwd",
["Bwala"] = "bnt-bwa",
["Bwanabwana"] = "tte",
["Bwatoo"] = "bwa",
["Bwe Karen"] = "bwe",
["Bwela"] = "bwl",
["Bwile"] = "bwc",
["Bwisi"] = "bwz",
["Byangsi"] = "bee",
["Byep"] = "mkk",
["Bädi Kanum"] = "khd",
["Caac"] = "msq",
["Cabiyarí"] = "cbb",
["Cabre"] = "awd-cab",
["Cabécar"] = "cjp",
["Cacaloxtepec Mixtec"] = "miu",
["Cacaopera"] = "ccr",
["Cacgia Roglai"] = "roc",
["Cacua"] = "cbv",
["Cacán"] = "sai-cac",
["Caddo"] = "cad",
["Cafundó"] = "ccd",
["Cahuarano"] = "cah",
["Cahuilla"] = "chl",
["Caijia"] = "sit-cai",
["Cajonos Zapotec"] = "zad",
["Caka"] = "ckx",
["Cakfem-Mushere"] = "cky",
["Calabrian Greek"] = "grk-cal",
["Calamian Tagbanwa"] = "tbk",
["Calusa"] = "nai-cal",
["Caluyanun"] = "clu",
["Caló"] = "rmq",
["Camarines Norte Agta"] = "abd",
["Cambodian Sign Language"] = "csx",
["Cameroon Mambila"] = "mcu",
["Cameroon Pidgin"] = "wes",
["Campalagian"] = "cml",
["Camsá"] = "kbh",
["Camtho"] = "cmt",
["Camunic"] = "xcc",
["Candoshi-Shapra"] = "cbu",
["Canela"] = "ram",
["Canichana"] = "caz",
["Cantabrian"] = "roa-can",
["Cantonese"] = "yue",
["Cao Miao"] = "cov",
["Caolan"] = "mlc",
["Capanahua"] = "kaq",
["Capiznon"] = "cps",
["Cappadocian Greek"] = "cpg",
["Caquinte"] = "cot",
["Car Nicobarese"] = "caq",
["Cara"] = "cfd",
["Carabayo"] = "cby",
["Caramanta"] = "crf",
["Caranqui"] = "sai-caq",
["Carapana"] = "cbc",
["Carian"] = "xcr",
["Cariay"] = "awd-kar",
["Caribbean Hindustani"] = "hns",
["Caribbean Javanese"] = "jvn",
["Carijona"] = "cbd",
["Carolina Algonquian"] = "crr",
["Carolinian"] = "cal",
["Carpathian Romani"] = "rmc",
["Carpathian Rusyn"] = "rue",
["Carrier"] = "crx",
["Cashibo-Cacataibo"] = "cbr",
["Cashinahua"] = "cbs",
["Casiguran Dumagat Agta"] = "dgc",
["Casuarina Coast Asmat"] = "asc",
["Catacao"] = "sai-cat",
["Catalan"] = "ca",
["Catalan Sign Language"] = "csc",
["Catawba"] = "chc",
["Catuquinaru"] = "sai-ctq",
["Catío Chibcha"] = "cba-cat",
["Cavineña"] = "cav",
["Cayubaba"] = "cyb",
["Cayuga"] = "cay",
["Cayuse"] = "xcy",
["Cazcan"] = "azc-caz",
["Cañari"] = "sai-cnr",
["Cebaara"] = "sef",
["Cebuano"] = "ceb",
["Celtiberian"] = "xce",
["Cen"] = "cen",
["Central Asmat"] = "cns",
["Central Atlas Tamazight"] = "tzm",
["Central Awyu"] = "awu",
["Central Bai"] = "bca",
["Central Bikol"] = "bcl",
["Central Bontoc"] = "lbk",
["Central Cagayan Agta"] = "agt",
["Central Dusun"] = "dtp",
["Central Franconian"] = "gmw-cfr",
["Central Grebo"] = "grv",
["Central Huasteca Nahuatl"] = "nch",
["Central Huishui Hmong"] = "hmc",
["Central Kurdish"] = "ckb",
["Central Mahuatlán Zapotec"] = "zam",
["Central Malay"] = "pse",
["Central Mansi"] = "mns-cen",
["Central Masela"] = "mxz",
["Central Mashan Hmong"] = "hmm",
["Central Mazahua"] = "maz",
["Central Melanau"] = "mel",
["Central Min"] = "czo",
["Central Mnong"] = "cmo",
["Central Nahuatl"] = "nhn",
["Central Nicobarese"] = "ncb",
["Central Ojibwa"] = "ojc",
["Central Palawano"] = "plc",
["Central Pame"] = "pbs",
["Central Pomo"] = "poo",
["Central Puebla Nahuatl"] = "ncx",
["Central Sama"] = "sml",
["Central Siberian Yupik"] = "ess",
["Central Sierra Miwok"] = "csm",
["Central Subanen"] = "syb",
["Central Tagbanwa"] = "tgt",
["Central Tarahumara"] = "tar",
["Central Teke"] = "nzu",
["Central Tunebo"] = "tuf",
["Centúúm"] = "cet",
["Cerma"] = "cme",
["Ch'olti'"] = "myn-chl",
["Ch'orti'"] = "caa",
["Chaap Wuurong"] = "tjw",
["Chachi"] = "cbi",
["Chadian Arabic"] = "shu",
["Chadian Sign Language"] = "cds",
["Chadong"] = "cdy",
["Chagatai"] = "chg",
["Chaha"] = "sem-cha",
["Chaima"] = "ciy",
["Chairel"] = "sit-cha",
["Chak"] = "ckh",
["Chakali"] = "cli",
["Chakma"] = "ccp",
["Chala"] = "cll",
["Chaldean Neo-Aramaic"] = "cld",
["Chali"] = "tgf",
["Chamacoco"] = "ceg",
["Chamalal"] = "cji",
["Chamba Daka"] = "ccg",
["Chamba Leko"] = "ndi",
["Chambeali"] = "cdh",
["Chambri"] = "can",
["Chamicuro"] = "ccc",
["Chamling"] = "rab",
["Chamorro"] = "ch",
["Champenois"] = "roa-cha",
["Chang"] = "nbc",
["Changriwa"] = "cga",
["Changthang"] = "cna",
["Chantyal"] = "chx",
["Chaná"] = "sai-chn",
["Chané"] = "caj",
["Chapacura"] = "sai-chp",
["Chara"] = "cra",
["Charrua"] = "sai-chr",
["Chaudangsi"] = "cdn",
["Chaura"] = "crv",
["Chavacano"] = "cbk",
["Chayahuita"] = "cbt",
["Chayuco Mixtec"] = "mih",
["Chazumba Mixtec"] = "xtb",
["Che"] = "ruk",
["Chechen"] = "ce",
["Cheke Holo"] = "mrn",
["Chemakum"] = "xch",
["Chenapian"] = "cjn",
["Chenchu"] = "cde",
["Chenoua"] = "cnu",
["Chepang"] = "cdm",
["Chepya"] = "ycp",
["Cherepon"] = "cpn",
["Cherokee"] = "chr",
["Chesu"] = "ych",
["Chetco-Tolowa"] = "ctc",
["Chewong"] = "cwg",
["Cheyenne"] = "chy",
["Chhattisgarhi"] = "hne",
["Chhintange"] = "ctn",
["Chhulung"] = "cur",
["Chiangmai Sign Language"] = "csd",
["Chiapanec"] = "cip",
["Chibcha"] = "chb",
["Chicahuaxtla Triqui"] = "trs",
["Chichewa"] = "ny",
["Chichicapan Zapotec"] = "zpv",
["Chichimeca-Jonaz"] = "pei",
["Chichonyi-Chidzihana-Chikauma"] = "coh",
["Chickasaw"] = "cic",
["Chicomuceltec"] = "cob",
["Chiduruma"] = "dug",
["Chigmecatitlán Mixtec"] = "mii",
["Chilcotin"] = "clc",
["Chilean Sign Language"] = "csg",
["Chilisso"] = "clh",
["Chiltepec Chinantec"] = "csa",
["Chimalapa Zoque"] = "zoh",
["Chimariko"] = "cid",
["Chimila"] = "cbg",
["Chimwiini"] = "bnt-cmw",
["Chinali"] = "cih",
["Chinbon Chin"] = "cnb",
["Chinese"] = "zh",
["Chinese Pidgin English"] = "cpi",
["Chinese Pidgin Russian"] = "crp-cpr",
["Chinese Sign Language"] = "csl",
["Chinook"] = "chh",
["Chinook Jargon"] = "chn",
["Chipaya"] = "cap",
["Chipewyan"] = "chp",
["Chiquihuitlán Mazatec"] = "maq",
["Chiquimulilla"] = "nai-chi",
["Chiquitano"] = "cax",
["Chiricahua"] = "apm",
["Chirino"] = "sai-chi",
["Chiripá"] = "nhd",
["Chiru"] = "cdf",
["Chitimacha"] = "ctm",
["Chitkuli Kinnauri"] = "cik",
["Chittagonian"] = "ctg",
["Chitwania Tharu"] = "the",
["Chiwere"] = "iow",
["Choapan Zapotec"] = "zpc",
["Chocangaca"] = "cgk",
["Chochotec"] = "coz",
["Choctaw"] = "cho",
["Chodri"] = "cdi",
["Chokri Naga"] = "nri",
["Chokwe"] = "cjk",
["Chol"] = "ctu",
["Cholón"] = "cht",
["Chong"] = "cog",
["Choni"] = "cda",
["Chono"] = "sai-cno",
["Chontal Maya"] = "chf",
["Chopi"] = "cce",
["Chothe Naga"] = "nct",
["Chrau"] = "crw",
["Chru"] = "cje",
["Chuabo"] = "chw",
["Chuanqiandian Cluster Miao"] = "cqd",
["Chuave"] = "cjv",
["Chug"] = "cvg",
["Chuj"] = "cac",
["Chuka"] = "cuh",
["Chukchi"] = "ckt",
["Chukwa"] = "cuw",
["Chulym"] = "clw",
["Chumburung"] = "ncu",
["Chungli Ao"] = "njo-jgl",
["Churahi"] = "cdj",
["Church Slavonic"] = "zls-chs",
["Churuya"] = "sai-chu",
["Chut"] = "scb",
["Chuukese"] = "chk",
["Chuvan"] = "xcv",
["Chuvash"] = "cv",
["Chácobo"] = "cao",
["Ci Gbe"] = "cib",
["Cia-Cia"] = "cia",
["Cibak"] = "ckl",
["Cicipu"] = "awc",
["Ciguayo"] = "nai-cig",
["Cimbrian"] = "cim",
["Cinamiguin Manobo"] = "mkx",
["Cinda-Regi-Tiyal"] = "cdr",
["Cineni"] = "cie",
["Cinta Larga"] = "cin",
["Cishingini"] = "asg",
["Citak"] = "txt",
["Ciwogai"] = "tgd",
["Classical Chinese"] = "lzh",
["Classical Gaelic"] = "ghc",
["Classical Guarani"] = "gn-cls",
["Classical Mandaic"] = "myz",
["Classical Mongolian"] = "cmg",
["Classical Nahuatl"] = "nci",
["Classical Newar"] = "nwc",
["Classical Quechua"] = "qwc",
["Classical Syriac"] = "syc",
["Classical Tibetan"] = "xct",
["Coahuilteco"] = "xcw",
["Coast Miwok"] = "csi",
["Coastal Kadazan"] = "kzj",
["Coastal Konjo"] = "kjc",
["Coatecas Altas Zapotec"] = "zca",
["Coatepec Nahuatl"] = "naz",
["Coatlán Mixe"] = "mco",
["Coatlán Zapotec"] = "zps",
["Coatzospan Mixtec"] = "miz",
["Cocama"] = "cod",
["Cochimi"] = "coj",
["Cocopa"] = "coc",
["Cocos Islands Malay"] = "coa",
["Coeruna"] = "sai-coe",
["Coeur d'Alene"] = "crd",
["Cofán"] = "con",
["Cogui"] = "kog",
["Col"] = "liw",
["Colombian Sign Language"] = "csn",
["Colonia Tovar German"] = "gct",
["Columbia-Wenatchi"] = "col",
["Colán"] = "sai-col",
["Comaltepec Chinantec"] = "cco",
["Comanche"] = "com",
["Comechingon"] = "sai-cmg",
["Comecrudo"] = "xcm",
["Communicationssprache"] = "art-com",
["Como Karim"] = "cfg",
["Comox"] = "coo",
["Con"] = "cno",
["Coos"] = "csz",
["Copainalá Zoque"] = "zoc",
["Copala Triqui"] = "trc",
["Copallén"] = "sai-cop",
["Coptic"] = "cop",
["Coquille"] = "coq",
["Cora"] = "crn",
["Cori"] = "cry",
["Cornish"] = "kw",
["Coroado Puri"] = "sai-crd",
["Corsican"] = "co",
["Cosoleacaque Nahuatl"] = "nhk",
["Costa Rican Sign Language"] = "csr",
["Cotabato Manobo"] = "mta",
["Cotoname"] = "xcn",
["Cowlitz"] = "cow",
["Coyaima"] = "coy",
["Coyotepec Popoloca"] = "pbf",
["Coyutla Totonac"] = "toc",
["Cree"] = "cr",
["Creek"] = "mus",
["Crimean Gothic"] = "gme-cgo",
["Crimean Tatar"] = "crh",
["Croatian Sign Language"] = "csq",
["Cross River Mbembe"] = "mfn",
["Crow"] = "cro",
["Cruzeño"] = "crz",
["Cua"] = "cua",
["Cuban Sign Language"] = "csf",
["Cubeo"] = "cub",
["Cueva"] = "sai-cva",
["Cuiba"] = "cui",
["Cuitlatec"] = "cuy",
["Culina"] = "cul",
["Culli"] = "sai-cul",
["Cumanagoto"] = "cuo",
["Cumbric"] = "xcb",
["Cun"] = "cuq",
["Cung"] = "cug",
["Cupeño"] = "cup",
["Curonian"] = "xcu",
["Curripaco"] = "kpc",
["Cutchi-Swahili"] = "ccl",
["Cuvok"] = "cuv",
["Cuyamecalco Mixtec"] = "xtu",
["Cuyunon"] = "cyo",
["Cwi Bwamu"] = "bwy",
["Cypriot Arabic"] = "acy",
["Czech"] = "cs",
["Czech Sign Language"] = "cse",
["Cèmuhî"] = "cam",
["Cốông"] = "cnc",
["Da'a Kaili"] = "kzf",
["Daai Chin"] = "dao",
["Daakaka"] = "bpa",
["Daantanai'"] = "lni",
["Daasanach"] = "dsh",
["Daba"] = "dbq",
["Dabarre"] = "dbr",
["Dabe"] = "dbe",
["Dacian"] = "xdc",
["Dadanitic"] = "sem-dad",
["Dadi Dadi"] = "dda",
["Dadibi"] = "mps",
["Dadiya"] = "dbd",
["Daga"] = "dgz",
["Dagaari Dioula"] = "dgd",
["Dagba"] = "dgk",
["Dagbani"] = "dag",
["Dagik"] = "dec",
["Dagoman"] = "dgn",
["Dahalik"] = "dlk",
["Dahalo"] = "dal",
["Daho-Doo"] = "das",
["Dai"] = "dij",
["Dair"] = "drb",
["Dairi Batak"] = "btd",
["Dakka"] = "dkk",
["Dakota"] = "dak",
["Dakpa"] = "dka",
["Dalmatian"] = "dlm",
["Daloa Bété"] = "bev",
["Dama (Nigeria)"] = "dmm",
["Dama (Sierra Leone)"] = "dmn-dam",
["Damakawa"] = "dam",
["Damal"] = "uhn",
["Dambi"] = "dac",
["Dameli"] = "dml",
["Dampelas"] = "dms",
["Dan"] = "dnj",
["Danaru"] = "dnr",
["Danau"] = "dnu",
["Dandami Maria"] = "daq",
["Dangaléat"] = "daa",
["Dangaura Tharu"] = "thl",
["Danish"] = "da",
["Danish Sign Language"] = "dsl",
["Dano"] = "aso",
["Danu"] = "dnv",
["Danuwar"] = "dhw",
["Dao"] = "daz",
["Daonda"] = "dnd",
["Dar Daju Daju"] = "djc",
["Dar Fur Daju"] = "daj",
["Dar Sila Daju"] = "dau",
["Darai"] = "dry",
["Dargwa"] = "dar",
["Darkinjung"] = "xda",
["Darlong"] = "dln",
["Darmiya"] = "drd",
["Daro-Matu Melanau"] = "dro",
["Darumbal"] = "xgm",
["Dass"] = "dot",
["Datian Min"] = "nan-dat",
["Datooga"] = "tcc",
["Daungwurrung"] = "dgw",
["Daur"] = "dta",
["Davawenyo"] = "daw",
["Dawawa"] = "dww",
["Dawera-Daweloor"] = "ddw",
["Dawro"] = "dwr",
["Day"] = "dai",
["Dayi"] = "dax",
["Dazaga"] = "dzg",
["Deccani"] = "dcc",
["Dedua"] = "ded",
["Defaka"] = "afn",
["Defi Gbe"] = "gbh",
["Deg"] = "mzw",
["Deg Xinag"] = "ing",
["Degema"] = "deg",
["Degenan"] = "dge",
["Dehwari"] = "deh",
["Dela-Oenale"] = "row",
["Delo"] = "ntr",
["Delta Yokuts"] = "yok-dly",
["Dem"] = "dem",
["Dema"] = "dmx",
["Demisa"] = "dei",
["Demotic Egyptian"] = "egx-dem",
["Demta"] = "dmy",
["Dena'ina"] = "tfn",
["Dendi"] = "ddn",
["Dengese"] = "dez",
["Dengka"] = "dnk",
["Deno"] = "dbb",
["Denya"] = "anv",
["Dení"] = "dny",
["Deori"] = "der",
["Desano"] = "des",
["Desiya"] = "dso",
["Dewas Rai"] = "dwz",
["Dewoin"] = "dee",
["Dezfuli"] = "def",
["Dghwede"] = "dgh",
["Dhaiso"] = "dhs",
["Dhalandji"] = "dhl",
["Dhangu"] = "dhg",
["Dhanki"] = "dhn",
["Dhao"] = "nfa",
["Dharug"] = "xdk",
["Dhatki"] = "mki",
["Dhimal"] = "dhi",
["Dhivehi"] = "dv",
["Dhodia"] = "dho",
["Dhofari Arabic"] = "adf",
["Dhudhuroa"] = "ddr",
["Dhundhari"] = "dhd",
["Dhungaloo"] = "dhx",
["Dhurga"] = "dhu",
["Dhuwal"] = "dwu",
["Dhuwaya"] = "dwy",
["Dia"] = "dia",
["Dibabawon Manobo"] = "mbd",
["Dibiyaso"] = "dby",
["Dibo"] = "dio",
["Dicamay Agta"] = "duy",
["Didinga"] = "did",
["Dieri"] = "dif",
["Digo"] = "dig",
["Dii"] = "dur",
["Dijim-Bwilim"] = "cfa",
["Dilling"] = "dil",
["Dima"] = "jma",
["Dimasa"] = "dis",
["Dimbong"] = "dii",
["Dime"] = "dim",
["Dinapigue Agta"] = "phi-din",
["Dineor"] = "mrx",
["Ding"] = "diz",
["Dinka"] = "din",
["Diodio"] = "ddi",
["Dirasha"] = "gdl",
["Diri"] = "dwa",
["Dirim"] = "dir",
["Disa"] = "dsi",
["Ditammari"] = "tbz",
["Ditidaht"] = "dtd",
["Diuwe"] = "diy",
["Diuxi-Tilantongo Mixtec"] = "xtd",
["Dixon Reef"] = "dix",
["Dizin"] = "mdx",
["Djadjawurrung"] = "dja",
["Djambarrpuyngu"] = "djr",
["Djangun"] = "djf",
["Djauan"] = "djn",
["Djawi"] = "djw",
["Djimini"] = "dyi",
["Djinang"] = "dji",
["Djinba"] = "djb",
["Djiwarli"] = "djl",
["Dobel"] = "kvo",
["Dobu"] = "dob",
["Doe"] = "doe",
["Doga"] = "dgg",
["Doghoro"] = "dgx",
["Dogoso"] = "dgs",
["Dogosé"] = "dos",
["Dogri"] = "doi",
["Dogrib"] = "dgr",
["Dogul Dom"] = "dbg",
["Doka"] = "dbi",
["Doko-Uyanga"] = "uya",
["Dolgan"] = "dlg",
["Dom"] = "doa",
["Domaaki"] = "dmk",
["Domari"] = "rmt",
["Dominican Sign Language"] = "doq",
["Dompo"] = "doy",
["Domu"] = "dof",
["Domung"] = "dev",
["Dondo"] = "dok",
["Dong"] = "doh",
["Dongo"] = "doo",
["Dongolawi"] = "kzh",
["Dongotono"] = "ddd",
["Dongshanba Lalo"] = "yik",
["Dongxiang"] = "sce",
["Donno So Dogon"] = "dds",
["Doondo"] = "dde",
["Dorasque"] = "cba-dor",
["Dori'o"] = "dor",
["Dorig"] = "wwo",
["Doromu-Koki"] = "kqc",
["Dorze"] = "doz",
["Doso"] = "dol",
["Doteli"] = "dty",
["Dothraki"] = "art-dtk",
["Doura"] = "don",
["Doutai"] = "tds",
["Doyayo"] = "dow",
["Drehu"] = "dhv",
["Drung"] = "duu",
["Duala"] = "dua",
["Duano"] = "dup",
["Duau"] = "dva",
["Dubli"] = "dub",
["Dubu"] = "dmu",
["Dugun"] = "ndu",
["Duguri"] = "dbm",
["Dugwor"] = "dme",
["Duhwa"] = "kbz",
["Duit"] = "cba-dui",
["Duke"] = "nke",
["Dukhan"] = "trk-dkh",
["Dulbu"] = "dbo",
["Duli"] = "duz",
["Duma"] = "dma",
["Dumaitic"] = "sem-dum",
["Dumbea"] = "duf",
["Dumi"] = "dus",
["Dumpas"] = "dmv",
["Dumun"] = "dui",
["Duna"] = "duc",
["Dungan"] = "dng",
["Dungmali"] = "raa",
["Dungra Bhil"] = "duh",
["Dungu"] = "dbv",
["Dupaningan Agta"] = "duo",
["Dura"] = "drq",
["Duri"] = "mvp",
["Duriankere"] = "dbn",
["Duruwa"] = "pci",
["Dusner"] = "dsn",
["Dusun Deyah"] = "dun",
["Dusun Malang"] = "duq",
["Dusun Witu"] = "duw",
["Dutch"] = "nl",
["Dutch Sign Language"] = "dse",
["Duun"] = "dux",
["Duupa"] = "dae",
["Duvle"] = "duv",
["Duwai"] = "dbp",
["Duwet"] = "gve",
["Dwang"] = "nnu",
["Dyaabugay"] = "dyy",
["Dyaberdyaber"] = "dyb",
["Dyan"] = "dya",
["Dyangadi"] = "dyn",
["Dyirbal"] = "dbl",
["Dyugun"] = "dyd",
["Dyula"] = "dyu",
["Dza"] = "jen",
["Dzala"] = "dzl",
["Dzando"] = "dzn",
["Dzao Min"] = "bpn",
["Dzodinka"] = "add",
["Dzongkha"] = "dz",
["Dzuun"] = "dnn",
["Dâw"] = "kwa",
["E"] = "eee",
["E'ma Buyang"] = "yzg",
["Early Assamese"] = "inc-oas",
["Early Modern Korean"] = "ko-ear",
["Early Old Oghuz"] = "trk-eog",
["Early Tripuri"] = "xtr",
["East Central German"] = "gmw-ecg",
["East Circassian"] = "kbd",
["East Damar"] = "dmr",
["East Franconian"] = "vmf",
["East Futuna"] = "fud",
["East Kewa"] = "kjs",
["East Limba"] = "lma",
["East Masela"] = "vme",
["East Miraya Bikol"] = "rbl",
["East Nyala"] = "nle",
["East Tarangan"] = "tre",
["East Yugur"] = "yuy",
["Eastern Acipa"] = "acp",
["Eastern Arrernte"] = "aer",
["Eastern Bolivian Guarani"] = "gui",
["Eastern Bontoc"] = "ebk",
["Eastern Bru"] = "bru",
["Eastern Canadian Inuktitut"] = "ike",
["Eastern Cham"] = "cjm",
["Eastern Durango Nahuatl"] = "azd",
["Eastern Gorkha Tamang"] = "tge",
["Eastern Highland Chatino"] = "cly",
["Eastern Highland Otomi"] = "otm",
["Eastern Huasteca Nahuatl"] = "nhe",
["Eastern Huishui Hmong"] = "hme",
["Eastern Karaboro"] = "xrb",
["Eastern Katu"] = "ktv",
["Eastern Kayah"] = "eky",
["Eastern Keres"] = "kee",
["Eastern Khanty"] = "kca-eas",
["Eastern Krahn"] = "kqo",
["Eastern Lalu"] = "yit",
["Eastern Lawa"] = "lwl",
["Eastern Magar"] = "mgp",
["Eastern Maninkakan"] = "emk",
["Eastern Mari"] = "mhr",
["Eastern Meohang"] = "emg",
["Eastern Min"] = "cdo",
["Eastern Mnong"] = "mng",
["Eastern Muria"] = "emu",
["Eastern Ngad'a"] = "nea",
["Eastern Nisu"] = "nos",
["Eastern Ojibwa"] = "ojg",
["Eastern Parbate Kham"] = "kif",
["Eastern Penan"] = "pez",
["Eastern Pomo"] = "peb",
["Eastern Pwo"] = "kjp",
["Eastern Qiandong Miao"] = "hmq",
["Eastern Subanun"] = "sfe",
["Eastern Tamang"] = "taj",
["Eastern Tawbuid"] = "bnj",
["Eastern Xiangxi Miao"] = "muq",
["Eastern Xwla Gbe"] = "gbx",
["Ebira"] = "igb",
["Eblaite"] = "xeb",
["Ebrié"] = "ebr",
["Ebughu"] = "ebg",
["Ecuadorian Sign Language"] = "ecs",
["Ede Cabe"] = "cbj",
["Ede Ica"] = "ica",
["Ede Idaca"] = "idd",
["Ede Ije"] = "ijj",
["Ede Nago"] = "nqg",
["Edera Awyu"] = "awy",
["Edo"] = "bin",
["Edolo"] = "etr",
["Edomite"] = "xdm",
["Edopi"] = "dbf",
["Efai"] = "efa",
["Efe"] = "efe",
["Efik"] = "efi",
["Efutop"] = "ofu",
["Ega"] = "ega",
["Eggon"] = "ego",
["Egyptian"] = "egy",
["Egyptian Arabic"] = "arz",
["Egyptian Sign Language"] = "esl",
["Ehueun"] = "ehu",
["Eipomek"] = "eip",
["Eitiep"] = "eit",
["Ejagham"] = "etu",
["Ejamat"] = "eja",
["Ekajuk"] = "eka",
["Ekari"] = "ekg",
["Ekele"] = "khy",
["Eki"] = "eki",
["Ekit"] = "eke",
["Ekpeye"] = "ekp",
["El Alto Zapotec"] = "zpp",
["El Hugeirat"] = "elh",
["El Molo"] = "elo",
["Elamite"] = "elx",
["Eleme"] = "elm",
["Elepi"] = "ele",
["Elfdalian"] = "ovd",
["Elip"] = "ekm",
["Elkei"] = "elk",
["Eloi"] = "art-elo",
["Elotepec Zapotec"] = "zte",
["Eloyi"] = "afo",
["Elseng"] = "mrf",
["Elu"] = "elu",
["Elymian"] = "xly",
["Emae"] = "mmw",
["Emai"] = "ema",
["Eman"] = "emn",
["Embaloh"] = "emb",
["Emberá-Baudó"] = "bdc",
["Emberá-Catío"] = "cto",
["Emberá-Chamí"] = "cmi",
["Emberá-Tadó"] = "tdc",
["Embu"] = "ebu",
["Emem"] = "enr",
["Emerillon"] = "eme",
["Emilian"] = "egl",
["Emplawas"] = "emw",
["En"] = "enc",
["Enawené-Nawé"] = "unk",
["Ende"] = "end",
["Enga"] = "enq",
["Engenni"] = "enn",
["Enggano"] = "eno",
["English"] = "en",
["Enlhet"] = "enl",
["Enrekang"] = "ptt",
["Enu"] = "enu",
["Enwan"] = "env",
["Enwang"] = "enw",
["Enxet"] = "enx",
["Enya"] = "gey",
["Eotile"] = "eot",
["Epena"] = "sja",
["Epi-Olmec"] = "xep",
["Epie"] = "epi",
["Epigraphic Mayan"] = "emy",
["Eravallan"] = "era",
["Erave"] = "kjy",
["Ere"] = "twp",
["Erie"] = "iro-ere",
["Eritai"] = "ert",
["Erokwanas"] = "erw",
["Erre"] = "err",
["Erromintxela"] = "emx",
["Ersu"] = "ers",
["Eruwa"] = "erh",
["Erzya"] = "myv",
["Esan"] = "ish",
["Ese"] = "mcq",
["Ese Ejja"] = "ese",
["Eshtehardi"] = "esh",
["Esimbi"] = "ags",
["Eskayan"] = "esy",
["Esmeralda"] = "sai-esm",
["Esperanto"] = "eo",
["Esselen"] = "esq",
["Estado de México Otomi"] = "ots",
["Estonian"] = "et",
["Estonian Sign Language"] = "eso",
["Esuma"] = "esm",
["Etchemin"] = "etc",
["Etebi"] = "etb",
["Eten"] = "etx",
["Eteocretan"] = "ecr",
["Eteocypriot"] = "ecy",
["Ethiopian Sign Language"] = "eth",
["Etkywan"] = "ich",
["Eton (Cameroon)"] = "eto",
["Eton (Vanuatu)"] = "etn",
["Etruscan"] = "ett",
["Etulo"] = "utr",
["Evant"] = "bzz",
["Even"] = "eve",
["Evenki"] = "evn",
["Ewage-Notu"] = "nou",
["Ewarhuyana"] = "sai-ewa",
["Ewe"] = "ee",
["Ewondo"] = "ewo",
["Extremaduran"] = "ext",
["Eyak"] = "eya",
["Ezaa"] = "eza",
["Fagani"] = "faf",
["Faifi"] = "fif",
["Faire Atta"] = "azt",
["Faiwol"] = "fai",
["Fakkanci"] = "gel",
["Fala"] = "fax",
["Falam Chin"] = "cfm",
["Fali"] = "fli",
["Faliscan"] = "xfa",
["Fam"] = "fam",
["Fanagalo"] = "fng",
["Fanamaket"] = "bjp",
["Fang (Bantu)"] = "fan",
["Fang (Beboid)"] = "fak",
["Fania"] = "fni",
["Far Western Muria"] = "fmu",
["Farefare"] = "gur",
["Faroese"] = "fo",
["Fas"] = "fqs",
["Fasu"] = "faa",
["Fataleka"] = "far",
["Fataluku"] = "ddg",
["Fayu"] = "fau",
["Fe'fe'"] = "fmp",
["Fedan"] = "pdn",
["Fembe"] = "agl",
["Fer"] = "kah",
["Feroge"] = "fer",
["Fiji Hindi"] = "hif",
["Fijian"] = "fj",
["Filomena Mata-Coahuitlán Totonac"] = "tlp",
["Fingallian"] = "gmw-fin",
["Finnish"] = "fi",
["Finnish Sign Language"] = "fse",
["Finnish-Swedish Sign Language"] = "fss",
["Finongan"] = "fag",
["Fipa"] = "fip",
["Firan"] = "fir",
["Fiwaga"] = "fiw",
["Flemish Sign Language"] = "vgt",
["Flinders Island"] = "fln",
["Foau"] = "flh",
["Fogaha"] = "ber-fog",
["Foi"] = "foi",
["Foia Foia"] = "ffi",
["Folopa"] = "ppo",
["Foma"] = "fom",
["Fon"] = "fon",
["Fongoro"] = "fgr",
["Foodo"] = "fod",
["Forak"] = "frq",
["Fordata"] = "frd",
["Fore"] = "for",
["Forest Enets"] = "enf",
["Forest Nenets"] = "yrk-for",
["Fortsenal"] = "frt",
["Fox"] = "sac",
["Franc-Comtois"] = "roa-fcm",
["Francisco León Zoque"] = "zos",
["Franco-Provençal"] = "frp",
["French"] = "fr",
["French Belgian Sign Language"] = "sfb",
["French Sign Language"] = "fsl",
["Friulian"] = "fur",
["Fula"] = "ff",
["Fuliiru"] = "flr",
["Fulniô"] = "fun",
["Fum"] = "fum",
["Fungwa"] = "ula",
["Fur"] = "fvr",
["Furu"] = "fuu",
["Futuna-Aniwa"] = "fut",
["Fuyug"] = "fuy",
["Fwe"] = "fwe",
["Fwâi"] = "fwa",
["Fyam"] = "pym",
["Fyer"] = "fie",
["Ga"] = "gaa",
["Ga'anda"] = "gqa",
["Ga'dang"] = "gdg",
["Gaa"] = "ttb",
["Gaam"] = "tbi",
["Gabadi"] = "kbt",
["Gabi"] = "gbw",
["Gabri"] = "gab",
["Gabrielino-Fernandeño"] = "xgf",
["Gadang"] = "gdk",
["Gaddang"] = "gad",
["Gaddi"] = "gbk",
["Gade"] = "ged",
["Gadjerawang"] = "gdh",
["Gadsup"] = "gaj",
["Gafat"] = "gft",
["Gagadu"] = "gbu",
["Gagauz"] = "gag",
["Gagnoa Bété"] = "btg",
["Gahri"] = "bfu",
["Gaikundi"] = "gbf",
["Gaina"] = "gcn",
["Gal"] = "gap",
["Galambu"] = "glo",
["Galatian"] = "xga",
["Galela"] = "gbi",
["Galeya"] = "gar",
["Galice"] = "gce",
["Galician"] = "gl",
["Galindian"] = "xgl",
["Gallaecian"] = "cel-gal",
["Gallo"] = "roa-gal",
["Gallo-Italic of Basilicata"] = "roa-gib",
["Gallo-Italic of Sicily"] = "roa-gis",
["Gallurese"] = "sdn",
["Galo"] = "adl",
["Galoli"] = "gal",
["Gamale Kham"] = "kgj",
["Gambera"] = "gma",
["Gamela"] = "sai-gam",
["Gamilaraay"] = "kld",
["Gamit"] = "gbl",
["Gamkonora"] = "gak",
["Gamo"] = "gmv",
["Gamo-Ningi"] = "bte",
["Gan"] = "gan",
["Gana"] = "gnq",
["Ganang"] = "gne",
["Gandhari"] = "pgd",
["Gane"] = "gzn",
["Ganggalida"] = "gcd",
["Ganglau"] = "ggl",
["Gangte"] = "gnb",
["Gangulu"] = "gnl",
["Gants"] = "gao",
["Ganza"] = "gza",
["Ganzi"] = "gnz",
["Gao"] = "gga",
["Gapapaiwa"] = "pwg",
["Garawa"] = "wrk",
["Garhwali"] = "gbm",
["Garifuna"] = "cab",
["Garingbal"] = "xgi",
["Garo"] = "grt",
["Garre"] = "gex",
["Garus"] = "gyb",
["Garza"] = "xgr",
["Gashowu Yokuts"] = "yok-gsy",
["Gata'"] = "gaq",
["Gaulish"] = "cel-gau",
["Gavak"] = "dmc",
["Gavar"] = "gou",
["Gavião do Jiparaná"] = "gvo",
["Gawar-Bati"] = "gwt",
["Gawwada"] = "gwd",
["Gaya"] = "zra",
["Gayil"] = "gyl",
["Gayo"] = "gay",
["Gayón"] = "sai-gay",
["Gbagyi"] = "gbr",
["Gban"] = "ggu",
["Gbanu"] = "gbv",
["Gbanziri"] = "gbg",
["Gbari"] = "gby",
["Gbaya-Bossangoa"] = "gbp",
["Gbaya-Bozoum"] = "gbq",
["Gbaya-Mbodomo"] = "gmm",
["Gbayi"] = "gyg",
["Gbesi Gbe"] = "gbs",
["Gbii"] = "ggb",
["Gbin"] = "xgb",
["Gbiri-Niragu"] = "grh",
["Gboloo Grebo"] = "gec",
["Gciriku"] = "diu",
["Gcwi"] = "gwj",
["Ge"] = "hmj",
["Ge'ez"] = "gez",
["Geba Karen"] = "kvq",
["Gebe"] = "gei",
["Gedaged"] = "gdd",
["Gedeo"] = "drs",
["Geji"] = "gji",
["Geko Karen"] = "ghk",
["Gela"] = "nlg",
["Gele'"] = "sbc",
["Geme"] = "geq",
["Gen"] = "gej",
["Gende"] = "gaf",
["Gengle"] = "geg",
["Georgian"] = "ka",
["Gepo"] = "ygp",
["Gera"] = "gew",
["Gerka"] = "gek",
["German"] = "de",
["German Sign Language"] = "gsg",
["Geruma"] = "gea",
["Geser-Gorom"] = "ges",
["Geshiza"] = "ero-gsz",
["Gey"] = "guv",
["Ghadames"] = "gha",
["Ghanaian Sign Language"] = "gse",
["Ghandruk Sign Language"] = "gds",
["Ghanongga"] = "ghn",
["Ghari"] = "gri",
["Ghayavi"] = "bmk",
["Ghera"] = "ghr",
["Ghomala'"] = "bbj",
["Ghomara"] = "gho",
["Ghotuo"] = "aaa",
["Ghulfan"] = "ghl",
["Giangan"] = "bgi",
["Gibanawa"] = "gib",
["Gidar"] = "gid",
["Gikyode"] = "acd",
["Gilaki"] = "glk",
["Gilbertese"] = "gil",
["Gilima"] = "gix",
["Gimi (Austronesian)"] = "gip",
["Gimi (Papuan)"] = "gim",
["Gimme"] = "kmp",
["Gimnime"] = "gmn",
["Ginuman"] = "gnm",
["Girawa"] = "bbr",
["Girirra"] = "gii",
["Giryama"] = "nyf",
["Githabul"] = "gih",
["Gitua"] = "ggt",
["Gitxsan"] = "git",
["Giyug"] = "giy",
["Gizrra"] = "tof",
["Glaro-Twabo"] = "glr",
["Glavda"] = "glw",
["Glio-Oubi"] = "oub",
["Glosa"] = "igs",
["Gnau"] = "gnu",
["Goa'uld"] = "art-gld",
["Goaria"] = "gig",
["Gobasi"] = "goi",
["Gobu"] = "gox",
["Godié"] = "god",
["Godoberi"] = "gdo",
["Godwari"] = "gdx",
["Goemai"] = "ank",
["Gofa"] = "gof",
["Gogo"] = "gog",
["Gogodala"] = "ggw",
["Goguryeo"] = "zkg",
["Gojri"] = "gju",
["Gokana"] = "gkn",
["Gokhy"] = "tbq-gkh",
["Gola"] = "gol",
["Golin"] = "gvf",
["Golpa"] = "lja",
["Gondi"] = "gon",
["Gone Dau"] = "goo",
["Gong"] = "ugo",
["Gongduk"] = "goe",
["Gonja"] = "gjn",
["Goo"] = "gov",
["Gooniyandi"] = "gni",
["Gor"] = "gqr",
["Gorakor"] = "goc",
["Gorap"] = "goq",
["Goreng"] = "xgg",
["Gorontalo"] = "gor",
["Gorovu"] = "grq",
["Gorwaa"] = "gow",
["Gothic"] = "got",
["Gottscheerish"] = "gmw-gts",
["Goundo"] = "goy",
["Gourmanchéma"] = "gux",
["Gowlan"] = "goj",
["Gowro"] = "gwf",
["Gozarkhani"] = "goz",
["Grangali"] = "nli",
["Grass Koiari"] = "kbk",
["Greek"] = "el",
["Greek Sign Language"] = "gss",
["Green Gelao"] = "giq",
["Green Hmong"] = "hnj",
["Greenlandic"] = "kl",
["Grenadian Creole English"] = "gcl",
["Gresi"] = "grs",
["Groma"] = "gro",
["Gros Ventre"] = "ats",
["Gua"] = "gwx",
["Guachí"] = "sai-gua",
["Guahibo"] = "guh",
["Guajajára"] = "gub",
["Guajá"] = "gvj",
["Guambiano"] = "gum",
["Guamo"] = "sai-gmo",
["Guanano"] = "gvc",
["Guanche"] = "gnc",
["Guarayu"] = "gyr",
["Guatemalan Sign Language"] = "gsm",
["Guató"] = "gta",
["Guayabero"] = "guo",
["Guazacapán"] = "nai-guz",
["Gudang"] = "xgd",
["Gudanji"] = "nji",
["Gude"] = "gde",
["Gudu"] = "gdu",
["Guduf-Gava"] = "gdf",
["Guerrero Amuzgo"] = "amu",
["Guerrero Nahuatl"] = "ngu",
["Guevea de Humboldt Zapotec"] = "zpg",
["Gugadj"] = "ggd",
["Gugu Badhun"] = "gdc",
["Gugu Warra"] = "wrw",
["Guhu-Samane"] = "ghs",
["Guianese Creole"] = "gcr",
["Guiberoua Bété"] = "bet",
["Guinau"] = "awd-gnu",
["Guinea Kpelle"] = "gkp",
["Guinea-Bissau Creole"] = "pov",
["Guinea-Bissau Sign Language"] = "lgs",
["Guinean Sign Language"] = "gus",
["Guiqiong"] = "gqi",
["Gujarati"] = "gu",
["Gula"] = "glu",
["Gula'alaa"] = "gmb",
["Gulay"] = "gvl",
["Gule"] = "gly",
["Gulf Arabic"] = "afb",
["Gullah"] = "gul",
["Gumalu"] = "gmu",
["Gumatj"] = "gnn",
["Gumawana"] = "gvs",
["Gumuz"] = "guk",
["Gun"] = "guw",
["Gundi"] = "gdi",
["Gunditjmara"] = "gjm",
["Gundungurra"] = "xrd",
["Gungabula"] = "gyf",
["Gungu"] = "rub",
["Guntai"] = "gnt",
["Gunu"] = "yas",
["Gunwinggu"] = "gup",
["Gunya"] = "gyy",
["Gupa-Abawa"] = "gpa",
["Gupapuyngu"] = "guf",
["Gur Lama"] = "las",
["Guragone"] = "gge",
["Guramalum"] = "grz",
["Gurani"] = "hac",
["Gureng Gureng"] = "gnr",
["Gurgula"] = "ggg",
["Guriaso"] = "grx",
["Gurindji"] = "gue",
["Gurindji Kriol"] = "gjr",
["Gurmana"] = "gvm",
["Guro"] = "goa",
["Gurung"] = "gvr",
["Guruntum"] = "grd",
["Gusan"] = "gsn",
["Gusii"] = "guz",
["Gusilay"] = "gsl",
["Gutnish"] = "gmq-gut",
["Guugu Yimidhirr"] = "kky",
["Guwa"] = "xgw",
["Guwamu"] = "gwu",
["Guwar"] = "aus-guw",
["Guya"] = "gka",
["Guyanese Creole English"] = "gyn",
["Guyani"] = "gvy",
["Guébie"] = "gie",
["Gvoko"] = "ngs",
["Gwa"] = "gwb",
["Gwahatike"] = "dah",
["Gwak"] = "jgk",
["Gwamhi-Wuri"] = "bga",
["Gwandara"] = "gwn",
["Gwara"] = "alv-gwa",
["Gweda"] = "grw",
["Gweno"] = "gwe",
["Gwere"] = "gwr",
["Gwich'in"] = "gwi",
["Gyalsumdo"] = "gyo",
["Gyele"] = "gyi",
["Gyem"] = "gye",
["Güenoa"] = "sai-gue",
["Habu"] = "hbu",
["Hachijō"] = "jpx-hcj",
["Hadiyya"] = "hdy",
["Hadoti"] = "hoj",
["Hadrami"] = "xhd",
["Hadza"] = "hts",
["Haeke"] = "aek",
["Hahon"] = "hah",
["Haida"] = "hai",
["Haigwai"] = "hgw",
["Hailufeng Min"] = "nan-hlh",
["Hainanese"] = "hnm",
["Hainyaxo Bozo"] = "bzx",
["Haiphong Sign Language"] = "haf",
["Haisla"] = "has",
["Haitian Creole"] = "ht",
["Haitian Vodoun Culture Language"] = "hvc",
["Haiǁom"] = "hgm",
["Haji"] = "hji",
["Hajong"] = "haj",
["Hakka"] = "hak",
["Hakö"] = "hao",
["Halang"] = "hal",
["Halang Doan"] = "hld",
["Halbi"] = "hlb",
["Halia"] = "hla",
["Halkomelem"] = "hur",
["Hamap"] = "hmu",
["Hamba"] = "hba",
["Hamer-Banna"] = "amf",
["Hamtai"] = "hmt",
["Hanga"] = "hag",
["Hanga Hundi"] = "wos",
["Hani"] = "hni",
["Hanoi Sign Language"] = "hab",
["Hanunoo"] = "hnn",
["Harami"] = "xha",
["Harappan"] = "xiv",
["Harari"] = "har",
["Haraza"] = "nub-har",
["Harijan Kinnauri"] = "kjo",
["Haroi"] = "hro",
["Harsusi"] = "hss",
["Haruai"] = "tmd",
["Haruku"] = "hrk",
["Haryanvi"] = "bgc",
["Harzani"] = "hrz",
["Hasaitic"] = "sem-has",
["Hasha"] = "ybj",
["Hassaniya Arabic"] = "mey",
["Hatam"] = "had",
["Hattic"] = "xht",
["Hausa"] = "ha",
["Hausa Sign Language"] = "hsl",
["Haush"] = "sai-hau",
["Havasupai-Walapai-Yavapai"] = "yuf",
["Haveke"] = "hvk",
["Havu"] = "hav",
["Hawai'i Pidgin Sign Language"] = "hps",
["Hawaiian"] = "haw",
["Hawaiian Creole"] = "hwc",
["Haya"] = "hay",
["Hdi"] = "xed",
["Hebrew"] = "he",
["Hehe"] = "heh",
["Heiban"] = "hbn",
["Heiltsuk"] = "hei",
["Helong"] = "heg",
["Hema"] = "nix",
["Hemba"] = "hem",
["Hember Avu"] = "mmi",
["Herdé"] = "hed",
["Herero"] = "hz",
["Hermit"] = "llf",
["Hernican"] = "xhr",
["Hewa"] = "ham",
["Heyo"] = "auk",
["Hibito"] = "hib",
["Hidatsa"] = "hid",
["Higaonon"] = "mba",
["High Valyrian"] = "art-vlh",
["Highland Konjo"] = "kjk",
["Highland Oaxaca Chontal"] = "chd",
["Highland Popoluca"] = "poi",
["Highland Puebla Nahuatl"] = "azz",
["Highland Totonac"] = "tos",
["Hijazi Arabic"] = "acw",
["Hijuk"] = "hij",
["Hiligaynon"] = "hil",
["Hill Maria"] = "mrr",
["Himarimã"] = "hir",
["Hindi"] = "hi",
["Hindi Dogri"] = "dgo",
["Hinduri"] = "hii",
["Hinukh"] = "gin",
["Hiri Motu"] = "ho",
["Hismaic"] = "sem-his",
["Hitchiti"] = "nai-hit",
["Hittite"] = "hit",
["Hitu"] = "htu",
["Hiw"] = "hiw",
["Hixkaryana"] = "hix",
["Hlai"] = "lic",
["Hlepho Phowa"] = "yhl",
["Hlersu"] = "hle",
["Hmar"] = "hmr",
["Hmong Don"] = "hmf",
["Hmong Dô"] = "hmv",
["Hmong Shua"] = "hmz",
["Hmwaveke"] = "mrk",
["Ho"] = "hoc",
["Ho Chi Minh City Sign Language"] = "hos",
["Hoava"] = "hoa",
["Hobyót"] = "hoh",
["Hoia Hoia"] = "hhi",
["Hokkien"] = "nan-hbl",
["Holikachuk"] = "hoi",
["Holiya"] = "hoy",
["Holma"] = "hod",
["Holoholo"] = "hoo",
["Holu"] = "hol",
["Homa"] = "hom",
["Honduran Lenca"] = "len",
["Honduras Sign Language"] = "hds",
["Hone"] = "juh",
["Hong Kong Sign Language"] = "hks",
["Honi"] = "how",
["Hopi"] = "hop",
["Horned Miao"] = "hrm",
["Horo"] = "hor",
["Horom"] = "hoe",
["Hote"] = "hot",
["Hoti"] = "hti",
["Hovongan"] = "hov",
["Hoyahoya"] = "hhy",
["Hozo"] = "hoz",
["Hpon"] = "hpo",
["Hrangkhol"] = "hra",
["Hruso"] = "hru",
["Hrê"] = "hre",
["Hu"] = "huo",
["Huachipaeri"] = "hug",
["Huambisa"] = "hub",
["Huaorani"] = "auc",
["Huarijio"] = "var",
["Huaulu"] = "hud",
["Huautla Mazatec"] = "mau",
["Huave"] = "huv",
["Huaxcaleca Nahuatl"] = "nhq",
["Huba"] = "hbb",
["Huehuetla Tepehua"] = "tee",
["Huetar"] = "cba-hue",
["Huichol"] = "hch",
["Huilliche"] = "huh",
["Huitepec Mixtec"] = "mxs",
["Huizhou"] = "czh",
["Hukumina"] = "huw",
["Hula"] = "hul",
["Hulaulá"] = "huy",
["Huli"] = "hui",
["Hulung"] = "huk",
["Humburi Senni"] = "hmb",
["Humene"] = "huf",
["Hun"] = "uth",
["Hunde"] = "hke",
["Hung"] = "hnu",
["Hungana"] = "hum",
["Hungarian"] = "hu",
["Hungarian Sign Language"] = "hsh",
["Hungworo"] = "nat",
["Hunjara-Kaina Ke"] = "hkk",
["Hunnic"] = "xhc",
["Hunsrik"] = "hrx",
["Hunzib"] = "huz",
["Hupa"] = "hup",
["Hupdë"] = "jup",
["Hupla"] = "hap",
["Hurrian"] = "xhu",
["Hutterisch"] = "geh",
["Hwana"] = "hwo",
["Hya"] = "hya",
["Hyam"] = "jab",
["Hän"] = "haa",
["Hértevin"] = "hrt",
["I-Wak"] = "iwk",
["Iaai"] = "iai",
["Iamalele"] = "yml",
["Iatmul"] = "ian",
["Iau"] = "tmu",
["Ibali Teke"] = "tek",
["Ibaloi"] = "ibl",
["Iban"] = "iba",
["Ibanag"] = "ibg",
["Ibani"] = "iby",
["Ibatan"] = "ivb",
["Iberian"] = "xib",
["Ibibio"] = "ibb",
["Ibino"] = "ibn",
["Iboko"] = "bkp",
["Ibu"] = "ibu",
["Ibuoro"] = "ibr",
["Icelandic"] = "is",
["Icelandic Sign Language"] = "icl",
["Iceve-Maci"] = "bec",
["Ida'an"] = "dbj",
["Idakho-Isukha-Tiriki"] = "ida",
["Idaté"] = "idt",
["Idere"] = "ide",
["Idesa"] = "ids",
["Idi"] = "idi",
["Idiom Neutral"] = "mis-idn",
["Ido"] = "io",
["Idoma"] = "idu",
["Idon"] = "idc",
["Idu"] = "clk",
["Idun"] = "ldb",
["Iduna"] = "viv",
["Ifo"] = "iff",
["Ifè"] = "ife",
["Igala"] = "igl",
["Igana"] = "igg",
["Igbo"] = "ig",
["Igede"] = "ige",
["Ignaciano"] = "ign",
["Igo"] = "ahl",
["Iguta"] = "nar",
["Igwe"] = "igw",
["Iha"] = "ihp",
["Ihievbe"] = "ihi",
["Ija-Zuba"] = "vki",
["Ik"] = "ikx",
["Ika"] = "ikk",
["Ikaranggal"] = "ikr",
["Ikizu"] = "ikz",
["Iko"] = "iki",
["Ikobi-Mena"] = "meb",
["Ikoma"] = "ntk",
["Ikpeng"] = "txi",
["Ikpeshi"] = "ikp",
["Ikposo"] = "kpo",
["Iku-Gora-Ankwa"] = "ikv",
["Ikulu"] = "ikl",
["Ikwere"] = "ikw",
["Ikwo"] = "iqw",
["Ila"] = "ilb",
["Ile Ape"] = "ila",
["Ilgar"] = "ilg",
["Ili Turki"] = "ili",
["Ili'uun"] = "ilu",
["Ilianen Manobo"] = "mbi",
["Illyrian"] = "xil",
["Ilocano"] = "ilo",
["Ilongot"] = "ilk",
["Ilue"] = "ilv",
["Ilwana"] = "mlk",
["Imbongu"] = "imo",
["Imonda"] = "imn",
["Imroing"] = "imr",
["Inabaknon"] = "abx",
["Inapang"] = "mzu",
["Inari Sami"] = "smn",
["Indanga"] = "bnt-ind",
["Indian Sign Language"] = "ins",
["Indo-Portuguese"] = "idb",
["Indonesian"] = "id",
["Indonesian Bajau"] = "bdl",
["Indonesian Sign Language"] = "inl",
["Indri"] = "idr",
["Indus Kohistani"] = "mvy",
["Inebu One"] = "oin",
["Ineseño"] = "inz",
["Inga"] = "inb",
["Ingrian"] = "izh",
["Ingush"] = "inh",
["Inlaod Itneg"] = "iti",
["Inoke-Yate"] = "ino",
["Inonhan"] = "loc",
["Inor"] = "ior",
["Inpui Naga"] = "nkf",
["Interlingua"] = "ia",
["Interlingue"] = "ie",
["International Sign"] = "ils",
["Interslavic"] = "isv",
["Intha"] = "int",
["Inuinnaqtun"] = "esx-inq",
["Inuit Sign Language"] = "iks",
["Inuktitut"] = "iu",
["Inuktun"] = "esx-ink",
["Inupiaq"] = "ik",
["Inuvialuktun"] = "ikt",
["Ipai"] = "nai-ipa",
["Ipalapa Amuzgo"] = "azm",
["Ipiko"] = "ipo",
["Ipili"] = "ipi",
["Ipulo"] = "ass",
["Iquito"] = "iqu",
["Ir"] = "irr",
["Irantxe"] = "irn",
["Iranun"] = "ill",
["Iraqi Arabic"] = "acm",
["Iraqw"] = "irk",
["Irarutu"] = "irh",
["Iraya"] = "iry",
["Iresim"] = "ire",
["Irish"] = "ga",
["Irish Sign Language"] = "isg",
["Irula"] = "iru",
["Isabi"] = "isa",
["Isan"] = "tts",
["Isanzu"] = "isn",
["Isarog Agta"] = "agk",
["Isaurian"] = "mis-isa",
["Isconahua"] = "isc",
["Isebe"] = "igo",
["Ishkashimi"] = "isk",
["Isinai"] = "inn",
["Isirawa"] = "srl",
["Islander Creole English"] = "icr",
["Isnag"] = "isd",
["Isoko"] = "iso",
["Israeli Sign Language"] = "isr",
["Isthmus Mixe"] = "mir",
["Isthmus Zapotec"] = "zai",
["Istriot"] = "ist",
["Istro-Romanian"] = "ruo",
["Isu"] = "isu",
["Isubu"] = "szv",
["Italian"] = "it",
["Italian Sign Language"] = "ise",
["Italiot Greek"] = "grk-ita",
["Itawit"] = "itv",
["Itelmen"] = "itl",
["Itene"] = "ite",
["Iteri"] = "itr",
["Itik"] = "itx",
["Ito"] = "itw",
["Itonama"] = "ito",
["Itsekiri"] = "its",
["Itu Mbon Uzo"] = "itm",
["Itundujia Mixtec"] = "mce",
["Itza'"] = "itz",
["Iu Mien"] = "ium",
["Ivatan"] = "ivv",
["Iwaidja"] = "ibd",
["Iwal"] = "kbm",
["Iwam"] = "iwm",
["Iwur"] = "iwo",
["Ixcatec"] = "ixc",
["Ixcatlán Mazatec"] = "mzi",
["Ixil"] = "ixl",
["Ixtayutla Mixtec"] = "vmj",
["Ixtenco Otomi"] = "otz",
["Iyayu"] = "iya",
["Iyive"] = "uiv",
["Iyo"] = "nca",
["Iyo'wujwa Chorote"] = "crq",
["Iyojwa'ja Chorote"] = "crt",
["Izere"] = "izr",
["Izi"] = "izz",
["Izi-Ezaa-Ikwo-Mgbo"] = "izi",
["Izon"] = "ijc",
["Izora"] = "cbo",
["Iñapari"] = "inp",
["Jabem"] = "jae",
["Jabutí"] = "jbt",
["Jad"] = "jda",
["Jadgali"] = "jdg",
["Jah Hut"] = "jah",
["Jahanka"] = "jad",
["Jair Awyu"] = "awv",
["Jakaltek"] = "jac",
["Jakati"] = "jat",
["Jalapa de Díaz Mazatec"] = "maj",
["Jalkunan"] = "bxl",
["Jamaican Country Sign Language"] = "jcs",
["Jamaican Creole"] = "jam",
["Jamaican Sign Language"] = "jls",
["Jamamadí"] = "jaa",
["Jambi Malay"] = "jax",
["Jamiltepec Mixtec"] = "mxt",
["Jaminjung"] = "djd",
["Jamsay"] = "djm",
["Jamtish"] = "gmq-jmk",
["Jandavra"] = "jnd",
["Janday"] = "jan",
["Jangkang"] = "djo",
["Jangshung"] = "jna",
["Janji"] = "jni",
["Japanese"] = "ja",
["Japanese Sign Language"] = "jsl",
["Japhug"] = "sit-jap",
["Japrería"] = "jru",
["Jaqaru"] = "jqr",
["Jara"] = "jaf",
["Jarai"] = "jra",
["Jarawa"] = "anq",
["Jaru"] = "ddj",
["Jassic"] = "ysc",
["Jaunsari"] = "jns",
["Javanese"] = "jv",
["Javindo"] = "jvd",
["Jawe"] = "jaz",
["Jaya"] = "jyy",
["Jebero"] = "jeb",
["Jeh"] = "jeh",
["Jehai"] = "jhi",
["Jeikó"] = "sai-jko",
["Jeju"] = "jje",
["Jemez"] = "tow",
["Jenaama Bozo"] = "bze",
["Jeng"] = "jeg",
["Jennu Kurumba"] = "xuj",
["Jere"] = "jer",
["Jeri Kuo"] = "jek",
["Jersey Dutch"] = "gmw-jdt",
["Jeru"] = "akj",
["Jerung"] = "jee",
["Jhankot Sign Language"] = "jhs",
["Jiamao"] = "jio",
["Jiba"] = "juo",
["Jibu"] = "jib",
["Jicarilla"] = "apj",
["Jie"] = "mis-jie",
["Jiiddu"] = "jii",
["Jilbe"] = "jie",
["Jili"] = "mgi",
["Jilim"] = "jil",
["Jimi"] = "jmi",
["Jimjimen"] = "jim",
["Jin"] = "cjy",
["Jina"] = "jia",
["Jingpho"] = "kac",
["Jingulu"] = "jig",
["Jiongnai Bunu"] = "pnu",
["Jirajara"] = "sai-jrj",
["Jirel"] = "jul",
["Jiru"] = "jrr",
["Jita"] = "jit",
["Jizhao"] = "mis-jzh",
["Jju"] = "kaj",
["Joba"] = "job",
["Jofotek-Bromnya"] = "jbr",
["Jola-Fonyi"] = "dyo",
["Jola-Kasa"] = "csk",
["Jonkor Bourmataguil"] = "jeu",
["Jordanian Sign Language"] = "jos",
["Jorá"] = "jor",
["Jowulu"] = "jow",
["Ju"] = "juu",
["Juang"] = "jun",
["Juba Arabic"] = "pga",
["Judeo-Italian"] = "itk",
["Judeo-Persian"] = "jpr",
["Judeo-Tat"] = "jdt",
["Jukun Takum"] = "jbu",
["Jumaytepeque"] = "nai-jum",
["Jumjum"] = "jum",
["Jumla Sign Language"] = "jus",
["Jumli"] = "jml",
["Jungle Inga"] = "inj",
["Juquila Mixe"] = "mxq",
["Jur Modo"] = "bex",
["Juray"] = "juy",
["Jurchen"] = "juc",
["Jurúna"] = "jur",
["Jutiapa"] = "nai-jtp",
["Jutish"] = "jut",
["Juwal"] = "mwb",
["Juxtlahuaca Mixtec"] = "vmc",
["Juǀ'hoan"] = "ktz",
["Jwira-Pepesa"] = "jwi",
["Júma"] = "jua",
["K'iche'"] = "quc",
["Kaamba"] = "xku",
["Kaan"] = "ldl",
["Kaang Chin"] = "ckn",
["Kaansa"] = "gna",
["Kaapor Sign Language"] = "uks",
["Kaba"] = "ksp",
["Kabalai"] = "kvf",
["Kabatei"] = "xkp",
["Kabba-Laka"] = "lap",
["Kabishiana"] = "tup-kab",
["Kabiye"] = "kbp",
["Kabola"] = "klz",
["Kabore One"] = "onk",
["Kabras"] = "lkb",
["Kaburi"] = "uka",
["Kabutra"] = "kbu",
["Kabuverdianu"] = "kea",
["Kabwa"] = "cwa",
["Kabwari"] = "kcw",
["Kabyle"] = "kab",
["Kachama-Ganjule"] = "kcx",
["Kachari"] = "xac",
["Kachchi"] = "kfr",
["Kachi Koli"] = "gjk",
["Kacipo-Balesi"] = "koe",
["Kaco'"] = "xkk",
["Kadai"] = "kzd",
["Kadar"] = "kej",
["Kadara"] = "kad",
["Kadaru"] = "kdu",
["Kadiwéu"] = "kbc",
["Kado"] = "kdv",
["Kadu (Myanmar)"] = "zkd",
["Kadugli"] = "xtc",
["Kaduo"] = "ktp",
["Kaera"] = "jka",
["Kafa"] = "kbr",
["Kafoa"] = "kpu",
["Kagan Kalagan"] = "kll",
["Kagate"] = "syw",
["Kagayanen"] = "cgc",
["Kagoma"] = "kdm",
["Kagoro"] = "xkg",
["Kagulu"] = "kki",
["Kahe"] = "hka",
["Kahua"] = "agw",
["Kaian"] = "kct",
["Kaibobo"] = "kzb",
["Kaidipang"] = "kzp",
["Kaiep"] = "kbw",
["Kaikadi"] = "kep",
["Kaike"] = "kzq",
["Kaiku"] = "kkq",
["Kaimbulawa"] = "zka",
["Kaimbé"] = "xai",
["Kaingang"] = "kgp",
["Kairak"] = "ckr",
["Kairiru"] = "kxa",
["Kairui-Midiki"] = "krd",
["Kais"] = "kzm",
["Kaitag"] = "xdq",
["Kaivi"] = "kce",
["Kaiwá"] = "kgk",
["Kaiy"] = "tcq",
["Kajakse"] = "ckq",
["Kajali"] = "xkj",
["Kajaman"] = "kag",
["Kakabai"] = "kqf",
["Kakabe"] = "kke",
["Kakanda"] = "kka",
["Kaki Ae"] = "tbd",
["Kakihum"] = "kxe",
["Kako"] = "kkj",
["Kakwa"] = "keo",
["Kala"] = "kcl",
["Kala Lagaw Ya"] = "mwp",
["Kalaamaya"] = "lkm",
["Kalabakan"] = "kve",
["Kalabari"] = "ijn",
["Kalabra"] = "kzz",
["Kalagan"] = "kqe",
["Kalaktang Monpa"] = "kkf",
["Kalam"] = "kmh",
["Kalami"] = "gwc",
["Kalamsé"] = "knz",
["Kalanadi"] = "wkl",
["Kalanga"] = "kck",
["Kalao"] = "kly",
["Kalapuya"] = "kyl",
["Kalarko"] = "kba",
["Kalasha"] = "kls",
["Kalasuri"] = "xme-kls",
["Kalašma"] = "ine-kal",
["Kalenjin"] = "kln",
["Kalinago"] = "crb",
["Kalkatungu"] = "ktg",
["Kalkoti"] = "xka",
["Kallawaya"] = "caw",
["Kalmyk"] = "xal",
["Kalo Finnish Romani"] = "rmf",
["Kalou"] = "ywa",
["Kaluli"] = "bco",
["Kalumpang"] = "kli",
["Kam"] = "kdx",
["Kamakan"] = "vkm",
["Kamang"] = "woi",
["Kamano"] = "kbq",
["Kamantan"] = "kci",
["Kamar"] = "keq",
["Kamara"] = "jmr",
["Kamarian"] = "kzx",
["Kamaru"] = "kgx",
["Kamarupi Prakrit"] = "inc-kam",
["Kamasa"] = "klp",
["Kamasau"] = "kms",
["Kamassian"] = "xas",
["Kamayo"] = "kyk",
["Kamayurá"] = "kay",
["Kamba"] = "kam",
["Kambaata"] = "ktb",
["Kambaira"] = "kyy",
["Kambera"] = "xbr",
["Kamberataro"] = "kbv",
["Kamberau"] = "irx",
["Kambiwá"] = "xbw",
["Kami"] = "kmi",
["Kamkata-viri"] = "bsh",
["Kamo"] = "kcq",
["Kamoro"] = "kgq",
["Kamta"] = "rkt",
["Kamu"] = "xmu",
["Kamula"] = "xla",
["Kamwe"] = "hig",
["Kanakanabu"] = "xnb",
["Kanakuru"] = "kna",
["Kanamari"] = "knm",
["Kanashi"] = "xns",
["Kanasi"] = "soq",
["Kandas"] = "kqw",
["Kandawo"] = "gam",
["Kande"] = "kbs",
["Kang"] = "kyp",
["Kanga"] = "kcp",
["Kangean"] = "kkv",
["Kanggape"] = "igm",
["Kangjia"] = "kxs",
["Kango"] = "kty",
["Kango-Sua"] = "kzy",
["Kangri"] = "xnr",
["Kaniet"] = "ktk",
["Kanikkaran"] = "kev",
["Kaningdon-Nindem"] = "kdp",
["Kaningi"] = "kzo",
["Kaningra"] = "knr",
["Kaninuwa"] = "wat",
["Kanite"] = "kmu",
["Kanjari"] = "kft",
["Kanju"] = "kbe",
["Kankanaey"] = "kne",
["Kannada"] = "kn",
["Kannada Kurumba"] = "kfi",
["Kannauji"] = "bjj",
["Kanowit"] = "kxn",
["Kanoé"] = "kxo",
["Kansa"] = "ksk",
["Kantosi"] = "xkt",
["Kanu"] = "khx",
["Kanufi"] = "kni",
["Kanuri"] = "kr",
["Kanyok"] = "kny",
["Kao"] = "kax",
["Kaonde"] = "kqn",
["Kap"] = "ykm",
["Kapampangan"] = "pam",
["Kapauri"] = "khp",
["Kapin"] = "tbx",
["Kapinawá"] = "xpn",
["Kapingamarangi"] = "kpg",
["Kapriman"] = "dju",
["Kaptiau"] = "kbi",
["Kapya"] = "klo",
["Kaqchikel"] = "cak",
["Kaqchikel-K'iche' Mixed Language"] = "ckz",
["Kara (New Guinea)"] = "leu",
["Kara (Tanzania)"] = "reg",
["Karachay-Balkar"] = "krc",
["Karadjeri"] = "gbd",
["Karaga Mandaya"] = "mry",
["Karaim"] = "kdr",
["Karajá"] = "kpj",
["Karakalpak"] = "kaa",
["Karakhanid"] = "xqa",
["Karami"] = "xar",
["Karamojong"] = "kdj",
["Karang"] = "kzr",
["Karanga"] = "kth",
["Karankawa"] = "zkk",
["Karao"] = "kyj",
["Karas"] = "kgv",
["Karata"] = "kpt",
["Karawa"] = "xrw",
["Karbi"] = "mjw",
["Kare (Central Africa)"] = "kbn",
["Kare (New Guinea)"] = "kmf",
["Karekare"] = "kai",
["Karelian"] = "krl",
["Karey"] = "kyd",
["Kari"] = "kbj",
["Kari'na"] = "car",
["Karian"] = "bql",
["Karingani"] = "kgn",
["Karipuna"] = "kuq",
["Karipúna Creole French"] = "kmv",
["Kariri"] = "kzw",
["Karitiâna"] = "ktn",
["Kariya"] = "kil",
["Kariyarra"] = "vka",
["Karkar-Yuri"] = "yuj",
["Karkin"] = "krb",
["Karko"] = "kko",
["Karnai"] = "bbv",
["Karo"] = "kxh",
["Karo Batak"] = "btx",
["Karok"] = "kyh",
["Karolanos"] = "kyn",
["Karon"] = "krx",
["Karon Dori"] = "kgw",
["Karore"] = "xkx",
["Karranga"] = "xrq",
["Karuwali"] = "rxw",
["Kasanga"] = "ccj",
["Kasem"] = "xsm",
["Kashaya"] = "kju",
["Kashmiri"] = "ks",
["Kashubian"] = "csb",
["Kasiguranin"] = "ksn",
["Kaska"] = "kkz",
["Kaskean"] = "zsk",
["Kaskihá"] = "gva",
["Kassite"] = "mis-kas",
["Kassonke"] = "kao",
["Kasua"] = "khs",
["Kataang"] = "kgd",
["Katabaga"] = "ktq",
["Katawixi"] = "xat",
["Katembri"] = "sai-kat",
["Kathlamet"] = "nai-kat",
["Kathoriya Tharu"] = "tkt",
["Kathu"] = "ykt",
["Katkari"] = "kfu",
["Katla"] = "kcr",
["Kato"] = "ktw",
["Katso"] = "kaf",
["Katua"] = "kta",
["Katukina"] = "knt",
["Kaulong"] = "pss",
["Kaur"] = "vkk",
["Kaure"] = "bpp",
["Kaurna"] = "zku",
["Kauwera"] = "xau",
["Kavalan"] = "ckv",
["Kavet"] = "krv",
["Kawacha"] = "kcb",
["Kawaiisu"] = "xaw",
["Kawe"] = "kgb",
["Kawishana"] = "awd-kaw",
["Kawésqar"] = "alc",
["Kaxararí"] = "ktx",
["Kaxuyana"] = "kbb",
["Kayabí"] = "kyz",
["Kayagar"] = "kyt",
["Kayan"] = "pdu",
["Kayan Mahakam"] = "xay",
["Kayan River Kayan"] = "xkn",
["Kayapa Kallahan"] = "kak",
["Kayapó"] = "txu",
["Kayardild"] = "gyd",
["Kayeli"] = "kzl",
["Kayong"] = "kxy",
["Kayort"] = "kyv",
["Kaytetye"] = "gbb",
["Kayupulau"] = "kzu",
["Kazakh"] = "kk",
["Kazukuru"] = "kzk",
["Ke'o"] = "xxk",
["Keak"] = "keh",
["Keapara"] = "khz",
["Kedah Malay"] = "meo",
["Kedang"] = "ksx",
["Keder"] = "kdy",
["Kehu"] = "khh",
["Kei"] = "kei",
["Keiga"] = "kec",
["Kein"] = "bmh",
["Keiyo"] = "eyo",
["Kela-Yela"] = "kel",
["Kelabit"] = "kzi",
["Kelantan Peranakan Hokkien"] = "mis-hkl",
["Keley-I Kallahan"] = "ify",
["Keliko"] = "kbo",
["Kelo"] = "xel",
["Kelon"] = "kyo",
["Kemak"] = "kem",
["Kembayan"] = "xem",
["Kemberano"] = "bzp",
["Kembra"] = "xkw",
["Kemezung"] = "dmo",
["Kemi Sami"] = "sjk",
["Kemiehua"] = "kfj",
["Kemtuik"] = "kmt",
["Kenaboi"] = "xbn",
["Kenati"] = "gat",
["Kendayan"] = "knx",
["Kendeje"] = "klf",
["Kendem"] = "kvm",
["Kenga"] = "kyq",
["Keningau Murut"] = "kxi",
["Keninjal"] = "knl",
["Kensiu"] = "kns",
["Kenswei Nsei"] = "ndb",
["Kenyan Sign Language"] = "xki",
["Kenyang"] = "ken",
["Kenyi"] = "lke",
["Keoru-Ahia"] = "xeu",
["Kepkiriwát"] = "kpn",
["Kepo'"] = "kuk",
["Kera"] = "ker",
["Kerak"] = "hhr",
["Kereho"] = "xke",
["Kerek"] = "krk",
["Kerewe"] = "ked",
["Kerewo"] = "kxz",
["Kerinci"] = "kvr",
["Kermanic"] = "xme-ker",
["Ket"] = "ket",
["Ketangalan"] = "kae",
["Kete"] = "kcv",
["Ketengban"] = "xte",
["Ketum"] = "ktt",
["Kewa"] = "kew",
["Keyagana"] = "kyg",
["Kgalagadi"] = "xkv",
["Khakas"] = "kjh",
["Khalaj"] = "klj",
["Khaling"] = "klr",
["Khamnigan Mongol"] = "ykh",
["Khamti"] = "kht",
["Khamyang"] = "ksu",
["Khana"] = "ogo",
["Khandeshi"] = "khn",
["Khao"] = "xao",
["Kharam Naga"] = "kfw",
["Kharia"] = "khr",
["Kharia Thar"] = "ksy",
["Khasi"] = "kha",
["Khayo"] = "lko",
["Khazar"] = "zkz",
["Khe"] = "kqg",
["Khehek"] = "tlx",
["Khengkha"] = "xkf",
["Khetrani"] = "xhe",
["Khezha Naga"] = "nkh",
["Khiamniungan Naga"] = "kix",
["Khinalug"] = "kjj",
["Khirwar"] = "kwx",
["Khisa"] = "kqm",
["Khitan"] = "zkt",
["Khlula"] = "ykl",
["Khmer"] = "km",
["Khmu"] = "kjg",
["Khoekhoe"] = "naq",
["Khoibu Naga"] = "nkb",
["Khoini"] = "xkc",
["Kholok"] = "ktc",
["Kholosi"] = "inc-kho",
["Khorasani Turkish"] = "kmz",
["Khorezmian Turkic"] = "zkh",
["Khotanese"] = "kho",
["Khowar"] = "khw",
["Khroskyabs"] = "jiq",
["Khua"] = "xhv",
["Khuen"] = "khf",
["Khumi Chin"] = "cnk",
["Khvarshi"] = "khv",
["Khwarezmian"] = "xco",
["Khwe"] = "xuu",
["Kháng"] = "kjm",
["Khün"] = "kkh",
["Kiautschou German Pidgin"] = "crp-kia",
["Kibala"] = "blv",
["Kibena"] = "bez",
["Kibet"] = "kie",
["Kibiri"] = "prm",
["Kichwa"] = "qwe-kch",
["Kickapoo"] = "kic",
["Kikai"] = "kzg",
["Kikami"] = "kcu",
["Kikuyu"] = "ki",
["Kildin Sami"] = "sjd",
["Kili"] = "tuw-kli",
["Kilit"] = "xme-klt",
["Kilivila"] = "kij",
["Kiliwa"] = "klb",
["Kilmeri"] = "kih",
["Kim"] = "kia",
["Kim Mun"] = "mji",
["Kimaama"] = "kig",
["Kimaragang"] = "kqr",
["Kimbu"] = "kiv",
["Kimbundu"] = "kmb",
["Kimki"] = "sbt",
["Kimré"] = "kqp",
["Kinabalian"] = "cbw",
["Kinalakna"] = "kco",
["Kinaray-a"] = "krj",
["Kinga"] = "zga",
["Kings River Yokuts"] = "yok-kry",
["Kinikinao"] = "gqn",
["Kinnauri"] = "kfk",
["Kintaq"] = "knq",
["Kinuku"] = "kkd",
["Kioko"] = "ues",
["Kiong"] = "kkm",
["Kiorr"] = "xko",
["Kiowa"] = "kio",
["Kipchak"] = "qwm",
["Kipfokomo"] = "pkb",
["Kipsigis"] = "sgc",
["Kiput"] = "kyi",
["Kir-Balar"] = "kkr",
["Kire"] = "geb",
["Kirfi"] = "kks",
["Kirike"] = "okr",
["Kirikiri"] = "kiy",
["Kirya-Konzel"] = "fkk",
["Kis"] = "kis",
["Kisa"] = "lks",
["Kisan"] = "xis",
["Kisankasa"] = "kqh",
["Kisar"] = "kje",
["Kisi"] = "kiz",
["Kistane"] = "gru",
["Kita Maninkakan"] = "mwk",
["Kitanemuk"] = "azc-ktn",
["Kitembo"] = "tbt",
["Kitja"] = "gia",
["Kitsai"] = "kii",
["Kituba"] = "ktu",
["Kiunum"] = "wei",
["Kla"] = "lda",
["Klallam"] = "clm",
["Klamath-Modoc"] = "kla",
["Klao"] = "klu",
["Klias River Kadazan"] = "kqt",
["Klingon"] = "tlh",
["Knaanic"] = "czk",
["Ko"] = "fuj",
["Koalib"] = "kib",
["Koasati"] = "cku",
["Koba"] = "kpd",
["Kobiana"] = "kcj",
["Kobol"] = "kgu",
["Kobon"] = "kpw",
["Koch"] = "kdq",
["Kochila Tharu"] = "thq",
["Koda"] = "cdz",
["Kodaku"] = "ksz",
["Kodava"] = "kfa",
["Kodeoha"] = "vko",
["Kodi"] = "kod",
["Kodia"] = "kwp",
["Koenoem"] = "kcs",
["Kofa"] = "kso",
["Kofei"] = "kpi",
["Kofyar"] = "kwl",
["Kohin"] = "kkx",
["Kohistani Shina"] = "plk",
["Koho"] = "kpm",
["Kohumono"] = "bcs",
["Koi"] = "kkt",
["Koibal"] = "zkb",
["Koireng"] = "nkd",
["Koitabu"] = "kqi",
["Koiwat"] = "kxt",
["Kok-Nar"] = "gko",
["Kok-Paponk"] = "okg",
["Kokata"] = "ktd",
["Kokborok"] = "trp",
["Koke"] = "kou",
["Koko-Bera"] = "kkp",
["Kokoda"] = "xod",
["Kokola"] = "kzn",
["Kokota"] = "kkk",
["Kol (Cameroon)"] = "biw",
["Kol (New Guinea)"] = "kol",
["Kola"] = "kvv",
["Kolami"] = "kfb",
["Kolbila"] = "klc",
["Kolhe"] = "ekl",
["Kolibugan Subanon"] = "skn",
["Kolom"] = "klm",
["Koluwawa"] = "klx",
["Kom (Cameroon)"] = "bkm",
["Kom (India)"] = "kmm",
["Koma"] = "kmy",
["Komba"] = "kpf",
["Kombai"] = "tyn",
["Kombio"] = "xbi",
["Komering"] = "kge",
["Komi-Permyak"] = "koi",
["Komi-Yazva"] = "urj-kya",
["Komi-Zyrian"] = "kpv",
["Kominimung"] = "xoi",
["Komo"] = "xom",
["Komodo"] = "kvh",
["Kompane"] = "kvp",
["Komyandaret"] = "kzv",
["Kon Keu"] = "kkn",
["Konabéré"] = "bbo",
["Konai"] = "kxw",
["Konda"] = "knd",
["Konda-Dora"] = "kfc",
["Kondekor"] = "gau",
["Koneraw"] = "kdw",
["Kongo"] = "kg",
["Konkani"] = "kok",
["Konkomba"] = "xon",
["Konni"] = "kma",
["Kono (Guinea)"] = "knu",
["Kono (Nigeria)"] = "klk",
["Kono (Sierra Leone)"] = "kno",
["Konomala"] = "koa",
["Konomihu"] = "nai-knm",
["Konongo"] = "kcz",
["Konso"] = "kxc",
["Konyak Naga"] = "nbe",
["Konyanka Maninka"] = "mku",
["Konzo"] = "koo",
["Koonzime"] = "ozm",
["Koorete"] = "kqy",
["Kopar"] = "xop",
["Kopkaka"] = "opk",
["Korafe-Yegha"] = "kpr",
["Korak"] = "koz",
["Korana"] = "kqz",
["Korandje"] = "kcy",
["Korean"] = "ko",
["Korean Sign Language"] = "kvk",
["Koreguaje"] = "coe",
["Koresh-e Rostam"] = "okh",
["Korku"] = "kfq",
["Korlai Creole Portuguese"] = "vkp",
["Koro (India)"] = "jkr",
["Koro (Vanuatu)"] = "krf",
["Koro (West Africa)"] = "kfo",
["Koromfé"] = "kfz",
["Koromira"] = "kqj",
["Koromu"] = "xes",
["Koronadal Blaan"] = "bpr",
["Koroni"] = "xkq",
["Korop"] = "krp",
["Koropó"] = "xxr",
["Koroshi"] = "ktl",
["Korowai"] = "khe",
["Korra Koraga"] = "kfd",
["Korubo"] = "xor",
["Korupun-Sela"] = "kpq",
["Korwa"] = "kfp",
["Koryak"] = "kpy",
["Kosadle"] = "kiq",
["Kosarek Yale"] = "kkl",
["Koshin"] = "kid",
["Kosraean"] = "kos",
["Kota (Gabon)"] = "koq",
["Kota (India)"] = "kfe",
["Kota Bangun Kutai Malay"] = "mqg",
["Kota Marudu Talantang"] = "grm",
["Kotafon Gbe"] = "kqk",
["Kotava"] = "avk",
["Koti"] = "eko",
["Kott"] = "zko",
["Kou"] = "snz",
["Kouya"] = "kyf",
["Kovai"] = "kqb",
["Kove"] = "kvc",
["Kowaki"] = "xow",
["Kowiai"] = "kwh",
["Koy Sanjaq Surat"] = "kqd",
["Koya"] = "kff",
["Koyaga"] = "kga",
["Koyo"] = "koh",
["Koyra Chiini"] = "khq",
["Koyraboro Senni"] = "ses",
["Koyukon"] = "koy",
["Kpagua"] = "kuw",
["Kpala"] = "kpl",
["Kpan"] = "kpk",
["Kpasam"] = "pbn",
["Kpati"] = "koc",
["Kpatili"] = "kym",
["Kpee"] = "cpo",
["Kpelle"] = "kpe",
["Kpessi"] = "kef",
["Kplang"] = "kph",
["Krache"] = "kye",
["Krahô"] = "xra",
["Kraol"] = "rka",
["Krenak"] = "kqq",
["Kresh"] = "krs",
["Krevinian"] = "zkv",
["Kreye"] = "xre",
["Krikati-Timbira"] = "xri",
["Krim"] = "krm",
["Krio"] = "kri",
["Krisa"] = "ksi",
["Kristang"] = "mcm",
["Krobu"] = "kxb",
["Krongo"] = "kgo",
["Kru'ng"] = "krr",
["Krymchak"] = "jct",
["Kryts"] = "kry",
["Ktunaxa"] = "kut",
["Kua"] = "tyu",
["Kua-nsi"] = "ykn",
["Kuamasi"] = "yku",
["Kuan"] = "uan",
["Kuanhua"] = "xnh",
["Kube"] = "kgf",
["Kubi"] = "kof",
["Kubo"] = "jko",
["Kubu"] = "kvb",
["Kucong"] = "lkc",
["Kudiya"] = "kfg",
["Kudmali"] = "kyw",
["Kudu-Camo"] = "kov",
["Kugama"] = "kow",
["Kugbo"] = "kes",
["Kugu-Muminh"] = "xmh",
["Kui (India)"] = "kxu",
["Kui (Indonesia)"] = "kvd",
["Kuijau"] = "dkr",
["Kuikúro"] = "kui",
["Kujarge"] = "vkj",
["Kuk"] = "kfn",
["Kukatja"] = "kux",
["Kukele"] = "kez",
["Kukkuzi"] = "urj-kuk",
["Kukna"] = "kex",
["Kuku-Mangk"] = "xmq",
["Kuku-Mu'inh"] = "xmp",
["Kuku-Thaypan"] = "typ",
["Kuku-Ugbanh"] = "ugb",
["Kuku-Uwanh"] = "uwa",
["Kuku-Yalanji"] = "gvn",
["Kula"] = "tpg",
["Kulaal"] = "glj",
["Kulere"] = "kul",
["Kulfa"] = "kxj",
["Kulina"] = "xpk",
["Kulisusu"] = "vkl",
["Kullu Pahari"] = "kfx",
["Kulon"] = "uon",
["Kulung"] = "kle",
["Kumak"] = "nee",
["Kumalu"] = "ksl",
["Kumam"] = "kdi",
["Kuman"] = "kue",
["Kumaoni"] = "kfy",
["Kumarbhag Paharia"] = "kmj",
["Kumba"] = "ksm",
["Kumbainggar"] = "kgs",
["Kumbaran"] = "wkb",
["Kumbewaha"] = "xks",
["Kumeyaay"] = "nai-kum",
["Kumhali"] = "kra",
["Kumu"] = "kmw",
["Kumukio"] = "kuo",
["Kumyk"] = "kum",
["Kumzari"] = "zum",
["Kuna"] = "cuk",
["Kunama"] = "kun",
["Kunbarlang"] = "wlg",
["Kunda"] = "kdn",
["Kundal Shahi"] = "shd",
["Kunduvadi"] = "wku",
["Kung"] = "kfl",
["Kungarakany"] = "ggk",
["Kungardutyi"] = "gdt",
["Kunggari"] = "kgl",
["Kungkari"] = "lku",
["Kuni"] = "kse",
["Kuni-Boazi"] = "kvg",
["Kunigami"] = "xug",
["Kunimaipa"] = "kup",
["Kunja"] = "pep",
["Kunjen"] = "kjn",
["Kunyi"] = "njx",
["Kunza"] = "kuz",
["Kuo"] = "xuo",
["Kuot"] = "kto",
["Kupa"] = "kug",
["Kupang Malay"] = "mkn",
["Kupia"] = "key",
["Kupsabiny"] = "kpz",
["Kur"] = "kuv",
["Kura Ede Nago"] = "nqk",
["Kurama"] = "krh",
["Kuranko"] = "knk",
["Kuri"] = "nbn",
["Kuria"] = "kuj",
["Kurichiya"] = "kfh",
["Kurmukar"] = "kfv",
["Kurnai"] = "unn",
["Kurrama"] = "vku",
["Kursav"] = "faj",
["Kurti"] = "ktm",
["Kurtjar"] = "gdj",
["Kurtöp"] = "xkz",
["Kurudu"] = "kjr",
["Kurux"] = "kru",
["Kuruáya"] = "kyr",
["Kusaal"] = "kus",
["Kusaghe"] = "ksg",
["Kushi"] = "kuh",
["Kustenau"] = "awd-kus",
["Kusu"] = "ksv",
["Kusunda"] = "kgg",
["Kutang Ghale"] = "ght",
["Kutep"] = "kub",
["Kuthant"] = "xut",
["Kutto"] = "kpa",
["Kutu"] = "kdc",
["Kuturmi"] = "khj",
["Kuuk Thaayorre"] = "thd",
["Kuuk Yak"] = "uky",
["Kuuku-Ya'u"] = "kuy",
["Kuvale"] = "olu",
["Kuvi"] = "kxv",
["Kuwaa"] = "blh",
["Kuwaataay"] = "cwt",
["Kuwani"] = "paa-kwn",
["Kuy"] = "kdt",
["Kven"] = "fkv",
["Kw'adza"] = "wka",
["Kwa'"] = "bko",
["Kwaami"] = "ksq",
["Kwadi"] = "kwz",
["Kwaio"] = "kwd",
["Kwaja"] = "kdz",
["Kwak"] = "kwq",
["Kwak'wala"] = "kwk",
["Kwakum"] = "kwu",
["Kwalhioqua-Tlatskanai"] = "qwt",
["Kwama"] = "kmq",
["Kwambi"] = "kwm",
["Kwamera"] = "tnk",
["Kwami"] = "ktf",
["Kwamtim One"] = "okk",
["Kwang"] = "kvi",
["Kwanga"] = "kwj",
["Kwangali"] = "kwn",
["Kwanja"] = "knp",
["Kwanka"] = "bij",
["Kwanyama"] = "kj",
["Kwara'ae"] = "kwf",
["Kwasio"] = "nmg",
["Kwaya"] = "kya",
["Kwaza"] = "xwa",
["Kwegu"] = "xwg",
["Kwer"] = "kwr",
["Kwerba"] = "kwe",
["Kwerba Mamberamo"] = "xwr",
["Kwere"] = "cwe",
["Kwerisa"] = "kkb",
["Kwese"] = "kws",
["Kwesten"] = "kwt",
["Kwini"] = "gww",
["Kwinsu"] = "kuc",
["Kwinti"] = "kww",
["Kwoma"] = "kmo",
["Kwomtari"] = "kwo",
["Kyak"] = "bka",
["Kyaka"] = "kyc",
["Kyakala"] = "tuw-kkl",
["Kyan-Karyaw Naga"] = "nqq",
["Kyenele"] = "kql",
["Kyenga"] = "tye",
["Kyerung"] = "kgy",
["Kyrgyz"] = "ky",
["Kâte"] = "kmg",
["Kélé"] = "keb",
["Kómnzo"] = "paa-kmn",
["La'bi"] = "lbi",
["Laal"] = "gdm",
["Laalaa"] = "cae",
["Laba"] = "lau",
["Label"] = "lbb",
["Labir"] = "jku",
["Labo"] = "mwi",
["Labo Phowa"] = "ypb",
["Laboya"] = "lmy",
["Labu"] = "lbu",
["Labuk-Kinabatangan Kadazan"] = "dtb",
["Lacandon"] = "lac",
["Lachi"] = "lbt",
["Lachiguiri Zapotec"] = "zpa",
["Lachixío Zapotec"] = "zpl",
["Ladakhi"] = "lbj",
["Ladin"] = "lld",
["Ladino"] = "lad",
["Ladji-Ladji"] = "llj",
["Laeko-Libuat"] = "lkl",
["Lafofa"] = "laf",
["Laghu"] = "lgb",
["Laghuu"] = "lgh",
["Lagwan"] = "kot",
["Laha (Indonesia)"] = "lhh",
["Laha (Vietnam)"] = "lha",
["Lahanan"] = "lhn",
["Lahnda"] = "lah",
["Lahta Karen"] = "kvt",
["Lahu"] = "lhu",
["Lahu Shi"] = "lhi",
["Lahul Lohar"] = "lhl",
["Lai"] = "cnh",
["Laimbue"] = "lmx",
["Laitu Chin"] = "clj",
["Laiyolo"] = "lji",
["Lak"] = "lbe",
["Laka"] = "lak",
["Lakalei"] = "lka",
["Lake Miwok"] = "lmw",
["Lakha"] = "lkh",
["Laki"] = "lki",
["Lakkia"] = "lbc",
["Lakon"] = "lkn",
["Lakondê"] = "lkd",
["Lakota"] = "lkt",
["Lakota Dida"] = "dic",
["Lala (New Guinea)"] = "nrz",
["Lala (South Africa)"] = "bnt-lal",
["Lala-Bisa"] = "leb",
["Lala-Roba"] = "lla",
["Lalana Chinantec"] = "cnl",
["Lama Bai"] = "lay",
["Lamaholot"] = "slp",
["Lamalera"] = "lmr",
["Lamang"] = "hia",
["Lamatuka"] = "lmq",
["Lamba"] = "lam",
["Lambadi"] = "lmn",
["Lambichhong"] = "lmh",
["Lambya"] = "lai",
["Lame"] = "bma",
["Lamenu"] = "lmu",
["Lamet"] = "lbn",
["Lamja-Dengsa-Tola"] = "ldh",
["Lamkang"] = "lmk",
["Lamma"] = "lev",
["Lamnso'"] = "lns",
["Lamogai"] = "lmg",
["Lampung Api"] = "ljp",
["Lamu"] = "llh",
["Lamu-Lamu"] = "lby",
["Lanas Lobu"] = "ruu",
["Landoma"] = "ldm",
["Lang'e"] = "yne",
["Langbashe"] = "lna",
["Langi"] = "lag",
["Langnian Buyang"] = "yln",
["Lango (Sudan)"] = "lno",
["Lango (Uganda)"] = "laj",
["Lanima"] = "lnw",
["Lanoh"] = "lnh",
["Lao"] = "lo",
["Lao Naga"] = "nlq",
["Laomian"] = "lwm",
["Laopang"] = "lbg",
["Laos Sign Language"] = "lso",
["Lapaguía-Guivini Zapotec"] = "ztl",
["Lapine"] = "art-lap",
["Lapuyan Subanun"] = "laa",
["Laragia"] = "lrg",
["Larantuka Malay"] = "lrt",
["Lardil"] = "lbz",
["Larestani"] = "lrl",
["Larike-Wakasihu"] = "alo",
["Laro"] = "lro",
["Larteh"] = "lar",
["Laru"] = "lan",
["Larëvat"] = "lrv",
["Lasalimu"] = "llm",
["Lasgerdi"] = "lsa",
["Lashi"] = "lsi",
["Lasi"] = "lss",
["Latgalian"] = "ltg",
["Latin"] = "la",
["Latu"] = "ltu",
["Latundê"] = "ltn",
["Latvian"] = "lv",
["Latvian Sign Language"] = "lsl",
["Lau"] = "llu",
["Laua"] = "luf",
["Lauan"] = "llx",
["Lauje"] = "law",
["Laura"] = "lur",
["Laurentian"] = "lre",
["Lavatbura-Lamusong"] = "lbv",
["Lave"] = "brb",
["Laven"] = "lbo",
["Lavukaleve"] = "lvk",
["Lawangan"] = "lbx",
["Lawi"] = "lvi",
["Lawu"] = "lwu",
["Lawunuia"] = "tgi",
["Layakha"] = "lya",
["Laz"] = "lzz",
["Laze"] = "tbq-laz",
["Lealao Chinantec"] = "cle",
["Leco"] = "lec",
["Ledo Kaili"] = "lew",
["Leelau"] = "ldk",
["Lefa"] = "lfa",
["Lega-Mwenga"] = "lgm",
["Lega-Shabunda"] = "lea",
["Legbo"] = "agb",
["Legenyem"] = "lcc",
["Lehali"] = "tql",
["Leinong Naga"] = "lzn",
["Leipon"] = "lek",
["Leitre"] = "paa-lei",
["Leizhou Min"] = "luh",
["Lela"] = "dri",
["Lelak"] = "llk",
["Lele (Chad)"] = "lln",
["Lele (Congo)"] = "lel",
["Lele (Guinea)"] = "llc",
["Lele (New Guinea)"] = "lle",
["Lelemi"] = "lef",
["Lelepa"] = "lpa",
["Lembena"] = "leq",
["Lemerig"] = "lrz",
["Lemio"] = "lei",
["Lemnian"] = "xle",
["Lemolang"] = "ley",
["Lemoro"] = "ldj",
["Lenakel"] = "tnl",
["Lendu"] = "led",
["Lengilu"] = "lgi",
["Lengo"] = "lgr",
["Lengola"] = "lej",
["Lenje"] = "leh",
["Lenkau"] = "ler",
["Lenyima"] = "ldg",
["Leonese"] = "roa-leo",
["Lepcha"] = "lep",
["Lepki"] = "lpe",
["Lepontic"] = "xlp",
["Lere"] = "gnh",
["Lese"] = "les",
["Lesing-Gelimi"] = "let",
["Letemboi"] = "nms",
["Leti"] = "lti",
["Levuka"] = "lvu",
["Lewo"] = "lww",
["Lewo Eleng"] = "lwe",
["Lewotobi"] = "lwt",
["Leyigha"] = "ayi",
["Lezgi"] = "lez",
["Lhao Vo"] = "mhx",
["Lhokpu"] = "lhp",
["Li'o"] = "ljl",
["Liabuku"] = "lix",
["Liana-Seti"] = "ste",
["Liangmai Naga"] = "njn",
["Liberia Kpelle"] = "xpe",
["Liberian Kreyol"] = "lir",
["Libido"] = "liq",
["Libinza"] = "liz",
["Libon Bikol"] = "lbl",
["Liburnian"] = "xli",
["Libyan Arabic"] = "ayl",
["Libyan Sign Language"] = "lbs",
["Ligbi"] = "lig",
["Ligenza"] = "lgz",
["Ligurian"] = "lij",
["Lihir"] = "lih",
["Lika"] = "lik",
["Liki"] = "lio",
["Likila"] = "lie",
["Likuba"] = "kxx",
["Likum"] = "lib",
["Likwala"] = "kwc",
["Lilau"] = "lll",
["Lillooet"] = "lil",
["Limassa"] = "bme",
["Limbu"] = "lif",
["Limbum"] = "lmp",
["Limburgish"] = "li",
["Limi"] = "ylm",
["Limilngan"] = "lmc",
["Limos Kalinga"] = "kmk",
["Lindu"] = "klw",
["Linear A"] = "lab",
["Lingala"] = "ln",
["Lingao"] = "onb",
["Lingkhim"] = "lii",
["Lingua Franca Nova"] = "lfn",
["Linngithigh"] = "lnj",
["Lipan"] = "apl",
["Lipo"] = "lpo",
["Lisabata-Nuniali"] = "lcs",
["Lisela"] = "lcl",
["Lish"] = "lsh",
["Lishana Deni"] = "lsd",
["Lishanid Noshan"] = "aij",
["Lishán Didán"] = "trg",
["Lisu"] = "lis",
["Lithuanian"] = "lt",
["Lithuanian Sign Language"] = "lls",
["Little Swanport"] = "aus-lsw",
["Litzlitz"] = "lzl",
["Livonian"] = "liv",
["Livvi"] = "olo",
["Lizu"] = "sit-liz",
["Lo-Toga"] = "lht",
["Loarki"] = "lrk",
["Lobala"] = "loq",
["Lobi"] = "lob",
["Lodhi"] = "lbm",
["Logba"] = "lgq",
["Logo"] = "log",
["Logol"] = "lof",
["Logooli"] = "rag",
["Logorik"] = "liu",
["Lojban"] = "jbo",
["Lokaa"] = "yaz",
["Loko"] = "lok",
["Lokono"] = "arw",
["Lokoya"] = "lky",
["Lola"] = "lcd",
["Lolak"] = "llq",
["Lole"] = "llg",
["Lolo"] = "llb",
["Loloda"] = "loa",
["Lolopo"] = "ycl",
["Loma"] = "lom",
["Lomaiviti"] = "lmv",
["Lomakka"] = "loi",
["Lomavren"] = "rmi",
["Lombard"] = "lmo",
["Lombi"] = "lmi",
["Lombo"] = "loo",
["Lomwe"] = "ngl",
["Loncong"] = "lce",
["Long Phuri Naga"] = "lpn",
["Long Wat"] = "ttw",
["Longgu"] = "lgu",
["Longjia"] = "sit-lnj",
["Longto"] = "wok",
["Longuda"] = "lnu",
["Longyan Min"] = "nan-lnx",
["Loniu"] = "los",
["Lonwolwol"] = "crc",
["Loo"] = "ldo",
["Lopa"] = "lop",
["Lope"] = "yiu",
["Lopi"] = "lov",
["Lopit"] = "lpx",
["Lorang"] = "lrn",
["Lorediakarkar"] = "lnn",
["Lorrain"] = "roa-lor",
["Lote"] = "uvl",
["Lotha Naga"] = "njh",
["Lotud"] = "dtr",
["Lotuko"] = "lot",
["Lou"] = "loj",
["Louisiana Creole"] = "lou",
["Loun"] = "lox",
["Loup A"] = "xlo",
["Loup B"] = "xlb",
["Lovono"] = "vnk",
["Low German"] = "nds",
["Lower Burdekin"] = "xbb",
["Lower Chehalis"] = "cea",
["Lower Grand Valley Dani"] = "dni",
["Lower Mandobo"] = "bwp",
["Lower Nossob"] = "nsb",
["Lower Sorbian"] = "dsb",
["Lower Southern Aranda"] = "axl",
["Lower Ta'oih"] = "tto",
["Lower Tanana"] = "taa",
["Lowland Oaxaca Chontal"] = "clo",
["Lowland Tarahumara"] = "tac",
["Loxicha Zapotec"] = "ztp",
["Lozi"] = "loz",
["Luang"] = "lex",
["Luba-Kasai"] = "lua",
["Luba-Katanga"] = "lu",
["Lubila"] = "kcc",
["Lubu"] = "lcf",
["Lubuagan Kalinga"] = "knb",
["Luchazi"] = "lch",
["Lucumí"] = "luq",
["Ludian"] = "lud",
["Lufu"] = "ldq",
["Luganda"] = "lg",
["Lugbara"] = "lgg",
["Luguru"] = "ruf",
["Luhu"] = "lcq",
["Luhya"] = "luy",
["Luimbi"] = "lum",
["Luiseño"] = "lui",
["Lukpa"] = "dop",
["Lule"] = "ule",
["Lule Sami"] = "smj",
["Lumba-Yakkha"] = "luu",
["Lumbu"] = "lup",
["Lumun"] = "lmd",
["Lun Bawang"] = "lnd",
["Luna"] = "luj",
["Lunanakha"] = "luk",
["Lunda"] = "lun",
["Lungga"] = "lga",
["Luo"] = "luo",
["Luopohe Hmong"] = "hml",
["Luren"] = "sit-lrn",
["Luri (Nigeria)"] = "ldd",
["Lusengo"] = "lse",
["Lushootseed"] = "lut",
["Lusi"] = "khl",
["Lusitanian"] = "xls",
["Lutachoni"] = "lts",
["Lutos"] = "ndy",
["Lutuv"] = "clt",
["Luvale"] = "lue",
["Luwati"] = "luv",
["Luwian"] = "xlu",
["Luwo"] = "lwo",
["Luxembourgish"] = "lb",
["Luyana"] = "lyn",
["Lwalu"] = "lwa",
["Lwel"] = "lvl",
["Lycian"] = "xlc",
["Lydian"] = "xld",
["Lyngngam"] = "lyg",
["Lyélé"] = "lee",
["Láadan"] = "ldn",
["Láá Láá Bwamu"] = "bwj",
["Löyöp"] = "urr",
["Lü"] = "khb",
["Ma"] = "msj",
["Ma Manda"] = "skc",
["Ma'anyan"] = "mhy",
["Ma'di"] = "mhi",
["Ma'ya"] = "slz",
["Maaka"] = "mew",
["Maale"] = "mdy",
["Maasai"] = "mas",
["Maay"] = "ymm",
["Maba"] = "mqa",
["Mabaale"] = "mmz",
["Mabaan"] = "mfz",
["Mabaka Valley Kalinga"] = "kkg",
["Mabire"] = "muj",
["Maca"] = "mca",
["Macaguaje"] = "mcl",
["Macaguán"] = "mbn",
["Macanese"] = "mzs",
["Macau Pidgin Portuguese"] = "crp-mpp",
["Macedonian"] = "mk",
["Machame"] = "jmc",
["Machiguenga"] = "mcb",
["Machinere"] = "mpd",
["Machinga"] = "mvw",
["Macoris"] = "nai-mac",
["Macuna"] = "myy",
["Macushi"] = "mbc",
["Mada (Cameroon)"] = "mxu",
["Mada (Nigeria)"] = "mda",
["Madagascar Sign Language"] = "mzc",
["Madak"] = "mmx",
["Maden"] = "xmx",
["Madhi Madhi"] = "dmd",
["Madi"] = "grg",
["Madngele"] = "zml",
["Madukayang Kalinga"] = "kmd",
["Madurese"] = "mad",
["Maeng Itneg"] = "itt",
["Mafa"] = "maf",
["Mag-Anchi Ayta"] = "sgb",
["Mag-Indi Ayta"] = "blx",
["Magahat"] = "mtw",
["Magahi"] = "mag",
["Magdalena Peñasco Mixtec"] = "xtm",
["Magi"] = "gkd",
["Magiyi"] = "gmg",
["Magoma"] = "gmx",
["Magori"] = "zgr",
["Maguindanao"] = "mdh",
["Mahali"] = "mjx",
["Mahasu Pahari"] = "bfz",
["Mahican"] = "mjy",
["Mahongwe"] = "mhb",
["Mahou"] = "mxx",
["Maia"] = "sks",
["Maiadomu"] = "mzz",
["Maiani"] = "tnh",
["Maii"] = "mmm",
["Mailu"] = "mgu",
["Maindo"] = "cwb",
["Maipure"] = "awd-mpr",
["Mairasi"] = "zrs",
["Maisin"] = "mbq",
["Maithili"] = "mai",
["Maiwa (Indonesia)"] = "wmm",
["Maiwa (New Guinea)"] = "mti",
["Maiwala"] = "mum",
["Majang"] = "mpe",
["Majera"] = "xmj",
["Majhi"] = "mjz",
["Majhwar"] = "mmj",
["Mak (China)"] = "mkg",
["Mak (Nigeria)"] = "pbl",
["Makaa"] = "mcp",
["Makah"] = "myh",
["Makalero"] = "mjb",
["Makasae"] = "mkz",
["Makasar"] = "mak",
["Makassar Malay"] = "mfp",
["Makayam"] = "aup",
["Makhuwa"] = "vmw",
["Makhuwa-Marrevone"] = "xmc",
["Makhuwa-Meetto"] = "mgh",
["Makhuwa-Moniga"] = "mhm",
["Makhuwa-Saka"] = "xsq",
["Makhuwa-Shirima"] = "vmk",
["Maklew"] = "mgf",
["Makolkol"] = "zmh",
["Makonde"] = "kde",
["Maku"] = "xak",
["Maku'a"] = "lva",
["Makuri Naga"] = "jmn",
["Makuráp"] = "mpu",
["Makwe"] = "ymk",
["Makyan Naga"] = "umn",
["Mal"] = "mlf",
["Mal Paharia"] = "mkb",
["Mala (New Guinea)"] = "ped",
["Mala (Nigeria)"] = "ruy",
["Mala Malasar"] = "ima",
["Malaccan Creole Malay"] = "ccm",
["Malagasy"] = "mg",
["Malalamai"] = "mmt",
["Malalí"] = "sai-mal",
["Malango"] = "mln",
["Malankuravan"] = "mjo",
["Malapandaram"] = "mjp",
["Malaryan"] = "mjq",
["Malas"] = "mkr",
["Malasanga"] = "mqz",
["Malasar"] = "ymr",
["Malavedan"] = "mjr",
["Malawi Lomwe"] = "lon",
["Malawian Sign Language"] = "lws",
["Malay"] = "ms",
["Malayalam"] = "ml",
["Malayic Dayak"] = "xdy",
["Malaynon"] = "mlz",
["Malaysian Sign Language"] = "xml",
["Malba Birifor"] = "bfo",
["Male"] = "mdc",
["Malecite-Passamaquoddy"] = "pqm",
["Maleng"] = "pkt",
["Maleu-Kilenge"] = "mgl",
["Malfaxal"] = "mlx",
["Malgana"] = "vml",
["Malgbe"] = "mxf",
["Mali"] = "gcc",
["Malibu"] = "sai-mlb",
["Malila"] = "mgq",
["Malimba"] = "mzd",
["Malimpung"] = "mli",
["Malinaltepec Tlapanec"] = "tcf",
["Malol"] = "mbk",
["Maltese"] = "mt",
["Maltese Sign Language"] = "mdl",
["Malua Bay"] = "mll",
["Malvi"] = "mup",
["Maléku Jaíka"] = "gut",
["Mam"] = "mam",
["Mama"] = "mma",
["Mamaa"] = "mhf",
["Mamaindé"] = "wmd",
["Mamanwa"] = "mmn",
["Mamara"] = "myk",
["Mamasa"] = "mqj",
["Mambae"] = "mgm",
["Mambai"] = "mcs",
["Mamboru"] = "mvd",
["Mambwe-Lungu"] = "mgr",
["Mampruli"] = "maw",
["Mamuju"] = "mqx",
["Mamulique"] = "emm",
["Mamusi"] = "kdf",
["Mamvu"] = "mdi",
["Man Met"] = "mml",
["Manado Malay"] = "xmm",
["Manam"] = "mva",
["Manambu"] = "mle",
["Manangba"] = "nmm",
["Manangkari"] = "znk",
["Manao"] = "awd-man",
["Manat"] = "pmr",
["Manchu"] = "mnc",
["Manda (Australia)"] = "zma",
["Manda (India)"] = "mha",
["Manda (Tanzania)"] = "mgs",
["Mandahuaca"] = "mht",
["Mandaic"] = "mid",
["Mandailing Batak"] = "btm",
["Mandalorian"] = "art-man",
["Mandan"] = "mhq",
["Mandandanyi"] = "zmk",
["Mandar"] = "mdr",
["Mandara"] = "tbf",
["Mandari"] = "mqu",
["Mandarin"] = "cmn",
["Mandeali"] = "mjl",
["Mander"] = "mqr",
["Mandingo"] = "man",
["Mandinka"] = "mnk",
["Mandjak"] = "mfv",
["Manem"] = "jet",
["Mang"] = "zng",
["Mangala"] = "mem",
["Mangarayi"] = "mpc",
["Mangarevan"] = "mrv",
["Mangas"] = "zns",
["Mangayat"] = "myj",
["Mangbetu"] = "mdj",
["Mangbutu"] = "mdk",
["Mangerr"] = "zme",
["Mangga Buang"] = "mmo",
["Manggarai"] = "mqy",
["Mangghuer"] = "mjg-mgr",
["Mango"] = "mge",
["Mangole"] = "mqc",
["Mangseng"] = "mbh",
["Manigri-Kambolé Ede Nago"] = "xkb",
["Manipa"] = "mqp",
["Manipuri"] = "mni",
["Mankanya"] = "knf",
["Mankiyali"] = "nlm",
["Manna-Dora"] = "mju",
["Mannan"] = "mjv",
["Mano"] = "mev",
["Manombai"] = "woo",
["Mansaka"] = "msk",
["Mansoanka"] = "msw",
["Manta"] = "myg",
["Mantsi"] = "nty",
["Manumanaw Karen"] = "kxf",
["Manus Koro"] = "kxr",
["Manusela"] = "wha",
["Manx"] = "gv",
["Manya"] = "mzj",
["Manyawa"] = "mny",
["Manza"] = "mzv",
["Mao Naga"] = "nbi",
["Maonan"] = "mmd",
["Maore Comorian"] = "swb",
["Mape"] = "mlh",
["Mapena"] = "mnm",
["Mapia"] = "mpy",
["Mapidian"] = "mpw",
["Mapos Buang"] = "bzh",
["Mapoyo"] = "mcg",
["Mapudungun"] = "arn",
["Mapun"] = "sjm",
["Mara"] = "mec",
["Mara Chin"] = "mrh",
["Marachi"] = "lri",
["Maraghei"] = "vmh",
["Maragus"] = "mrs",
["Maram Naga"] = "nma",
["Marama"] = "lrm",
["Maranao"] = "mrw",
["Maranungku"] = "zmr",
["Mararit"] = "mgb",
["Marathi"] = "mr",
["Maratino"] = "sai-mar",
["Marau"] = "mvr",
["Marawan"] = "awd-mar",
["Marba"] = "mpg",
["Marenje"] = "vmr",
["Marfa"] = "mvu",
["Margany"] = "zmc",
["Marghi South"] = "mfm",
["Margi"] = "mrt",
["Mari (Austronesian)"] = "hob",
["Mari (Sepik)"] = "mbx",
["Maria"] = "mds",
["Mariaté"] = "awd-mrt",
["Maricopa"] = "mrc",
["Maridan"] = "zmd",
["Maridjabin"] = "zmj",
["Marik"] = "dad",
["Marimanindji"] = "zmm",
["Marind"] = "mrz",
["Maring"] = "mbw",
["Maring Naga"] = "nng",
["Maringarr"] = "zmt",
["Mariri"] = "mqi",
["Maritime Sign Language"] = "nsr",
["Maritsauá"] = "msp",
["Mariupol Greek"] = "grk-mar",
["Mariyedi"] = "zmy",
["Marka"] = "rkm",
["Markweeta"] = "enb",
["Marma"] = "rmz",
["Maroon Spirit Language"] = "crp-mar",
["Marovo"] = "mvo",
["Marrgu"] = "mhg",
["Marriammu"] = "xru",
["Marrithiyel"] = "mfr",
["Marrucinian"] = "umc",
["Marshallese"] = "mh",
["Marsian"] = "ims",
["Martha's Vineyard Sign Language"] = "mre",
["Marti Ke"] = "zmg",
["Martu Wangka"] = "mpj",
["Martuthunira"] = "vma",
["Marwari"] = "mwr",
["Marúbo"] = "mzr",
["Masaba"] = "myx",
["Masadiit Itneg"] = "tis",
["Masakará"] = "sai-msk",
["Masalit"] = "mls",
["Masana"] = "mcn",
["Masbate Sorsogon"] = "bks",
["Masbatenyo"] = "msb",
["Mashco Piro"] = "cuj",
["Mashi"] = "mho",
["Masimasi"] = "ism",
["Masiwang"] = "bnf",
["Maskelynes"] = "klv",
["Maslam"] = "msv",
["Masmaje"] = "mes",
["Massachusett"] = "wam",
["Massalat"] = "mdg",
["Massep"] = "mvs",
["Matagalpa"] = "mtn",
["Matal"] = "mfh",
["Matanawi"] = "sai-mat",
["Matbat"] = "xmt",
["Matengo"] = "mgv",
["Matepi"] = "mqe",
["Matigsalug Manobo"] = "mbt",
["Matipuhy"] = "mzo",
["Matlatzinca"] = "mat",
["Mato"] = "met",
["Mator"] = "mtm",
["Matsés"] = "mcf",
["Mattole"] = "mvb",
["Matukar"] = "mjk",
["Matumbi"] = "mgw",
["Matya Samo"] = "stj",
["Matís"] = "mpq",
["Maung"] = "mph",
["Mauritian Creole"] = "mfe",
["Mauritian Sign Language"] = "lsy",
["Mauwake"] = "mhl",
["Mav̋ea"] = "mkv",
["Mawa"] = "mcw",
["Mawak"] = "mjj",
["Mawan"] = "mcz",
["Mawayana"] = "mzx",
["Mawchi"] = "mke",
["Mawes"] = "mgk",
["Maxakalí"] = "mbl",
["Maxi Gbe"] = "mxl",
["Maya Samo"] = "sym",
["Mayaguduna"] = "xmy",
["Mayangna"] = "yan",
["Mayawali"] = "yxa",
["Maybrat"] = "ayz",
["Mayeka"] = "myc",
["Mayi-Thakurti"] = "xyt",
["Maykulan"] = "mnt",
["Maynas"] = "sai-mys",
["Mayo"] = "mfy",
["Mayogo"] = "mdm",
["Mayoyao Ifugao"] = "ifu",
["Mazagway"] = "dkx",
["Mazaltepec Zapotec"] = "zpy",
["Mazanderani"] = "mzn",
["Mazatlán Mazatec"] = "vmz",
["Mazatlán Mixe"] = "mzl",
["Mba"] = "mfc",
["Mbabaram"] = "vmb",
["Mbala"] = "mdp",
["Mbalanhu"] = "lnb",
["Mbandja"] = "zmz",
["Mbangala"] = "mxg",
["Mbangi"] = "mgn",
["Mbangwe"] = "zmn",
["Mbara (Australia)"] = "mvl",
["Mbara (Chad)"] = "mpk",
["Mbariman-Gudhinma"] = "zmv",
["Mbati"] = "mdn",
["Mbato"] = "gwa",
["Mbay"] = "myb",
["Mbe"] = "mfo",
["Mbe'"] = "mtk",
["Mbelime"] = "mql",
["Mbere"] = "mdt",
["Mbesa"] = "zms",
["Mbiywom"] = "aus-mbi",
["Mbo (Cameroon)"] = "mbo",
["Mbo (Congo)"] = "zmw",
["Mboi"] = "moi",
["Mboko"] = "mdu",
["Mbole"] = "mdq",
["Mbonga"] = "xmb",
["Mbongno"] = "bgu",
["Mbosi"] = "mdw",
["Mbowe"] = "mxo",
["Mbre"] = "mka",
["Mbu'"] = "muc",
["Mbudum"] = "xmd",
["Mbugu"] = "mhd",
["Mbugwe"] = "mgz",
["Mbuko"] = "mqb",
["Mbukushu"] = "mhw",
["Mbula"] = "mna",
["Mbula-Bwazza"] = "mbu",
["Mbule"] = "mlb",
["Mbulungish"] = "mbv",
["Mbum"] = "mdd",
["Mbunda"] = "mck",
["Mbunga"] = "mgy",
["Mburku"] = "bbt",
["Mbuun"] = "zmp",
["Mbwela"] = "mfu",
["Mbya Guarani"] = "gun",
["Me'en"] = "mym",
["Mebu"] = "mjn",
["Mecayapan Nahuatl"] = "nhx",
["Medebur"] = "mjm",
["Medefaidrin"] = "dmf",
["Media Lengua"] = "mue",
["Mednyj Aleut"] = "mud",
["Medumba"] = "byv",
["Mefele"] = "mfj",
["Megam"] = "mef",
["Megleno-Romanian"] = "ruq",
["Mehek"] = "nux",
["Mehináku"] = "mmh",
["Mehri"] = "gdq",
["Mekeo"] = "mek",
["Mekmek"] = "mvk",
["Mekwei"] = "msf",
["Mekéns"] = "skf",
["Mel-Khaonh"] = "hkn",
["Mele-Fila"] = "mxe",
["Melo"] = "mfx",
["Melpa"] = "med",
["Memoni"] = "mby",
["Mendalam Kayan"] = "xkd",
["Mendankwe-Nkwen"] = "mfd",
["Mende (New Guinea)"] = "sim",
["Mende (Sierra Leone)"] = "men",
["Mengaka"] = "xmg",
["Mengen"] = "mee",
["Mengisa"] = "leo",
["Menien"] = "sai-men",
["Menka"] = "mea",
["Menominee"] = "mez",
["Mentawai"] = "mwv",
["Menya"] = "mcr",
["Meoswar"] = "mvx",
["Mer"] = "mnu",
["Meramera"] = "mxm",
["Merei"] = "lmb",
["Merey"] = "meq",
["Meriam"] = "ulk",
["Meroitic"] = "xmr",
["Meru"] = "mer",
["Mesaka"] = "iyo",
["Mese"] = "mci",
["Mesme"] = "zim",
["Mesmes"] = "mys",
["Mesqan"] = "mvz",
["Messapic"] = "cms",
["Meta'"] = "mgo",
["Metlatónoc Mixtec"] = "mxv",
["Mewari"] = "mtr",
["Mewati"] = "wtm",
["Mexican Sign Language"] = "mfs",
["Meyah"] = "mej",
["Mezontla Popoloca"] = "pbe",
["Mezquital Otomi"] = "ote",
["Meänkieli"] = "fit",
["Mfinu"] = "zmf",
["Mfumte"] = "nfu",
["Mgbo"] = "gmz",
["Mi'kmaq"] = "mic",
["Miami"] = "mia",
["Mian"] = "mpt",
["Miani"] = "pla",
["Micha"] = "yiq",
["Michif"] = "crg",
["Michigamea"] = "cmm",
["Michoacán Mazahua"] = "mmc",
["Michoacán Nahuatl"] = "ncl",
["Mid Grand Valley Dani"] = "dnt",
["Mid-Southern Banda"] = "bjo",
["Middle Armenian"] = "axm",
["Middle Assamese"] = "inc-mas",
["Middle Bengali"] = "inc-mbn",
["Middle Breton"] = "xbm",
["Middle Chinese"] = "ltc",
["Middle Cornish"] = "cnx",
["Middle Dutch"] = "dum",
["Middle English"] = "enm",
["Middle French"] = "frm",
["Middle Gujarati"] = "inc-mgu",
["Middle High German"] = "gmh",
["Middle Irish"] = "mga",
["Middle Kannada"] = "dra-mkn",
["Middle Khmer"] = "xhm",
["Middle Korean"] = "okm",
["Middle Low German"] = "gml",
["Middle Median"] = "xme-mid",
["Middle Mon"] = "mkh-mmn",
["Middle Mongol"] = "xng",
["Middle Newar"] = "nwx",
["Middle Norwegian"] = "gmq-mno",
["Middle Odia"] = "inc-mor",
["Middle Persian"] = "pal",
["Middle Scots"] = "gmw-msc",
["Middle Vietnamese"] = "mkh-mvi",
["Middle Watut"] = "mpl",
["Middle Welsh"] = "wlm",
["Midob"] = "mei",
["Migaama"] = "mmy",
["Migabac"] = "mpp",
["Miji"] = "sjl",
["Miju"] = "mxj",
["Mikasuki"] = "mik",
["Milang"] = "tbq-mil",
["Mili"] = "ymh",
["Millcayac"] = "sai-mil",
["Miltu"] = "mlj",
["Miluk"] = "iml",
["Milyan"] = "imy",
["Mimi of Decorse"] = "mis-mmd",
["Mimi of Nachtigal"] = "mis-mmn",
["Min Nan"] = "nan",
["Mina"] = "hna",
["Minaean"] = "inm",
["Minang"] = "xrg",
["Minangkabau"] = "min",
["Minaveha"] = "mvn",
["Minderico"] = "drc",
["Mindiri"] = "mpn",
["Mingang Doso"] = "mko",
["Mingo"] = "iro-min",
["Mingrelian"] = "xmf",
["Minica Huitoto"] = "hto",
["Minidien"] = "wii",
["Minjungbal"] = "xjb",
["Minkin"] = "xxm",
["Minoan"] = "omn",
["Minokok"] = "mqq",
["Minriq"] = "mnq",
["Mintil"] = "mzt",
["Mirandese"] = "mwl",
["Mire"] = "mvh",
["Mirgan"] = "zrg",
["Miriti"] = "mmv",
["Miriwoong"] = "mep",
["Miriwoong Sign Language"] = "rsm",
["Mirning"] = "gmr",
["Mirpur Panjabi"] = "pmu",
["Misantla Totonac"] = "tlc",
["Miship"] = "mjs",
["Misima-Paneati"] = "mpx",
["Mising"] = "mrg",
["Miskito"] = "miq",
["Mitla Zapotec"] = "zaw",
["Mitlatongo Mixtec"] = "vmm",
["Mittu"] = "mwu",
["Mituku"] = "zmq",
["Miu"] = "mpo",
["Miwa"] = "vmi",
["Mixed Great Andamanese"] = "gac",
["Mixifore"] = "mfg",
["Mixtepec Mixtec"] = "mix",
["Mixtepec Zapotec"] = "zpm",
["Miya"] = "mkf",
["Miyako"] = "mvi",
["Miyobe"] = "soy",
["Mizo"] = "lus",
["Mlabri"] = "mra",
["Mlahsö"] = "lhs",
["Mlap"] = "kja",
["Mlomp"] = "mlo",
["Mmaala"] = "mmu",
["Mmani"] = "buy",
["Mmen"] = "bfm",
["Mo"] = "wkd",
["Mo'da"] = "gbn",
["Moabite"] = "obm",
["Moba"] = "mfq",
["Mobilian"] = "mod",
["Mobu"] = "ahm",
["Mocana"] = "sai-mcn",
["Mochi"] = "old",
["Mochica"] = "omc",
["Mocho"] = "mhc",
["Mocoví"] = "moc",
["Modang"] = "mxd",
["Modole"] = "mqo",
["Moere"] = "mvq",
["Mofu-Gudur"] = "mif",
["Mogholi"] = "mhj",
["Mogum"] = "mou",
["Mohawk"] = "moh",
["Mohegan-Pequot"] = "xpq",
["Moi (Congo)"] = "mow",
["Moi (Indonesia)"] = "mxn",
["Moikodi"] = "mkp",
["Moingi"] = "mwz",
["Mojave"] = "mov",
["Moji"] = "ymi",
["Mok"] = "mqt",
["Mokati"] = "wnb",
["Moken"] = "mwt",
["Mokerang"] = "mft",
["Mokilese"] = "mkj",
["Moklen"] = "mkm",
["Mokole"] = "mkl",
["Mokpwe"] = "bri",
["Moksha"] = "mdf",
["Molale"] = "mbe",
["Molbog"] = "pwm",
["Moldova Sign Language"] = "vsi",
["Molengue"] = "bxc",
["Molima"] = "mox",
["Molmo One"] = "aun",
["Molo"] = "zmo",
["Molof"] = "msl",
["Moloko"] = "mlw",
["Mom Jango"] = "ver",
["Moma"] = "myl",
["Momare"] = "msz",
["Mombo Dogon"] = "dmb",
["Mombum"] = "mso",
["Momina"] = "mmb",
["Momuna"] = "mqf",
["Mon"] = "mnw",
["Monastic Sign Language"] = "mzg",
["Mondropolon"] = "npn",
["Mondé"] = "mnd",
["Mongghul"] = "mjg-mgl",
["Mongo"] = "lol",
["Mongolian"] = "mn",
["Mongolian Sign Language"] = "msr",
["Mongondow"] = "mog",
["Mongsen Ao"] = "njo-mng",
["Moni"] = "mnz",
["Monimbo"] = "mom",
["Mono (California)"] = "mnr",
["Mono (Cameroon)"] = "mru",
["Mono (Congo)"] = "mnh",
["Monom"] = "moo",
["Monsang Naga"] = "nmh",
["Montagnais"] = "moe",
["Montana Salish"] = "fla",
["Montol"] = "mtl",
["Monumbo"] = "mxk",
["Monzombo"] = "moj",
["Moo"] = "gwg",
["Moore"] = "mos",
["Moose Cree"] = "crm",
["Mopan Maya"] = "mop",
["Mor (Austronesian)"] = "mhz",
["Mor (Papuan)"] = "moq",
["Moraid"] = "msg",
["Moran"] = "tbq-mor",
["Morawa"] = "mze",
["Morelos Nahuatl"] = "nhm",
["Morerebi"] = "xmo",
["Moresada"] = "msx",
["Mori Atas"] = "mzq",
["Mori Bawah"] = "xmz",
["Morigi"] = "mdb",
["Moriori"] = "rrm",
["Moro"] = "mor",
["Moroccan Amazigh"] = "zgh",
["Moroccan Arabic"] = "ary",
["Moroccan Sign Language"] = "xms",
["Morokodo"] = "mgc",
["Morom"] = "bdo",
["Moronene"] = "mqn",
["Morori"] = "mok",
["Morouas"] = "mrp",
["Mortlockese"] = "mrl",
["Moru"] = "mgd",
["Mosimo"] = "mqv",
["Moskona"] = "mtj",
["Mota"] = "mtt",
["Motembo"] = "tmv",
["Motu"] = "meu",
["Mouk-Aria"] = "mwh",
["Mount Iraya Agta"] = "atl",
["Mount Iriga Agta"] = "agz",
["Mountain Koiari"] = "kpx",
["Mouwase"] = "jmw",
["Movima"] = "mzp",
["Moyadan Itneg"] = "ity",
["Moyon Naga"] = "nmo",
["Mozambican Sign Language"] = "mzy",
["Mozarabic"] = "mxi",
["Mpade"] = "mpi",
["Mpalitjanh"] = "xpj",
["Mpi"] = "mpz",
["Mpiemo"] = "mcx",
["Mpiin"] = "bnt-mpi",
["Mpinda"] = "pnd",
["Mpongmpong"] = "mgg",
["Mpoto"] = "mpa",
["Mpotovoro"] = "mvt",
["Mpuono"] = "bnt-mpu",
["Mpur"] = "akc",
["Mro Chin"] = "cmr",
["Mru"] = "mro",
["Mser"] = "kqx",
["Muak Sa-aak"] = "ukk",
["Mualang"] = "mtd",
["Mubami"] = "tsx",
["Mubi"] = "mub",
["Mucuchí"] = "sai-muc",
["Muda"] = "ymd",
["Mudburra"] = "dmw",
["Mudu Koraga"] = "vmd",
["Muduapa"] = "wiv",
["Muduga"] = "udg",
["Muellama"] = "sai-mue",
["Mufian"] = "aoj",
["Muher"] = "sem-mhr",
["Muinane"] = "bmr",
["Mukha-Dora"] = "mmk",
["Mukulu"] = "moz",
["Mulaha"] = "mfw",
["Mulam"] = "mlm",
["Mulao"] = "giu",
["Mullu Kurumba"] = "kpb",
["Mullukmulluk"] = "mpb",
["Muluridyi"] = "vmu",
["Mum"] = "kqa",
["Mumuye"] = "mzm",
["Muna"] = "mnb",
["Munda"] = "unx",
["Mundabli"] = "boe",
["Mundang"] = "mua",
["Mundani"] = "mnf",
["Mundari"] = "unr",
["Mundat"] = "mmf",
["Mundolinco"] = "art-mun",
["Mundurukú"] = "myu",
["Mungaka"] = "mhk",
["Mungbam"] = "mij",
["Munggui"] = "mth",
["Mungkip"] = "mpv",
["Muniche"] = "myr",
["Munit"] = "mtc",
["Munji"] = "mnj",
["Munsee"] = "umu",
["Muong"] = "mtq",
["Mur Pano"] = "tkv",
["Muratayak"] = "asx",
["Murik (Malaysia)"] = "mxr",
["Murik (New Guinea)"] = "mtf",
["Murkim"] = "rmh",
["Murle"] = "mur",
["Murrinh-Patha"] = "mwf",
["Mursi"] = "muz",
["Murui Huitoto"] = "huu",
["Murupi"] = "mqw",
["Muruwari"] = "zmu",
["Musan"] = "mmp",
["Musasa"] = "smm",
["Musey"] = "mse",
["Musgu"] = "mug",
["Musi"] = "mui",
["Muskum"] = "mje",
["Musom"] = "msu",
["Mussau-Emira"] = "emi",
["Muthuvan"] = "muv",
["Mutu"] = "tuc",
["Muya"] = "mvm",
["Muyang"] = "muy",
["Muyuw"] = "myw",
["Muzi"] = "ymz",
["Muzo"] = "sai-muz",
["Mvanip"] = "mcj",
["Mvuba"] = "mxh",
["Mwaghavul"] = "sur",
["Mwakai"] = "mgt",
["Mwali Comorian"] = "wlc",
["Mwan"] = "moa",
["Mwani"] = "wmw",
["Mwatebu"] = "mwa",
["Mwera"] = "mwe",
["Mwerlap"] = "mrm",
["Mwimbi-Muthambi"] = "mws",
["Mwotlap"] = "mlv",
["Mycenaean Greek"] = "gmy",
["Myene"] = "mye",
["Mysian"] = "yms",
["Mzieme Naga"] = "nme",
["Mághdì"] = "gmd",
["Mòcheno"] = "mhn",
["Mün Chin"] = "mwq",
["Mündü"] = "muh",
["Māori"] = "mi",
["Mạ"] = "cma",
["N'Ko"] = "nqo",
["Na"] = "nbt",
["Naaba"] = "nao",
["Naba"] = "mne",
["Nabak"] = "naf",
["Nabi"] = "mty",
["Nachering"] = "ncd",
["Nadruvian"] = "ndf",
["Nadëb"] = "mbj",
["Nafaanra"] = "nfr",
["Nafi"] = "srf",
["Nafri"] = "nxx",
["Naga Pidgin"] = "nag",
["Nagarchal"] = "nbg",
["Nage"] = "nxe",
["Nagtipunan Agta"] = "phi-nag",
["Nagu"] = "ngr",
["Nagumi"] = "ngv",
["Nahali"] = "nlx",
["Nahari"] = "nhh",
["Nahavaq"] = "sns",
["Nahuatl"] = "nah",
["Nai"] = "bio",
["Najdi Arabic"] = "ars",
["Naka'ela"] = "nae",
["Nakai"] = "nkj",
["Nakame"] = "nib",
["Nakanai"] = "nak",
["Nakara"] = "nck",
["Nake"] = "nbk",
["Naki"] = "mff",
["Nakwi"] = "nax",
["Nalca"] = "nlc",
["Nali"] = "nss",
["Nalik"] = "nal",
["Nalu"] = "naj",
["Nalögo"] = "nlz",
["Nama"] = "nmx",
["Namakura"] = "nmk",
["Namat"] = "nkm",
["Nambikwara"] = "nab",
["Nambo"] = "ncm",
["Nambya"] = "nmq",
["Namia"] = "nnm",
["Namiae"] = "nvm",
["Namibian Sign Language"] = "nbs",
["Namla"] = "naa",
["Namo"] = "mxw",
["Namonuito"] = "nmt",
["Namosi-Naitasiri-Serua"] = "bwb",
["Namuyi"] = "nmy",
["Nanai"] = "gld",
["Nancere"] = "nnc",
["Nande"] = "nnb",
["Nandi"] = "niq",
["Nanerige"] = "sen",
["Nanga Dama Dogon"] = "nzz",
["Nankina"] = "nnk",
["Nanti"] = "cox",
["Nanticoke"] = "nnt",
["Nanubae"] = "afk",
["Naolan"] = "nai-nao",
["Napu"] = "npy",
["Nar Phu"] = "npa",
["Nara"] = "nrb",
["Narak"] = "nac",
["Narango"] = "nrg",
["Narim"] = "loh",
["Naro"] = "nhr",
["Narom"] = "nrm",
["Narragansett"] = "xnt",
["Narua"] = "nru",
["Narungga"] = "nnr",
["Naruo"] = "ylo",
["Nasal"] = "nsy",
["Nasarian"] = "nvh",
["Nasioi"] = "nas",
["Naskapi"] = "nsk",
["Nasu"] = "ywq",
["Natagaimas"] = "nts",
["Natchez"] = "ncz",
["Nateni"] = "ntm",
["Natioro"] = "nti",
["Natú"] = "sai-nat",
["Natügu"] = "ntu",
["Nauete"] = "nxa",
["Naukanski"] = "ynk",
["Nauna"] = "ncn",
["Nauo"] = "nwo",
["Nauruan"] = "na",
["Navajo"] = "nv",
["Navut"] = "nsw",
["Nawaru"] = "nwr",
["Nawathinehena"] = "nwa",
["Nawdm"] = "nmz",
["Nawuri"] = "naw",
["Naxi"] = "nxq",
["Nayi"] = "noz",
["Naʼvi"] = "art-nav",
["Ncane"] = "ncr",
["Nchumbulu"] = "nlu",
["Nda'nda'"] = "nnz",
["Ndai"] = "gke",
["Ndaka"] = "ndk",
["Ndali"] = "ndh",
["Ndam"] = "ndm",
["Ndamba"] = "ndj",
["Ndambomo"] = "nxo",
["Ndasa"] = "nda",
["Ndau"] = "ndc",
["Nde-Gbite"] = "ned",
["Nde-Nsele-Nta"] = "ndd",
["Ndemli"] = "nml",
["Ndendeule"] = "dne",
["Ndengereko"] = "ndg",
["Nding"] = "eli",
["Ndjébbana"] = "djj",
["Ndo"] = "ndp",
["Ndobo"] = "ndw",
["Ndoe"] = "nbb",
["Ndogo"] = "ndz",
["Ndolo"] = "ndl",
["Ndom"] = "nqm",
["Ndombe"] = "ndq",
["Ndonga"] = "ng",
["Ndoola"] = "ndr",
["Ndrulo"] = "dno",
["Nduga"] = "ndx",
["Ndumu"] = "nmd",
["Ndunda"] = "nuh",
["Ndunga"] = "ndt",
["Ndut"] = "ndv",
["Ndyuka-Trio Pidgin"] = "njt",
["Ndzwani Comorian"] = "wni",
["Neapolitan"] = "nap",
["Nedebang"] = "nec",
["Nefamese"] = "nef",
["Nefusa"] = "jbn",
["Negerhollands"] = "dcr",
["Negeri Sembilan Malay"] = "zmi",
["Negidal"] = "neg",
["Nehan"] = "nsn",
["Nek"] = "nif",
["Nekgini"] = "nkg",
["Neko"] = "nej",
["Neku"] = "nek",
["Neme"] = "nex",
["Nemi"] = "nem",
["Nen"] = "nqn",
["Nend"] = "anh",
["Nengone"] = "nen",
["Neo"] = "neu",
["Nepalese Sign Language"] = "nsp",
["Nepali"] = "ne",
["Nete"] = "net",
["Neve'ei"] = "vnm",
["Neverver"] = "lgk",
["New Caledonian Javanese"] = "jas",
["New River Shasta"] = "nai-nrs",
["New Zealand Sign Language"] = "nzs",
["Newar"] = "new",
["Neyo"] = "ney",
["Nez Perce"] = "nez",
["Nga La"] = "hlt",
["Ngaanyatjarra"] = "ntj",
["Ngadha"] = "nxg",
["Ngadjunmaya"] = "nju",
["Ngadjuri"] = "jui",
["Ngaiawang"] = "nwg",
["Ngaing"] = "nnf",
["Ngaju"] = "nij",
["Ngala"] = "nud",
["Ngalakan"] = "nig",
["Ngalkbun"] = "ngk",
["Ngalum"] = "szb",
["Ngam"] = "nmc",
["Ngamambo"] = "nbv",
["Ngambay"] = "sba",
["Ngamini"] = "nmv",
["Ngamo"] = "nbh",
["Ngan'gityemerri"] = "nam",
["Nganakarti"] = "xnk",
["Nganasan"] = "nio",
["Ngandi"] = "nid",
["Ngando (Central African Republic)"] = "ngd",
["Ngando (Congo)"] = "nxd",
["Ngandyera"] = "nne",
["Ngangam"] = "gng",
["Ngantangarra"] = "ntg",
["Nganyaywana"] = "nyx",
["Ngardi"] = "rxd",
["Ngarigu"] = "xni",
["Ngarinman"] = "nbj",
["Ngarinyin"] = "ung",
["Ngarla"] = "nrk",
["Ngarluma"] = "nrl",
["Ngarrindjeri"] = "nay",
["Ngas"] = "anc",
["Ngasa"] = "nsg",
["Ngatik Men's Creole"] = "ngm",
["Ngawn Chin"] = "cnw",
["Ngawun"] = "nxn",
["Ngazidja Comorian"] = "zdj",
["Ngbaka"] = "nga",
["Ngbaka Ma'bo"] = "nbm",
["Ngbaka Manza"] = "ngg",
["Ngbee"] = "jgb",
["Ngbinda"] = "nbd",
["Ngbundu"] = "nuu",
["Ngelima"] = "agh",
["Ngemba"] = "nge",
["Ngen of Djonkro"] = "gnj",
["Ngendelengo"] = "nql",
["Ngeq"] = "ngt",
["Ngete"] = "nnn",
["Nggem"] = "nbq",
["Nggwahyi"] = "ngx",
["Ngie"] = "ngj",
["Ngiemboon"] = "nnh",
["Ngile"] = "jle",
["Ngindo"] = "nnq",
["Ngiti"] = "niy",
["Ngiyambaa"] = "wyb",
["Ngizim"] = "ngi",
["Ngkoth"] = "aus-ngk",
["Ngkâlmpw Kanum"] = "kcd",
["Ngochang"] = "tbq-ngo",
["Ngom"] = "nra",
["Ngomba"] = "jgo",
["Ngombale"] = "nla",
["Ngombe (Central African Republic)"] = "nmj",
["Ngombe (Congo)"] = "ngc",
["Ngong"] = "nnx",
["Ngongo"] = "noq",
["Ngoni"] = "ngo",
["Ngoreme"] = "ngq",
["Ngoshie"] = "nsh",
["Ngul"] = "nlo",
["Ngulu"] = "ngp",
["Nguluwan"] = "nuw",
["Ngumbi"] = "nui",
["Ngunawal"] = "xul",
["Ngundi"] = "ndn",
["Ngundu"] = "nue",
["Ngungwel"] = "ngz",
["Ngurmbur"] = "nrx",
["Nguôn"] = "nuo",
["Ngwaba"] = "ngw",
["Ngwe"] = "nwe",
["Ngwo"] = "ngn",
["Ngäbere"] = "gym",
["Nhanda"] = "nha",
["Nheengatu"] = "yrl",
["Nhirrpi"] = "hrp",
["Nhuwala"] = "nhf",
["Nias"] = "nia",
["Nicaraguan Creole"] = "bzk",
["Nicaraguan Sign Language"] = "ncs",
["Nicola"] = "ath-nic",
["Niellim"] = "nie",
["Nigeria Mambila"] = "mzk",
["Nigerian Pidgin"] = "pcm",
["Nigerian Sign Language"] = "nsi",
["Nihali"] = "nll",
["Nii"] = "nii",
["Niksek"] = "gbe",
["Nila"] = "nil",
["Nilamba"] = "nim",
["Nimadi"] = "noe",
["Nimanbur"] = "nmp",
["Nimbari"] = "nmr",
["Nimboran"] = "nir",
["Nimi"] = "nis",
["Nimo"] = "niw",
["Nimoa"] = "nmw",
["Ninam"] = "shb",
["Nindi"] = "nxi",
["Ningera"] = "nby",
["Ninggerum"] = "nxr",
["Ningil"] = "niz",
["Ninia Yali"] = "nlk",
["Ninzo"] = "nin",
["Nipsan"] = "nps",
["Nisa"] = "njs",
["Nisenan"] = "nsz",
["Nisga'a"] = "ncg",
["Nisi"] = "yso",
["Niuafo'ou"] = "num",
["Niuatoputapu"] = "nkp",
["Niuean"] = "niu",
["Nivaclé"] = "cag",
["Nivkh"] = "niv",
["Niwer Mil"] = "hrc",
["Niya Prakrit"] = "pra-niy",
["Njalgulgule"] = "njl",
["Njebi"] = "nzb",
["Njen"] = "njj",
["Njerep"] = "njr",
["Njyem"] = "njy",
["Nkami"] = "nkq",
["Nkangala"] = "nkn",
["Nkari"] = "nkz",
["Nkem-Nkum"] = "isi",
["Nkhumbi"] = "khu",
["Nkongho"] = "nkc",
["Nkonya"] = "nko",
["Nkoroo"] = "nkx",
["Nkoya"] = "nka",
["Nkukoli"] = "nbo",
["Nkutu"] = "nkw",
["Nnam"] = "nbp",
["Noakhali"] = "oak",
["Nobiin"] = "fia",
["Nobonob"] = "gaw",
["Nocamán"] = "nom",
["Nocte"] = "njb",
["Nogai"] = "nog",
["Noipä"] = "npx",
["Noiri"] = "noi",
["Nokuku"] = "nkk",
["Nomaande"] = "lem",
["Nomane"] = "nof",
["Nomatsiguenga"] = "not",
["Nomlaki"] = "nol",
["Nomu"] = "noh",
["Nong Zhuang"] = "zhn",
["Nonuya"] = "noj",
["Nooksack"] = "nok",
["Noon"] = "snf",
["Noone"] = "nhu",
["Nootka"] = "nuk",
["Nopala Chatino"] = "cya",
["Noric"] = "nrc",
["Norman"] = "nrf",
["Norn"] = "nrn",
["Norra"] = "nrr",
["North Ambrym"] = "mmg",
["North Asmat"] = "nks",
["North Awyu"] = "yir",
["North Babar"] = "bcd",
["North Boma"] = "boh",
["North Central Mixe"] = "neq",
["North Efate"] = "llp",
["North Fali"] = "fll",
["North Frisian"] = "frr",
["North Giziga"] = "gis",
["North Levantine Arabic"] = "apc",
["North Marquesan"] = "mrq",
["North Mesopotamian Arabic"] = "ayp",
["North Mofu"] = "mfk",
["North Moluccan Malay"] = "max",
["North Muyu"] = "kti",
["North Nuaulu"] = "nni",
["North Picene"] = "nrp",
["North Slavey"] = "scs",
["North Tairora"] = "tbg",
["North Tanna"] = "tnn",
["North Tukang Besi"] = "khc",
["North Wahgi"] = "whg",
["North Watut"] = "una",
["Northeast Kiwai"] = "kiw",
["Northeast Maidu"] = "nmu",
["Northeast Malakula"] = "upv",
["Northeast Pashayi"] = "aee",
["Northeastern Dinka"] = "dip",
["Northeastern Pomo"] = "pef",
["Northern Alta"] = "aqn",
["Northern Altai"] = "atv",
["Northern Amami Ōshima"] = "ryn",
["Northern Bontoc"] = "rbk",
["Northern Catanduanes Bikol"] = "cts",
["Northern Dagara"] = "dgi",
["Northern East Cree"] = "crl",
["Northern Emberá"] = "emp",
["Northern Ghale"] = "ghh",
["Northern Grebo"] = "gbo",
["Northern Guiyang Hmong"] = "huj",
["Northern Haida"] = "hdn",
["Northern Hindko"] = "hno",
["Northern Huishui Hmong"] = "hmi",
["Northern Kalapuya"] = "nrt",
["Northern Kam"] = "doc",
["Northern Khanty"] = "kca-nor",
["Northern Khmer"] = "kxm",
["Northern Kissi"] = "kqs",
["Northern Kurdish"] = "kmr",
["Northern Lorung"] = "lbr",
["Northern Luri"] = "lrc",
["Northern Mansi"] = "mns-nor",
["Northern Mashan Hmong"] = "hmp",
["Northern Min"] = "mnp",
["Northern Muji"] = "ymx",
["Northern Ndebele"] = "nd",
["Northern Ngbandi"] = "ngb",
["Northern Nisu"] = "yiv",
["Northern Nuni"] = "nuv",
["Northern Oaxaca Nahuatl"] = "nhy",
["Northern Ohlone"] = "cst",
["Northern One"] = "onr",
["Northern Paiute"] = "pao",
["Northern Pame"] = "pmq",
["Northern Pinghua"] = "cnp",
["Northern Pomo"] = "pej",
["Northern Puebla Nahuatl"] = "ncj",
["Northern Pumi"] = "pmi",
["Northern Pwo"] = "pww",
["Northern Qiandong Miao"] = "hea",
["Northern Qiang"] = "cng",
["Northern Rengma Naga"] = "nnl",
["Northern Roglai"] = "rog",
["Northern Saharan Berber"] = "mzb",
["Northern Sami"] = "se",
["Northern Selkup"] = "sel-nor",
["Northern Sierra Miwok"] = "nsq",
["Northern Sotho"] = "nso",
["Northern Subanen"] = "stb",
["Northern Tarahumara"] = "thh",
["Northern Tepehuan"] = "ntp",
["Northern Thai"] = "nod",
["Northern Tidung"] = "ntd",
["Northern Tlaxiaco Mixtec"] = "xtn",
["Northern Toussian"] = "tsp",
["Northern Tujia"] = "tji",
["Northern Tutchone"] = "ttm",
["Northern Valley Yokuts"] = "yok-nvy",
["Northern Yukaghir"] = "ykg",
["Northwest Gbaya"] = "gya",
["Northwest Maidu"] = "mjd",
["Northwest Oaxaca Mixtec"] = "mxa",
["Northwest Pashayi"] = "glh",
["Northwestern Dinka"] = "diw",
["Northwestern Fars"] = "faz",
["Northwestern Ojibwa"] = "ojb",
["Norwegian"] = "no",
["Norwegian Bokmål"] = "nb",
["Norwegian Nynorsk"] = "nn",
["Norwegian Sign Language"] = "nsl",
["Notre"] = "bly",
["Notsi"] = "ncf",
["Nottoway"] = "ntw",
["Nottoway-Meherrin"] = "nwy",
["Novial"] = "nov",
["Noy"] = "noy",
["Nsari"] = "asj",
["Nsenga"] = "nse",
["Nshi"] = "nsc",
["Nsong"] = "soo",
["Nsongo"] = "nsx",
["Ntcham"] = "bud",
["Ntomba"] = "nto",
["Ntra'ngith"] = "dgt",
["Nubaca"] = "baf",
["Nubi"] = "kcn",
["Nuer"] = "nus",
["Nuguria"] = "nur",
["Nuk"] = "noc",
["Nukak Makú"] = "mbr",
["Nukna"] = "klt",
["Nukuini"] = "nuc",
["Nukumanu"] = "nuq",
["Nukunu"] = "nnv",
["Nukunul"] = "xnu",
["Nukuoro"] = "nkr",
["Numana"] = "nbr",
["Numanggang"] = "nop",
["Numbami"] = "sij",
["Nume"] = "tgs",
["Numidian"] = "nxm",
["Numèè"] = "kdk",
["Nungali"] = "nug",
["Nunggubuyu"] = "nuy",
["Nungon"] = "paa-nun",
["Nungu"] = "rin",
["Nuosu"] = "ii",
["Nupbikha"] = "npb",
["Nupe"] = "nup",
["Nusa Laut"] = "nul",
["Nusu"] = "nuf",
["Nutabe"] = "cba-nut",
["Nyabwa"] = "nwb",
["Nyagrong Minyag"] = "ero-nya",
["Nyah Kur"] = "cbn",
["Nyaheun"] = "nev",
["Nyakyusa"] = "nyy",
["Nyali"] = "nlj",
["Nyam"] = "nmi",
["Nyamal"] = "nly",
["Nyambo"] = "now",
["Nyamusa-Molo"] = "nwm",
["Nyamwanga"] = "mwn",
["Nyamwezi"] = "nym",
["Nyaneka"] = "nyk",
["Nyang'i"] = "nyp",
["Nyanga (Congo)"] = "nyj",
["Nyanga (Togo)"] = "ayg",
["Nyanga-li"] = "nyc",
["Nyangatom"] = "nnj",
["Nyangbo"] = "nyb",
["Nyangga"] = "nny",
["Nyangumarta"] = "nna",
["Nyankole"] = "nyn",
["Nyarafolo"] = "sev",
["Nyaturu"] = "rim",
["Nyaw"] = "nyw",
["Nyawaygi"] = "nyt",
["Nyelâyu"] = "yly",
["Nyemba"] = "nba",
["Nyengo"] = "nye",
["Nyenkha"] = "neh",
["Nyeu"] = "nyl",
["Nyigina"] = "nyh",
["Nyiha"] = "nih",
["Nyika"] = "nkt",
["Nyimang"] = "nyi",
["Nyindrou"] = "lid",
["Nyindu"] = "nyg",
["Nyishi"] = "njz",
["Nyiyaparli"] = "xny",
["Nyokon"] = "nvo",
["Nyole (Kenya)"] = "nyd",
["Nyole (Uganda)"] = "nuj",
["Nyong"] = "muo",
["Nyoro"] = "nyo",
["Nyulnyul"] = "nyv",
["Nyunga"] = "nys",
["Nyungwe"] = "nyu",
["Nzadi"] = "nzd",
["Nzakambay"] = "nzy",
["Nzakara"] = "nzk",
["Nzanyi"] = "nja",
["Nzima"] = "nzi",
["Ná-Meo"] = "neo",
["Nùng"] = "nut",
["Nüpode Huitoto"] = "hux",
["Nǀuu"] = "ngh",
["O'chi'chi'"] = "xoc",
["O'du"] = "tyh",
["O'odham"] = "ood",
["Obanliku"] = "bzy",
["Obispeño"] = "obi",
["Oblo"] = "obl",
["Obo Manobo"] = "obo",
["Obokuitai"] = "afz",
["Obolo"] = "ann",
["Obulom"] = "obu",
["Ocaina"] = "oca",
["Occitan"] = "oc",
["Ocotepec Mixtec"] = "mie",
["Ocotlán Zapotec"] = "zac",
["Od"] = "odk",
["Odia"] = "or",
["Odiai"] = "bhf",
["Odoodee"] = "kkc",
["Odual"] = "odu",
["Odut"] = "oda",
["Ofayé"] = "opy",
["Ofo"] = "ofo",
["Ogbah"] = "ogc",
["Ogbia"] = "ogb",
["Ogbogolo"] = "ogg",
["Ogbronuagum"] = "ogu",
["Ogea"] = "eri",
["Oirata"] = "oia",
["Ojibwe"] = "oj",
["Ojitlán Chinantec"] = "chj",
["Okanagan"] = "oka",
["Okiek"] = "oki",
["Okinawan"] = "ryu",
["Okinoerabu"] = "okn",
["Oko-Eni-Osayen"] = "oks",
["Oko-Juwoi"] = "okj",
["Okobo"] = "okb",
["Okodia"] = "okd",
["Okolod"] = "kqv",
["Okpamheri"] = "opa",
["Okpe (Northwestern Edo)"] = "okx",
["Okpe (Southwestern Edo)"] = "oke",
["Okpela"] = "atg",
["Oksapmin"] = "opm",
["Oku"] = "oku",
["Okwanuchu"] = "nai-okw",
["Old Anatolian Turkish"] = "trk-oat",
["Old Armenian"] = "xcl",
["Old Avar"] = "oav",
["Old Awadhi"] = "inc-oaw",
["Old Bengali"] = "inc-obn",
["Old Breton"] = "obt",
["Old Burmese"] = "obr",
["Old Catalan"] = "roa-oca",
["Old Cham"] = "ocm",
["Old Chinese"] = "och",
["Old Church Slavonic"] = "cu",
["Old Cornish"] = "oco",
["Old Czech"] = "zlw-ocs",
["Old Danish"] = "gmq-oda",
["Old Dutch"] = "odt",
["Old East Slavic"] = "orv",
["Old English"] = "ang",
["Old French"] = "fro",
["Old Frisian"] = "ofs",
["Old Galician-Portuguese"] = "roa-opt",
["Old Georgian"] = "oge",
["Old Gujarati"] = "inc-ogu",
["Old Gutnish"] = "gmq-ogt",
["Old High German"] = "goh",
["Old Hindi"] = "inc-ohi",
["Old Hungarian"] = "ohu",
["Old Irish"] = "sga",
["Old Japanese"] = "ojp",
["Old Javanese"] = "kaw",
["Old Kannada"] = "dra-okn",
["Old Kentish Sign Language"] = "okl",
["Old Khmer"] = "okz",
["Old Komi"] = "urj-koo",
["Old Korean"] = "oko",
["Old Leonese"] = "roa-ole",
["Old Lithuanian"] = "olt",
["Old Manipuri"] = "omp",
["Old Marathi"] = "omr",
["Old Median"] = "xme-old",
["Old Mon"] = "omx",
["Old Navarro-Aragonese"] = "roa-ona",
["Old Norse"] = "non",
["Old Novgorodian"] = "zle-ono",
["Old Nubian"] = "onw",
["Old Occitan"] = "pro",
["Old Odia"] = "inc-oor",
["Old Persian"] = "peo",
["Old Polish"] = "zlw-opl",
["Old Prussian"] = "prg",
["Old Punjabi"] = "inc-opa",
["Old Ruthenian"] = "zle-ort",
["Old Saxon"] = "osx",
["Old Slovak"] = "zlw-osk",
["Old South Arabian"] = "sem-srb",
["Old Spanish"] = "osp",
["Old Sundanese"] = "osn",
["Old Swedish"] = "gmq-osw",
["Old Tamil"] = "oty",
["Old Tati"] = "xme-ott",
["Old Telugu"] = "dra-ote",
["Old Tibetan"] = "otb",
["Old Tupi"] = "tpw",
["Old Turkic"] = "otk",
["Old Uyghur"] = "oui",
["Old Welsh"] = "owl",
["Olekha"] = "ole",
["Ollari"] = "gdb",
["Olo"] = "ong",
["Oloma"] = "olm",
["Olrat"] = "olr",
["Olu'bo"] = "lul",
["Olukumi"] = "ulb",
["Olulumo-Ikom"] = "iko",
["Oluta Popoluca"] = "plo",
["Olutsotso"] = "lto",
["Omagua"] = "omg",
["Omaha-Ponca"] = "oma",
["Omani Arabic"] = "acx",
["Omba"] = "omb",
["Ombamba"] = "mbm",
["Ombo"] = "oml",
["Ometepec Nahuatl"] = "nht",
["Omi"] = "omi",
["Omok"] = "omk",
["Omotik"] = "omt",
["Omurano"] = "omu",
["Oneida"] = "one",
["Ong"] = "oog",
["Ongota"] = "bxe",
["Onin"] = "oni",
["Onjob"] = "onj",
["Ono"] = "ons",
["Onobasulu"] = "onn",
["Onondaga"] = "ono",
["Ontong Java"] = "ojv",
["Oorlams"] = "oor",
["Opao"] = "opo",
["Opata"] = "opt",
["Opuuo"] = "lgn",
["Opón"] = "sai-opo",
["Oraon Sadri"] = "sdr",
["Orejón"] = "ore",
["Oring"] = "org",
["Orizaba Nahuatl"] = "nlv",
["Orléanais"] = "roa-orl",
["Ormu"] = "orz",
["Ormuri"] = "oru",
["Oro"] = "orx",
["Oro Win"] = "orw",
["Oroch"] = "oac",
["Oroha"] = "ora",
["Orok"] = "oaa",
["Orokaiva"] = "okv",
["Oroko"] = "bdu",
["Orokolo"] = "oro",
["Oromo"] = "om",
["Oroqen"] = "orh",
["Orowe"] = "bpk",
["Oruma"] = "orr",
["Orya"] = "ury",
["Osage"] = "osa",
["Osamayi"] = "syx",
["Osatu"] = "ost",
["Oscan"] = "osc",
["Osing"] = "osi",
["Ososo"] = "oso",
["Ossetian"] = "os",
["Ot Danum"] = "otd",
["Otank"] = "uta",
["Oti"] = "oti",
["Otomaco"] = "sai-oto",
["Otoro"] = "otr",
["Ottawa"] = "otw",
["Ottoman Turkish"] = "ota",
["Otuke"] = "otu",
["Ouma"] = "oum",
["Oune"] = "oue",
["Owa"] = "stn",
["Owenia"] = "wsr",
["Owiniga"] = "owi",
["Oy"] = "oyb",
["Oya'oya"] = "oyy",
["Oyda"] = "oyd",
["Ozolotepec Zapotec"] = "zao",
["Ozumacín Chinantec"] = "chz",
["Pa"] = "ppt",
["Pa Di"] = "pdi",
["Pa'a"] = "pqa",
["Pa'o Karen"] = "blk",
["Pa-Hng"] = "pha",
["Paamese"] = "pma",
["Paasaal"] = "sig",
["Pacahuara"] = "pcp",
["Pacoh"] = "pac",
["Padoe"] = "pdo",
["Paelignian"] = "pgn",
["Paeonian"] = "ine-pae",
["Pagi"] = "pgi",
["Pagibete"] = "pae",
["Pagu"] = "pgu",
["Pahanan Agta"] = "apf",
["Pahari-Potwari"] = "phr",
["Pahi"] = "lgt",
["Pahlavani"] = "phv",
["Pai Tavytera"] = "pta",
["Paicî"] = "pri",
["Paikoneka"] = "awd-pai",
["Paipai"] = "ppi",
["Paite"] = "pck",
["Paiwan"] = "pwn",
["Pajapan Nahuatl"] = "nhp",
["Pajonal Ashéninka"] = "cjo",
["Pak-Tong"] = "pkg",
["Pakanha"] = "pkn",
["Pakistan Sign Language"] = "pks",
["Paku"] = "pku",
["Paku Karen"] = "jkp",
["Pal"] = "abw",
["Palaic"] = "plq",
["Palaka"] = "plr",
["Palantla Chinantec"] = "cpa",
["Palauan"] = "pau",
["Palawan Batak"] = "bya",
["Paleni"] = "pnl",
["Palenquero"] = "pln",
["Palewyami Yokuts"] = "yok-ply",
["Pali"] = "pi",
["Palikur"] = "plu",
["Paliyan"] = "pcf",
["Pallanganmiddang"] = "pmd",
["Palor"] = "fap",
["Palta"] = "sai-pal",
["Palu'e"] = "ple",
["Paluan"] = "plz",
["Palula"] = "phl",
["Palya Bareli"] = "bpx",
["Pam"] = "pmn",
["Pambia"] = "pmb",
["Pamigua"] = "sai-pam",
["Pamlico"] = "pmk",
["Pamona"] = "pmf",
["Pamosu"] = "hih",
["Pamplona Atta"] = "att",
["Pana (Central Africa)"] = "pnz",
["Pana (West Africa)"] = "pnq",
["Panamanian Sign Language"] = "lsp",
["Panamint"] = "par",
["Panare"] = "pbh",
["Panará"] = "kre",
["Panasuan"] = "psn",
["Panawa"] = "pwb",
["Pancana"] = "pnp",
["Panchpargania"] = "tdb",
["Pande"] = "bkj",
["Pangasinan"] = "pag",
["Pangseng"] = "pgs",
["Pangutaran Sama"] = "slm",
["Pangwa"] = "pbr",
["Pangwali"] = "pgg",
["Panim"] = "pnr",
["Paniya"] = "pcg",
["Pankararé"] = "pax",
["Pankararú"] = "paz",
["Pankhu"] = "pkh",
["Pannei"] = "pnc",
["Pannonian Rusyn"] = "rsk",
["Panobo"] = "pno",
["Panyi Bai"] = "bfc",
["Panyjima"] = "pnw",
["Panzaleo"] = "sai-pnz",
["Pao"] = "ppa",
["Papantla Totonac"] = "top",
["Papapana"] = "ppn",
["Papar"] = "dpp",
["Papasena"] = "pas",
["Papel"] = "pbo",
["Papi"] = "ppe",
["Papiamentu"] = "pap",
["Papora"] = "ppu",
["Papua New Guinean Sign Language"] = "pgz",
["Papuan Malay"] = "pmy",
["Papuma"] = "ppm",
["Para Naga"] = "pzn",
["Parachi"] = "prc",
["Paraguayan Guarani"] = "gug",
["Paraguayan Sign Language"] = "pys",
["Parakanã"] = "pak",
["Paranan"] = "prf",
["Paranawát"] = "paf",
["Paratió"] = "sai-par",
["Paraujano"] = "pbg",
["Parauk"] = "prk",
["Parawen"] = "prw",
["Pardhan"] = "pch",
["Pardhi"] = "pcl",
["Pare"] = "asa",
["Pareci"] = "pab",
["Paredarerme"] = "xpd",
["Parenga"] = "pcj",
["Parkari Koli"] = "kvx",
["Parthian"] = "xpr",
["Parya"] = "paq",
["Pará Gavião"] = "gvp",
["Pashto"] = "ps",
["Pasi"] = "psq",
["Pass Valley Yali"] = "yac",
["Pasé"] = "awd-pas",
["Patagón"] = "sai-ptg",
["Patamona"] = "pbc",
["Patani"] = "ptn",
["Pataxó Hã-Ha-Hãe"] = "pth",
["Patep"] = "ptp",
["Pathiya"] = "pty",
["Patpatar"] = "gfk",
["Pattani"] = "lae",
["Pattani Malay"] = "mfa",
["Pattapu"] = "ptq",
["Patwin"] = "pwi",
["Paulohi"] = "plh",
["Paumarí"] = "pad",
["Paunaka"] = "pnk",
["Pauri Bareli"] = "bfb",
["Pauserna"] = "psm",
["Pawaia"] = "pwa",
["Pawnee"] = "paw",
["Payaguá"] = "sai-pyg",
["Pazeh"] = "pzh",
["Pe"] = "pai",
["Pear"] = "pcb",
["Peba"] = "sai-peb",
["Pech"] = "pay",
["Pecheneg"] = "xpc",
["Peerapper"] = "xpw",
["Peere"] = "pfe",
["Pei"] = "ppq",
["Pekal"] = "pel",
["Pela"] = "bxd",
["Pele-Ata"] = "ata",
["Pemon"] = "aoc",
["Penang Sign Language"] = "psg",
["Penchal"] = "pek",
["Pendau"] = "ums",
["Pengo"] = "peg",
["Pennsylvania German"] = "pdc",
["Penobscot"] = "aaq",
["Penrhyn"] = "pnh",
["Pentlatch"] = "ptw",
["Perai"] = "wet",
["Peranakan Indonesian"] = "pea",
["Perema"] = "wom",
["Perené Ashéninka"] = "prq",
["Pericú"] = "nai-per",
["Pero"] = "pip",
["Persian"] = "fa",
["Persian Sign Language"] = "psc",
["Peruvian Sign Language"] = "prl",
["Petapa Zapotec"] = "zpe",
["Petats"] = "pex",
["Petjo"] = "pey",
["Peñoles Mixtec"] = "mil",
["Phai"] = "prt",
["Phake"] = "phk",
["Phala"] = "ypa",
["Phana'"] = "phq",
["Phangduwali"] = "phw",
["Phende"] = "pem",
["Philippine Sign Language"] = "psp",
["Philistine"] = "mis-phi",
["Phimbi"] = "phm",
["Phoenician"] = "phn",
["Phola"] = "ypg",
["Pholo"] = "yip",
["Phom"] = "nph",
["Phong-Kniang"] = "pnx",
["Phrae Pwo"] = "kjt",
["Phrygian"] = "xpg",
["Phu Thai"] = "pht",
["Phuan"] = "phu",
["Phudagi"] = "phd",
["Phuie"] = "pug",
["Phukha"] = "phh",
["Phuma"] = "ypm",
["Phunoi"] = "pho",
["Phuong"] = "phg",
["Phupa"] = "ypp",
["Phupha"] = "yph",
["Phuthi"] = "bnt-phu",
["Phuza"] = "ypz",
["Piamatsina"] = "ptr",
["Piame"] = "pin",
["Piapoco"] = "pio",
["Piaroa"] = "pid",
["Picard"] = "pcd",
["Pichinglis"] = "fpe",
["Pichis Ashéninka"] = "cpu",
["Pictish"] = "xpi",
["Picuris"] = "nai-pic",
["Pidgin Delaware"] = "dep",
["Pidgin Iha"] = "ihb",
["Pidgin Onin"] = "onx",
["Piedmontese"] = "pms",
["Pijao"] = "pij",
["Pije"] = "piz",
["Pijin"] = "pis",
["Pilagá"] = "plg",
["Pileni"] = "piv",
["Pima Bajo"] = "pia",
["Pimbwe"] = "piw",
["Pinai-Hagahai"] = "pnn",
["Pingelapese"] = "pif",
["Pini"] = "pii",
["Pinigura"] = "pnv",
["Pinjarup"] = "pnj",
["Pinji"] = "pic",
["Pinotepa Nacional Mixtec"] = "mio",
["Pintiini"] = "pti",
["Pintupi-Luritja"] = "piu",
["Pinyin"] = "pny",
["Pipil"] = "ppl",
["Pirahã"] = "myp",
["Piratapuyo"] = "pir",
["Pirlatapa"] = "bxi",
["Piro"] = "pie",
["Pirriya"] = "xpa",
["Pisabo"] = "pig",
["Pisaflores Tepehua"] = "tpp",
["Piscataway"] = "psy",
["Pisidian"] = "xps",
["Pitcairn-Norfolk"] = "pih",
["Pite Sami"] = "sje",
["Piti"] = "pcn",
["Pitjantjatjara"] = "pjt",
["Pitta-Pitta"] = "pit",
["Piu"] = "pix",
["Piya-Kwonci"] = "piy",
["Plains Apache"] = "apk",
["Plains Cree"] = "crk",
["Plains Indian Sign Language"] = "psd",
["Plains Miwok"] = "pmw",
["Plapo Krumen"] = "ktj",
["Plautdietsch"] = "pdt",
["Playero"] = "gob",
["Pnar"] = "pbv",
["Pochuri Naga"] = "npo",
["Pochutec"] = "xpo",
["Podoko"] = "pbi",
["Pogali"] = "hkh",
["Pogolo"] = "poy",
["Pohnpeian"] = "pon",
["Poitevin-Saintongeais"] = "roa-poi",
["Pokangá"] = "pok",
["Poke"] = "pof",
["Pol"] = "pmm",
["Polabian"] = "pox",
["Polci"] = "plj",
["Polish"] = "pl",
["Polish Sign Language"] = "pso",
["Polonombauk"] = "plb",
["Pom"] = "pmo",
["Ponam"] = "ncc",
["Pondi"] = "lnm",
["Pongu"] = "png",
["Ponosakan"] = "pns",
["Pontic Greek"] = "pnt",
["Ponyo"] = "npg",
["Poqomam"] = "poc",
["Poqomchi'"] = "poh",
["Porohanon"] = "prh",
["Port Sandwich"] = "psw",
["Port Sorell"] = "xpl",
["Port Vato"] = "ptv",
["Portuguese"] = "pt",
["Portuguese Sign Language"] = "psr",
["Potawatomi"] = "pot",
["Potiguára"] = "pog",
["Poumei Naga"] = "pmx",
["Pouye"] = "bye",
["Powari"] = "pwr",
["Powhatan"] = "pim",
["Poyanáwa"] = "pyn",
["Prakrit"] = "pra",
["Prasuni"] = "prn",
["Pre-Samnite"] = "itc-psa",
["Primitive Irish"] = "pgl",
["Principense"] = "pre",
["Proto-Abkhaz-Abaza"] = "cau-abz-pro",
["Proto-Afroasiatic"] = "afa-pro",
["Proto-Albanian"] = "sqj-pro",
["Proto-Algic"] = "aql-pro",
["Proto-Algonquian"] = "alg-pro",
["Proto-Amuesha-Chamicuro"] = "awd-amc-pro",
["Proto-Anatolian"] = "ine-ana-pro",
["Proto-Andian"] = "cau-and-pro",
["Proto-Apachean"] = "apa-pro",
["Proto-Arawa"] = "auf-pro",
["Proto-Arawak"] = "awd-pro",
["Proto-Armenian"] = "hyx-pro",
["Proto-Arnhem"] = "aus-arn-pro",
["Proto-Aroid"] = "omv-aro-pro",
["Proto-Aslian"] = "mkh-asl-pro",
["Proto-Atayalic"] = "map-ata-pro",
["Proto-Athabaskan"] = "ath-pro",
["Proto-Atlantic-Congo"] = "alv-pro",
["Proto-Austroasiatic"] = "aav-pro",
["Proto-Austronesian"] = "map-pro",
["Proto-Avaro-Andian"] = "cau-ava-pro",
["Proto-Bahnaric"] = "mkh-ban-pro",
["Proto-Bai"] = "sit-bai-pro",
["Proto-Balto-Slavic"] = "ine-bsl-pro",
["Proto-Bantoid"] = "nic-bod-pro",
["Proto-Bantu"] = "bnt-pro",
["Proto-Basque"] = "euq-pro",
["Proto-Batak"] = "btk-pro",
["Proto-Be"] = "qfa-onb-pro",
["Proto-Be-Tai"] = "qfa-bet-pro",
["Proto-Benue-Congo"] = "nic-bco-pro",
["Proto-Berber"] = "ber-pro",
["Proto-Binanderean"] = "ngf-bin-pro",
["Proto-Bodish"] = "sit-bdi-pro",
["Proto-Bodo-Garo"] = "tbq-bdg-pro",
["Proto-Bongo-Bagirmi"] = "csu-bba-pro",
["Proto-Boran"] = "sai-bor-pro",
["Proto-Brythonic"] = "cel-bry-pro",
["Proto-Bua"] = "alv-bua-pro",
["Proto-Bungku-Tolaki"] = "poz-btk-pro",
["Proto-Burmish"] = "tbq-brm-pro",
["Proto-Caddoan"] = "cdd-pro",
["Proto-Cangin"] = "alv-cng-pro",
["Proto-Cariban"] = "sai-car-pro",
["Proto-Celtic"] = "cel-pro",
["Proto-Central Chadic"] = "cdc-cbm-pro",
["Proto-Central Dravidian"] = "dra-cen-pro",
["Proto-Central Jê"] = "sai-cje-pro",
["Proto-Central Naga"] = "sit-aao-pro",
["Proto-Central New South Wales"] = "aus-cww-pro",
["Proto-Central Sudanic"] = "csu-pro",
["Proto-Central Togo"] = "alv-gtm-pro",
["Proto-Central-Eastern Malayo-Polynesian"] = "poz-cet-pro",
["Proto-Cerrado"] = "sai-cer-pro",
["Proto-Chadic"] = "cdc-pro",
["Proto-Chamic"] = "cmc-pro",
["Proto-Chatino"] = "omq-cha-pro",
["Proto-Chibchan"] = "cba-pro",
["Proto-Chimakuan"] = "chi-pro",
["Proto-Chinookan"] = "nai-ckn-pro",
["Proto-Chukotko-Kamchatkan"] = "qfa-cka-pro",
["Proto-Chumash"] = "nai-chu-pro",
["Proto-Circassian"] = "cau-cir-pro",
["Proto-Cupan"] = "azc-cup-pro",
["Proto-Cushitic"] = "cus-pro",
["Proto-Daju"] = "sdv-daj-pro",
["Proto-Daly"] = "aus-dal-pro",
["Proto-Dangari"] = "inc-dng-pro",
["Proto-Dargwa"] = "cau-drg-pro",
["Proto-Dizoid"] = "omv-diz-pro",
["Proto-Dravidian"] = "dra-pro",
["Proto-Eastern Jebel"] = "sdv-eje-pro",
["Proto-Eastern Malayo-Polynesian"] = "pqe-pro",
["Proto-Eastern Oti-Volta"] = "nic-eov-pro",
["Proto-Eastern Polynesian"] = "poz-pep-pro",
["Proto-Edekiri"] = "alv-edk-pro",
["Proto-Edoid"] = "alv-edo-pro",
["Proto-Ersuic"] = "sit-ers-pro",
["Proto-Eskimo"] = "esx-esk-pro",
["Proto-Eskimo-Aleut"] = "esx-pro",
["Proto-Fali"] = "alv-fli-pro",
["Proto-Finnic"] = "urj-fin-pro",
["Proto-Gbaya"] = "gba-pro",
["Proto-Gbe"] = "alv-gbe-pro",
["Proto-Georgian-Zan"] = "ccs-gzn-pro",
["Proto-Germanic"] = "gem-pro",
["Proto-Graeco-Phrygian"] = "ine-grp-pro",
["Proto-Grassfields"] = "nic-grf-pro",
["Proto-Great Andamanese"] = "qfa-adm-pro",
["Proto-Guang"] = "alv-gng-pro",
["Proto-Gur"] = "nic-gur-pro",
["Proto-Gurunsi"] = "nic-gns-pro",
["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro",
["Proto-Heiban"] = "alv-hei-pro",
["Proto-Hellenic"] = "grk-pro",
["Proto-Highland East Cushitic"] = "cus-hec-pro",
["Proto-Hlai"] = "qfa-lic-pro",
["Proto-Hmong-Mien"] = "hmx-pro",
["Proto-Hmongic"] = "hmn-pro",
["Proto-Hrusish"] = "sit-hrs-pro",
["Proto-Hurro-Urartian"] = "qfa-hur-pro",
["Proto-Idomoid"] = "alv-ido-pro",
["Proto-Igboid"] = "alv-igb-pro",
["Proto-Ijoid"] = "ijo-pro",
["Proto-Indo-Aryan"] = "inc-pro",
["Proto-Indo-European"] = "ine-pro",
["Proto-Indo-Iranian"] = "iir-pro",
["Proto-Inuit"] = "esx-inu-pro",
["Proto-Iranian"] = "ira-pro",
["Proto-Iroquoian"] = "iro-pro",
["Proto-Italic"] = "itc-pro",
["Proto-Iwaidjan"] = "aus-wdj-pro",
["Proto-Japonic"] = "jpx-pro",
["Proto-Jukunoid"] = "nic-jkn-pro",
["Proto-Jê"] = "sai-jee-pro",
["Proto-Kadu"] = "qfa-kad-pro",
["Proto-Kalamian"] = "phi-kal-pro",
["Proto-Kalapuyan"] = "nai-klp-pro",
["Proto-Kam-Sui"] = "qfa-kms-pro",
["Proto-Kampa"] = "awd-kmp-pro",
["Proto-Kamta"] = "inc-krd-pro",
["Proto-Karen"] = "kar-pro",
["Proto-Kartvelian"] = "ccs-pro",
["Proto-Katuic"] = "mkh-kat-pro",
["Proto-Kham"] = "sit-kha-pro",
["Proto-Khanty"] = "kca-pro",
["Proto-Khasian"] = "aav-khs-pro",
["Proto-Khmeric"] = "mkh-kmr-pro",
["Proto-Khmuic"] = "mkh-khm-pro",
["Proto-Kho-Bwa"] = "sit-khb-pro",
["Proto-Khoe"] = "khi-kho-pro",
["Proto-Koman"] = "ssa-kom-pro",
["Proto-Komisenian"] = "ira-kms-pro",
["Proto-Koreanic"] = "qfa-kor-pro",
["Proto-Kra"] = "qfa-kra-pro",
["Proto-Kra-Dai"] = "qfa-tak-pro",
["Proto-Kru"] = "kro-pro",
["Proto-Kuki-Chin"] = "tbq-kuk-pro",
["Proto-Kuliak"] = "ssa-klk-pro",
["Proto-Kurdish"] = "ku-pro",
["Proto-Kwa"] = "alv-kwa-pro",
["Proto-Lalo"] = "tbq-lal-pro",
["Proto-Lampungic"] = "poz-lgx-pro",
["Proto-Lezghian"] = "cau-lzg-pro",
["Proto-Lolo-Burmese"] = "tbq-lob-pro",
["Proto-Loloish"] = "tbq-lol-pro",
["Proto-Lower Cross River"] = "nic-lcr-pro",
["Proto-Luish"] = "sit-luu-pro",
["Proto-Maidun"] = "nai-mdu-pro",
["Proto-Malayic"] = "poz-mly-pro",
["Proto-Malayo-Chamic"] = "poz-mcm-pro",
["Proto-Malayo-Polynesian"] = "poz-pro",
["Proto-Malayo-Sumbawan"] = "poz-msa-pro",
["Proto-Mande"] = "dmn-pro",
["Proto-Mangbetu"] = "csu-maa-pro",
["Proto-Mansi"] = "mns-pro",
["Proto-Mari"] = "chm-pro",
["Proto-Masa"] = "cdc-mas-pro",
["Proto-Mayan"] = "myn-pro",
["Proto-Mazatec"] = "omq-maz-pro",
["Proto-Medo-Parthian"] = "ira-mpr-pro",
["Proto-Micronesian"] = "poz-mic-pro",
["Proto-Mienic"] = "hmx-mie-pro",
["Proto-Min"] = "zhx-min-pro",
["Proto-Mixe-Zoque"] = "nai-miz-pro",
["Proto-Mixtec"] = "omq-mxt-pro",
["Proto-Mixtecan"] = "omq-mix-pro",
["Proto-Mon-Khmer"] = "mkh-pro",
["Proto-Mongolic"] = "xgn-pro",
["Proto-Monic"] = "mkh-mnc-pro",
["Proto-Mordvinic"] = "urj-mdv-pro",
["Proto-Mumuye"] = "alv-mum-pro",
["Proto-Munda"] = "mun-pro",
["Proto-Munji-Yidgha"] = "ira-mny-pro",
["Proto-Muskogean"] = "nai-mus-pro",
["Proto-Na-Dene"] = "xnd-pro",
["Proto-Nahuan"] = "azc-nah-pro",
["Proto-Naish"] = "sit-nas-pro",
["Proto-Nakh"] = "cau-nkh-pro",
["Proto-Nawiki"] = "awd-nwk-pro",
["Proto-Nguni"] = "bnt-ngu-pro",
["Proto-Nicobarese"] = "aav-nic-pro",
["Proto-Niger-Congo"] = "nic-pro",
["Proto-Nilo-Saharan"] = "ssa-pro",
["Proto-Nilotic"] = "sdv-nil-pro",
["Proto-Norse"] = "gmq-pro",
["Proto-North Dravidian"] = "dra-nor-pro",
["Proto-North Halmahera"] = "paa-nha-pro",
["Proto-North Iroquoian"] = "iro-nor-pro",
["Proto-North Sarawak"] = "poz-swa-pro",
["Proto-Northeast Caucasian"] = "cau-nec-pro",
["Proto-Northern Jê"] = "sai-nje-pro",
["Proto-Northern Naga"] = "sit-kon-pro",
["Proto-Northwest Caucasian"] = "cau-nwc-pro",
["Proto-Nubian"] = "nub-pro",
["Proto-Nuclear Polynesian"] = "poz-pnp-pro",
["Proto-Numic"] = "azc-num-pro",
["Proto-Nupoid"] = "alv-nup-pro",
["Proto-Nuristani"] = "iir-nur-pro",
["Proto-Nyima"] = "sdv-nyi-pro",
["Proto-Nyulnyulan"] = "aus-nyu-pro",
["Proto-Oceanic"] = "poz-oce-pro",
["Proto-Ogoni"] = "nic-ogo-pro",
["Proto-Omotic"] = "omv-pro",
["Proto-Ongan"] = "qfa-ong-pro",
["Proto-Oti-Volta"] = "nic-ovo-pro",
["Proto-Oto-Manguean"] = "omq-pro",
["Proto-Oto-Pamean"] = "omq-otp-pro",
["Proto-Otomi"] = "oto-otm-pro",
["Proto-Otomian"] = "oto-pro",
["Proto-Pakanic"] = "mkh-pkn-pro",
["Proto-Palaungic"] = "mkh-pal-pro",
["Proto-Pama-Nyungan"] = "aus-pam-pro",
["Proto-Paresi-Waura"] = "awd-prw-pro",
["Proto-Pathan"] = "ira-pat-pro",
["Proto-Pearic"] = "mkh-pea-pro",
["Proto-Permic"] = "urj-prm-pro",
["Proto-Philippine"] = "phi-pro",
["Proto-Plateau"] = "nic-plt-pro",
["Proto-Plateau Penutian"] = "nai-plp-pro",
["Proto-Pnar-Khasi-Lyngngam"] = "aav-pkl-pro",
["Proto-Polynesian"] = "poz-pol-pro",
["Proto-Pomo"] = "nai-pom-pro",
["Proto-Puroik"] = "sit-khp-pro",
["Proto-Quechuan"] = "qwe-pro",
["Proto-Rukai"] = "dru-pro",
["Proto-Ryukyuan"] = "jpx-ryu-pro",
["Proto-Sabaki"] = "bnt-sab-pro",
["Proto-Saka"] = "xsc-sak-pro",
["Proto-Saka-Wakhi"] = "xsc-skw-pro",
["Proto-Salish"] = "sal-pro",
["Proto-Samic"] = "smi-pro",
["Proto-Samoyedic"] = "syd-pro",
["Proto-Sanglechi-Ishkashimi"] = "ira-sgi-pro",
["Proto-Sara"] = "csu-sar-pro",
["Proto-Sarmatian"] = "xsc-sar-pro",
["Proto-Scythian"] = "xsc-pro",
["Proto-Selkup"] = "sel-pro",
["Proto-Semitic"] = "sem-pro",
["Proto-Shughni-Roshani"] = "ira-shr-pro",
["Proto-Shughni-Yazghulami"] = "ira-shy-pro",
["Proto-Shughni-Yazghulami-Munji"] = "ira-sym-pro",
["Proto-Sino-Tibetan"] = "sit-pro",
["Proto-Siouan"] = "sio-pro",
["Proto-Siouan-Catawban"] = "nai-sca-pro",
["Proto-Slavic"] = "sla-pro",
["Proto-Sogdic"] = "ira-sgc-pro",
["Proto-Somaloid"] = "cus-som-pro",
["Proto-Songhay"] = "son-pro",
["Proto-Sotho-Tswana"] = "bnt-sts-pro",
["Proto-South Cushitic"] = "cus-sou-pro",
["Proto-South Dravidian"] = "dra-sou-pro",
["Proto-South Dravidian I"] = "dra-sdo-pro",
["Proto-South Dravidian II"] = "dra-sdt-pro",
["Proto-South Sulawesi"] = "poz-ssw-pro",
["Proto-Southern Jê"] = "sai-sje-pro",
["Proto-Southwestern Tai"] = "tai-swe-pro",
["Proto-Ta-Arawak"] = "awd-taa-pro",
["Proto-Tai"] = "tai-pro",
["Proto-Takic"] = "azc-tak-pro",
["Proto-Taman"] = "sdv-tmn-pro",
["Proto-Tamangic"] = "sit-tam-pro",
["Proto-Tangkhulic"] = "sit-tng-pro",
["Proto-Tani"] = "sit-tan-pro",
["Proto-Taranoan"] = "sai-tar-pro",
["Proto-Tatic"] = "xme-ttc-pro",
["Proto-Tocharian"] = "ine-toc-pro",
["Proto-Totozoquean"] = "nai-tot-pro",
["Proto-Trans-New Guinea"] = "ngf-pro",
["Proto-Triqui"] = "omq-tri-pro",
["Proto-Tsezian"] = "cau-tsz-pro",
["Proto-Tsimshianic"] = "nai-tsi-pro",
["Proto-Tungusic"] = "tuw-pro",
["Proto-Tupi-Guarani"] = "tup-gua-pro",
["Proto-Tupian"] = "tup-pro",
["Proto-Turkic"] = "trk-pro",
["Proto-Ubangian"] = "nic-ubg-pro",
["Proto-Ugric"] = "urj-ugr-pro",
["Proto-Upper Cross River"] = "nic-ucr-pro",
["Proto-Uralic"] = "urj-pro",
["Proto-Utian"] = "nai-utn-pro",
["Proto-Uto-Aztecan"] = "azc-pro",
["Proto-Vietic"] = "mkh-vie-pro",
["Proto-Volta-Congo"] = "nic-vco-pro",
["Proto-Volta-Niger"] = "alv-von-pro",
["Proto-West Germanic"] = "gmw-pro",
["Proto-West Semitic"] = "sem-wes-pro",
["Proto-Western Kho-Bwa"] = "sit-khw-pro",
["Proto-Western Mande"] = "dmn-mdw-pro",
["Proto-Witotoan"] = "sai-wit-pro",
["Proto-Yeniseian"] = "qfa-yen-pro",
["Proto-Yoruba"] = "alv-yor-pro",
["Proto-Yoruboid"] = "alv-yrd-pro",
["Proto-Yukaghir"] = "qfa-yuk-pro",
["Proto-Yupik"] = "ypk-pro",
["Proto-Zapotec"] = "omq-zpc-pro",
["Proto-Zapotecan"] = "omq-zap-pro",
["Proto-Zaza-Gorani"] = "ira-zgr-pro",
["Providencia Sign Language"] = "prz",
["Psikye"] = "kvj",
["Puare"] = "pux",
["Pudtol Atta"] = "atp",
["Puebla Mazatec"] = "pbm",
["Puelche"] = "pue",
["Puerto Rican Sign Language"] = "psl",
["Puimei Naga"] = "npu",
["Puinave"] = "pui",
["Puiron"] = "sit-prn",
["Pukapukan"] = "pkp",
["Pulabu"] = "pup",
["Puluwat"] = "puw",
["Puma"] = "pum",
["Pumpokol"] = "xpm",
["Pumé"] = "yae",
["Punan Aput"] = "pud",
["Punan Bah-Biau"] = "pna",
["Punan Batu"] = "pnm",
["Punan Merah"] = "puf",
["Punan Merap"] = "puc",
["Punan Tubu"] = "puj",
["Punic"] = "xpu",
["Punjabi"] = "pa",
["Punu"] = "puu",
["Puoc"] = "puo",
["Puquina"] = "puq",
["Puragi"] = "pru",
["Purari"] = "iar",
["Purepecha"] = "pua",
["Puri"] = "prr",
["Purik"] = "prx",
["Purisimeño"] = "puy",
["Puroik"] = "suv",
["Puruborá"] = "pur",
["Puruhá"] = "sai-prh",
["Purukotó"] = "sai-pur",
["Purum"] = "pub",
["Putai"] = "mfl",
["Putoh"] = "put",
["Putukwam"] = "afe",
["Puxian Min"] = "cpx",
["Puyo-Paekche"] = "xpp",
["Puyuma"] = "pyu",
["Pwaamèi"] = "pme",
["Pwapwâ"] = "pop",
["Pyapun"] = "pcw",
["Pye Krumen"] = "pye",
["Pyemmairre"] = "xpb",
["Pyen"] = "pyy",
["Pykobjê"] = "sai-pyk",
["Pyu (Myanmar)"] = "pyx",
["Pyu (New Guinea)"] = "pby",
["Páez"] = "pbb",
["Pááfang"] = "pfa",
["Päri"] = "lkr",
["Pémono"] = "pev",
["Pévé"] = "lme",
["Pökoot"] = "pko",
["Q'anjob'al"] = "kjb",
["Q'eqchi"] = "kek",
["Qabiao"] = "laq",
["Qaqet"] = "byx",
["Qatabanian"] = "xqt",
["Qau"] = "gqu",
["Qila Muji"] = "ymq",
["Qimant"] = "ahg",
["Quapaw"] = "qua",
["Quebec Sign Language"] = "fcs",
["Quechua"] = "qu",
["Quenya"] = "qya",
["Querétaro Otomi"] = "otq",
["Quetzaltepec Mixe"] = "pxm",
["Queyu"] = "qvy",
["Quiavicuzas Zapotec"] = "zpj",
["Quileute"] = "qui",
["Quimbaya"] = "sai-qmb",
["Quinault"] = "qun",
["Quinigua"] = "nai-qng",
["Quinqui"] = "quq",
["Quioquitani-Quierí Zapotec"] = "ztq",
["Quiotepec Chinantec"] = "chq",
["Quiripi"] = "qyp",
["Quitemo"] = "sai-qtm",
["Rabha"] = "rah",
["Rabona"] = "sai-rab",
["Rade"] = "rad",
["Raetic"] = "xrr",
["Raga"] = "lml",
["Rahambuu"] = "raz",
["Rajah Kabunsuwan Manobo"] = "mqk",
["Rajbanshi"] = "rjs",
["Raji"] = "rji",
["Rajong"] = "rjg",
["Rajput Garasia"] = "gra",
["Rakahanga-Manihiki"] = "rkh",
["Rakhine"] = "rki",
["Ralte"] = "ral",
["Rama"] = "rma",
["Ramandi"] = "tks",
["Ramanos"] = "sai-ram",
["Ramoaaina"] = "rai",
["Ramopa"] = "kjx",
["Rampi"] = "lje",
["Rana Tharu"] = "thr",
["Rang"] = "rax",
["Rangkas"] = "rgk",
["Ranglong"] = "rnl",
["Rao"] = "rao",
["Rapa"] = "ray",
["Rapa Nui"] = "rap",
["Rapoisi"] = "kyx",
["Rapting"] = "rpt",
["Rara Bakati'"] = "lra",
["Rarotongan"] = "rar",
["Rasawa"] = "rac",
["Ratagnon"] = "btn",
["Ratahan"] = "rth",
["Rathawi"] = "rtw",
["Rathwi Bareli"] = "bgd",
["Raute"] = "rau",
["Ravula"] = "yea",
["Rawa"] = "rwo",
["Rawang"] = "raw",
["Rawat"] = "jnl",
["Rawo"] = "rwa",
["Rayón Zoque"] = "zor",
["Razajerdi"] = "rat",
["Razihi"] = "rzh",
["Reang"] = "ria",
["Red Gelao"] = "gir",
["Reel"] = "atu",
["Rejang"] = "rej",
["Rejang Kayan"] = "ree",
["Reli"] = "rei",
["Rema"] = "bow",
["Rembarunga"] = "rmb",
["Rembong"] = "reb",
["Remo"] = "rem",
["Remontado Agta"] = "agv",
["Rempi"] = "rmp",
["Remun"] = "lkj",
["Rendille"] = "rel",
["Rengao"] = "ren",
["Rennellese"] = "mnv",
["Repanbitip"] = "rpn",
["Rer Bare"] = "rer",
["Rerau"] = "rea",
["Rerep"] = "pgk",
["Reshe"] = "res",
["Resígaro"] = "rgr",
["Retta"] = "ret",
["Reyesano"] = "rey",
["Rhine Franconian"] = "gmw-rfr",
["Riang"] = "ril",
["Riantana"] = "ran",
["Ribun"] = "rir",
["Rigwe"] = "iri",
["Rikbaktsa"] = "rkb",
["Rinconada Bikol"] = "bto",
["Rincón Zapotec"] = "zar",
["Ringgou"] = "rgu",
["Ririo"] = "rri",
["Ritarungo"] = "rit",
["Riung"] = "riu",
["Riverain Sango"] = "snj",
["Rogo"] = "rod",
["Rohingya"] = "rhg",
["Roma"] = "rmm",
["Romagnol"] = "rgn",
["Romam"] = "rmx",
["Romani"] = "rom",
["Romanian"] = "ro",
["Romanian Sign Language"] = "rms",
["Romano-Greek"] = "rge",
["Romano-Serbian"] = "rsb",
["Romanova"] = "rmv",
["Romansh"] = "rm",
["Romblomanon"] = "rol",
["Rombo"] = "rof",
["Romkun"] = "rmk",
["Ron"] = "cla",
["Ronga"] = "rng",
["Rongga"] = "ror",
["Rongmei Naga"] = "nbu",
["Rongpo"] = "rnp",
["Ronji"] = "roe",
["Roon"] = "rnn",
["Roria"] = "rga",
["Roro"] = "rro",
["Rotokas"] = "roo",
["Rotuman"] = "rtm",
["Rouran"] = "mis-rou",
["Roviana"] = "rug",
["Ruching Palaung"] = "pce",
["Rudbari"] = "rdb",
["Rufiji"] = "rui",
["Ruga"] = "ruh",
["Rukai"] = "dru",
["Rukiga"] = "cgg",
["Ruma"] = "ruz",
["Rumai Palaung"] = "rbb",
["Rumu"] = "klq",
["Runga"] = "rou",
["Rungtu"] = "rtc",
["Rungus"] = "drg",
["Rungwa"] = "rnw",
["Russenorsk"] = "crp-rsn",
["Russian"] = "ru",
["Russian Sign Language"] = "rsl",
["Rutul"] = "rut",
["Ruuli"] = "ruc",
["Ruwund"] = "rnd",
["Rwa"] = "rwk",
["Rwanda-Rundi"] = "rw",
["Rwandan Sign Language"] = "rsn",
["Réunion Creole French"] = "rcf",
["S'gaw Karen"] = "ksw",
["Sa"] = "sax",
["Sa'a"] = "apb",
["Sa'ban"] = "snv",
["Sa'och"] = "scq",
["Saafi-Saafi"] = "sav",
["Saam"] = "raq",
["Saamia"] = "lsm",
["Saanich"] = "str",
["Saare"] = "uss",
["Saaroa"] = "sxr",
["Saba"] = "saa",
["Sabaean"] = "xsa",
["Sabah Bisaya"] = "bsy",
["Sabah Malay"] = "msi",
["Sabanê"] = "sae",
["Sabaot"] = "spy",
["Sabine"] = "sbv",
["Sabir"] = "pml",
["Sabu"] = "hvn",
["Sabüm"] = "sbo",
["Sacapulteco"] = "quv",
["Sadri"] = "sck",
["Saek"] = "skb",
["Saep"] = "spd",
["Safaitic"] = "sem-saf",
["Safaliba"] = "saf",
["Safeyoka"] = "apz",
["Safwa"] = "sbk",
["Sagala"] = "sbm",
["Sagalla"] = "tga",
["Sahaptin"] = "nai-spt",
["Saho"] = "ssy",
["Sahu"] = "saj",
["Saisiyat"] = "xsy",
["Sajau Basap"] = "sjb",
["Sakachep"] = "sch",
["Sakam"] = "skm",
["Sakao"] = "sku",
["Sakata"] = "skt",
["Sake"] = "sak",
["Sakizaya"] = "szy",
["Sala"] = "shq",
["Salampasu"] = "slx",
["Salar"] = "slr",
["Salas"] = "sgu",
["Saleman"] = "sau",
["Saliba (Colombia)"] = "slc",
["Saliba (New Guinea)"] = "sbe",
["Salinan"] = "sln",
["Salt-Yui"] = "sll",
["Saluan"] = "loe",
["Salumá"] = "slj",
["Salvadoran Lenca"] = "nai-sln",
["Salvadoran Sign Language"] = "esn",
["Sam"] = "snx",
["Sama"] = "smd",
["Samalian"] = "sem-sam",
["Samaritan Aramaic"] = "sam",
["Samaritan Hebrew"] = "smp",
["Samarokena"] = "tmj",
["Samatao"] = "ysd",
["Samba"] = "smx",
["Sambali"] = "xsb",
["Sambalpuri"] = "spv",
["Sambe"] = "xab",
["Samberigi"] = "ssx",
["Samburu"] = "saq",
["Samei"] = "smh",
["Samo"] = "smq",
["Samoan"] = "sm",
["Samoan Plantation Pidgin"] = "crp-spp",
["Samogitian"] = "sgs",
["Samosa"] = "swm",
["Sampang"] = "rav",
["Samre"] = "sxm",
["Samtao"] = "stu",
["Samvedi"] = "smv",
["San Agustín Mixtepec Zapotec"] = "ztm",
["San Baltazar Loxicha Zapotec"] = "zpx",
["San Felipe Otlaltepec Popoloca"] = "pow",
["San Jerónimo Tecóatl Mazatec"] = "maa",
["San Juan Atzingo Popoloca"] = "poe",
["San Juan Colorado Mixtec"] = "mjc",
["San Juan Guelavía Zapotec"] = "zab",
["San Juan Quiahije Chatino"] = "omq-sjq",
["San Juan Teita Mixtec"] = "xtj",
["San Luís Temalacayuca Popoloca"] = "pps",
["San Marcos Tlalcoyalco Popoloca"] = "pls",
["San Martín Itunyoso Triqui"] = "trq",
["San Miguel Creole French"] = "scf",
["San Miguel Piedras Mixtec"] = "xtp",
["San Miguel el Grande Mixtec"] = "mig",
["San Pablo Güilá Zapotec"] = "ztu",
["San Pedro Amuzgos Amuzgo"] = "azg",
["San Pedro Quiatoni Zapotec"] = "zpf",
["San Vicente Coatlán Zapotec"] = "zpt",
["Sanapaná"] = "spn",
["Sanaviron"] = "sai-san",
["Sandawe"] = "sad",
["Sanga (Congo)"] = "sng",
["Sanga (Nigeria)"] = "xsn",
["Sanggau"] = "scg",
["Sangil"] = "snl",
["Sangir"] = "sxn",
["Sangisari"] = "sgr",
["Sangkong"] = "sgk",
["Sanglechi"] = "sgy",
["Sango"] = "sg",
["Sangtam Naga"] = "nsa",
["Sangu (Gabon)"] = "snq",
["Sangu (Tanzania)"] = "sbp",
["Sani"] = "ysn",
["Sanie"] = "ysy",
["Saniyo-Hiyewe"] = "sny",
["Sankaran Maninka"] = "msc",
["Sansi"] = "ssi",
["Sanskrit"] = "sa",
["Santa Catarina Albarradas Zapotec"] = "ztn",
["Santa Inés Ahuatempan Popoloca"] = "pca",
["Santa Inés Yatzechi Zapotec"] = "zpn",
["Santa Lucía Monteverde Mixtec"] = "mdv",
["Santa María La Alta Nahuatl"] = "nhz",
["Santa María Quiegolani Zapotec"] = "zpi",
["Santa María Zacatepec Mixtec"] = "mza",
["Santa Teresa Cora"] = "cok",
["Santali"] = "sat",
["Santiago Xanica Zapotec"] = "zpr",
["Santo Domingo Albarradas Zapotec"] = "zas",
["Sanumá"] = "xsu",
["Sanxiang Min"] = "nan-zsh",
["Sapa"] = "tys",
["Saparua"] = "spr",
["Sapará"] = "sai-sap",
["Sapo"] = "krn",
["Saponi"] = "spi",
["Saposa"] = "sps",
["Sapuan"] = "spu",
["Sapé"] = "spc",
["Sar"] = "mwm",
["Sara"] = "sre",
["Sara Kaba"] = "sbz",
["Sara Kaba Deme"] = "kwg",
["Sara Kaba Náà"] = "kwv",
["Saraiki"] = "skr",
["Saramaccan"] = "srm",
["Sarangani Blaan"] = "bps",
["Sarangani Manobo"] = "mbs",
["Sarasira"] = "zsa",
["Saraveca"] = "sar",
["Sarawak Malay"] = "poz-sml",
["Sardinian"] = "sc",
["Sarikoli"] = "srh",
["Sarli"] = "sdf",
["Sartang"] = "onp",
["Sarua"] = "swy",
["Sarudu"] = "sdu",
["Saruga"] = "sra",
["Sasak"] = "sas",
["Sasaru"] = "sxs",
["Sassarese"] = "sdc",
["Satawalese"] = "stw",
["Saterland Frisian"] = "stq",
["Sateré-Mawé"] = "mav",
["Sathmar Swabian"] = "gmw-stm",
["Saudi Arabian Sign Language"] = "sdl",
["Saurashtra"] = "saz",
["Sauri"] = "srt",
["Sause"] = "sao",
["Sausi"] = "ssj",
["Savi"] = "sdg",
["Savosavo"] = "svs",
["Sawai"] = "szw",
["Saweru"] = "swr",
["Sawi"] = "saw",
["Sawila"] = "swt",
["Sawriya Paharia"] = "mjt",
["Saxwe Gbe"] = "sxw",
["Saya"] = "say",
["Sayula Popoluca"] = "pos",
["Scanian"] = "gmq-scy",
["Scots"] = "sco",
["Scottish Gaelic"] = "gd",
["Seba"] = "kdg",
["Sebat Bet Gurage"] = "sgw",
["Seberuang"] = "sbx",
["Sebop"] = "sib",
["Sebuyau"] = "snb",
["Sechelt"] = "sec",
["Sechura"] = "sai-sec",
["Secoya"] = "sey",
["Sedang"] = "sed",
["Sedoa"] = "tvw",
["Seenku"] = "sos",
["Segai"] = "sge",
["Segeju"] = "seg",
["Seget"] = "sbg",
["Sehwi"] = "sfw",
["Seimat"] = "ssg",
["Seit-Kaitetu"] = "hik",
["Sekani"] = "sek",
["Sekapan"] = "skp",
["Sekar"] = "skz",
["Seke"] = "skj",
["Sekele"] = "vaj",
["Seki"] = "syi",
["Seko Padang"] = "skx",
["Seko Tengah"] = "sko",
["Sekpele"] = "lip",
["Selangor Sign Language"] = "kgi",
["Selaru"] = "slu",
["Selayar"] = "sly",
["Selee"] = "snw",
["Selepet"] = "spl",
["Selk'nam"] = "ona",
["Selonian"] = "sxl",
["Selungai Murut"] = "slg",
["Seluwasan"] = "sws",
["Sema"] = "nsm",
["Semai"] = "sea",
["Semandang"] = "sdm",
["Semaq Beri"] = "szc",
["Sembakung Murut"] = "sbr",
["Semelai"] = "sza",
["Semigallian"] = "xzm",
["Semimi"] = "etz",
["Semnam"] = "ssm",
["Semnani"] = "smy",
["Sempan"] = "xse",
["Sena"] = "seh",
["Senara"] = "seq",
["Senaya"] = "syn",
["Sene"] = "sej",
["Seneca"] = "see",
["Sengele"] = "szg",
["Senggi"] = "snu",
["Sengo"] = "spk",
["Sengseng"] = "ssz",
["Senhaja de Srair"] = "sjs",
["Sensi"] = "sni",
["Sentani"] = "set",
["Senthang Chin"] = "sez",
["Sentinelese"] = "std",
["Sepa (Indonesia)"] = "spb",
["Sepa (New Guinea)"] = "spe",
["Sepen"] = "spm",
["Sepik Iwam"] = "iws",
["Sera"] = "sry",
["Serbo-Croatian"] = "sh",
["Sere"] = "swf",
["Serer"] = "srr",
["Seri"] = "sei",
["Serili"] = "sve",
["Seroa"] = "kqu",
["Serrano"] = "ser",
["Seru"] = "szd",
["Serua"] = "srw",
["Serudung Murut"] = "srk",
["Serui-Laut"] = "seu",
["Seta"] = "stf",
["Setaman"] = "stm",
["Seti"] = "sbi",
["Severn Ojibwa"] = "ojs",
["Sewa Bay"] = "sew",
["Seychelles Sign Language"] = "lsw",
["Seychellois Creole"] = "crs",
["Seze"] = "sze",
["Sha"] = "scw",
["Shabak"] = "sdb",
["Shabo"] = "sbf",
["Shahmirzadi"] = "srz",
["Shahrudi"] = "shm",
["Shall-Zwall"] = "sha",
["Shama-Sambuga"] = "sqa",
["Shamang"] = "xsh",
["Shambala"] = "ksb",
["Shan"] = "shn",
["Shanenawa"] = "swo",
["Shanga"] = "sho",
["Shangzhai"] = "jih",
["Shaojiang Min"] = "sjc",
["Shaozhou Tuhua"] = "zhx-sht",
["Sharanahua"] = "mcd",
["Shark Bay"] = "ssv",
["Sharwa"] = "swq",
["Shasta"] = "sht",
["Shatt"] = "shj",
["Shau"] = "sqh",
["Shawnee"] = "sjw",
["She"] = "shx",
["Shebayo"] = "awd-she",
["Shehri"] = "shv",
["Shekkacho"] = "moy",
["Sheko"] = "she",
["Shelta"] = "sth",
["Shendu"] = "shl",
["Sheni"] = "scv",
["Sherbro"] = "bun",
["Sherdukpen"] = "sdp",
["Sherpa"] = "xsr",
["Sheshi Kham"] = "kip",
["Shetland"] = "scz",
["Shi"] = "shr",
["Shihhi Arabic"] = "ssh",
["Shiki"] = "gua",
["Shilluk"] = "shk",
["Shina"] = "scl",
["Shinasha"] = "bwo",
["Shipibo-Conibo"] = "shp",
["Shixing"] = "sxg",
["Sholaga"] = "sle",
["Shom Peng"] = "sii",
["Shona"] = "sn",
["Shoo-Minda-Nye"] = "bcv",
["Shor"] = "cjs",
["Shoshone"] = "shh",
["Shua"] = "shg",
["Shuar"] = "jiv",
["Shughni"] = "sgh",
["Shumashti"] = "sts",
["Shumcho"] = "scu",
["Shuswap"] = "shs",
["Shuwa-Zamani"] = "ksa",
["Shwai"] = "shw",
["Shwe Palaung"] = "pll",
["Sialum"] = "slw",
["Siamou"] = "sif",
["Sian"] = "spg",
["Siane"] = "snp",
["Siang"] = "sya",
["Siar-Lak"] = "sjr",
["Sibe"] = "nco",
["Siberian Tatar"] = "sty",
["Sibu Melanau"] = "sdx",
["Sicanian"] = "sxc",
["Sicel"] = "scx",
["Sichuanese"] = "zhx-sic",
["Sicilian"] = "scn",
["Sicite"] = "sep",
["Siculo-Arabic"] = "sqr",
["Sidamo"] = "sid",
["Sidetic"] = "xsd",
["Sie"] = "erg",
["Sierra Leone Sign Language"] = "sgx",
["Sierra Negra Nahuatl"] = "nsu",
["Sierra de Juárez Zapotec"] = "zaa",
["Sighu"] = "sxe",
["Sihan"] = "snr",
["Sika"] = "ski",
["Sikaiana"] = "sky",
["Sikaritai"] = "tty",
["Sikiana"] = "sik",
["Sikkimese"] = "sip",
["Sikule"] = "skh",
["Sila"] = "slt",
["Silacayoapan Mixtec"] = "mks",
["Silesian"] = "szl",
["Silimo"] = "wul",
["Siliput"] = "mkc",
["Silopi"] = "xsp",
["Silt'e"] = "stv",
["Simaa"] = "sie",
["Simalungun Batak"] = "bts",
["Simba"] = "sbw",
["Simbali"] = "smg",
["Simbari"] = "smb",
["Simbo"] = "sbb",
["Simeku"] = "smz",
["Simeulue"] = "smr",
["Simte"] = "smt",
["Sinacantán"] = "nai-sin",
["Sinagen"] = "siu",
["Sinasina"] = "sst",
["Sinaugoro"] = "snc",
["Sindarin"] = "sjn",
["Sindhi"] = "sd",
["Sindhi Bhil"] = "sbn",
["Sindihui Mixtec"] = "xts",
["Singa"] = "sgm",
["Singapore Sign Language"] = "sls",
["Singpho"] = "sgp",
["Sinhalese"] = "si",
["Sinicahua Mixtec"] = "xti",
["Sininkere"] = "skq",
["Sinte Romani"] = "rmo",
["Sinyar"] = "sys",
["Sinúfana"] = "sai-sin",
["Sio"] = "xsi",
["Siona"] = "snn",
["Sipakapense"] = "qum",
["Sira"] = "swj",
["Siraya"] = "fos",
["Sirenik"] = "ysr",
["Siri"] = "sir",
["Siriano"] = "sri",
["Sirionó"] = "srq",
["Sirmauri"] = "srx",
["Siroi"] = "ssd",
["Sirva"] = "sbq",
["Sisaala"] = "sld",
["Sissano"] = "sso",
["Situ"] = "sit-sit",
["Siuslaw"] = "sis",
["Sivandi"] = "siy",
["Sivia Sign Language"] = "lsv",
["Siwai"] = "siw",
["Siwi"] = "siz",
["Siwu"] = "akp",
["Siyin Chin"] = "csy",
["Skalvian"] = "svx",
["Ske"] = "ske",
["Skepi Creole Dutch"] = "skw",
["Skolt Sami"] = "sms",
["Skou"] = "skv",
["Slavomolisano"] = "svm",
["Slovak"] = "sk",
["Slovakian Sign Language"] = "svk",
["Slovene"] = "sl",
["Slovincian"] = "zlw-slv",
["Small Flowery Miao"] = "sfm",
["Smärky Kanum"] = "kxq",
["So'a"] = "ssq",
["Sobei"] = "sob",
["Sochiapam Chinantec"] = "cso",
["Soga"] = "xog",
["Sogdian"] = "sog",
["Sok"] = "skk",
["Sokna"] = "swn",
["Soko"] = "soc",
["Sokoro"] = "sok",
["Solano"] = "xso",
["Soli"] = "sby",
["Solombala English"] = "crp-slb",
["Solomon Islands Sign Language"] = "szs",
["Solon"] = "tuw-sol",
["Solong"] = "aaw",
["Solos"] = "sol",
["Som"] = "smc",
["Somali"] = "so",
["Somba-Siawari"] = "bmu",
["Somra"] = "ntx",
["Somrai"] = "sor",
["Somray"] = "smu",
["Somyev"] = "kgt",
["Sonaga"] = "ysg",
["Sonde"] = "shc",
["Songe"] = "sop",
["Songlai Chin"] = "csj",
["Songomeno"] = "soe",
["Songoora"] = "sod",
["Sonha"] = "soi",
["Sonia"] = "siq",
["Soninke"] = "snk",
["Sonsorolese"] = "sov",
["Soo"] = "teu",
["Sop"] = "urw",
["Soqotri"] = "sqt",
["Sora"] = "srb",
["Sori-Harengan"] = "sbh",
["Sorkhei"] = "sqo",
["Sorothaptic"] = "sxo",
["Sorsogon Ayta"] = "ays",
["Sos Kundi"] = "sdk",
["Sota Kanum"] = "krz",
["Sotho"] = "st",
["Sou"] = "sqq",
["Sougb"] = "mnx",
["South African Sign Language"] = "sfs",
["South Awyu"] = "aws",
["South Boma"] = "bnt-sbo",
["South Central Banda"] = "lnl",
["South Central Dinka"] = "dib",
["South Efate"] = "erk",
["South Fali"] = "fal",
["South Giziga"] = "giz",
["South Lembata"] = "lmf",
["South Levantine Arabic"] = "ajp",
["South Marquesan"] = "mqm",
["South Muyu"] = "kts",
["South Nuaulu"] = "nxl",
["South Picene"] = "spx",
["South Slavey"] = "xsl",
["South Tairora"] = "omw",
["South Tukang Besi"] = "bhq",
["South Ucayali Ashéninka"] = "cpy",
["South Watut"] = "mcy",
["Southeast Ambrym"] = "tvk",
["Southeast Babar"] = "vbb",
["Southeast Ijo"] = "ijs",
["Southeast Pashayi"] = "psi",
["Southeast Tasmanian"] = "xpf",
["Southeastern Dinka"] = "dks",
["Southeastern Ixtlán Zapotec"] = "zpd",
["Southeastern Kolami"] = "nit",
["Southeastern Nochixtlán Mixtec"] = "mxy",
["Southeastern Pomo"] = "pom",
["Southeastern Puebla Nahuatl"] = "npl",
["Southeastern Tarahumara"] = "tcu",
["Southeastern Tepehuan"] = "stp",
["Southern Alta"] = "agy",
["Southern Altai"] = "alt",
["Southern Amami Ōshima"] = "ams",
["Southern Bai"] = "bfs",
["Southern Birifor"] = "biv",
["Southern Bobo"] = "bwq",
["Southern Bontoc"] = "obk",
["Southern Carrier"] = "caf",
["Southern Catanduanes Bikol"] = "bln",
["Southern Dagaare"] = "dga",
["Southern East Cree"] = "crj",
["Southern Ghale"] = "ghe",
["Southern Grebo"] = "grj",
["Southern Guiyang Hmong"] = "hmy",
["Southern Haida"] = "hax",
["Southern Hindko"] = "hnd",
["Southern Kalapuya"] = "sxk",
["Southern Kalinga"] = "ksc",
["Southern Kam"] = "kmc",
["Southern Khanty"] = "kca-sou",
["Southern Kissi"] = "kss",
["Southern Kiwai"] = "kjd",
["Southern Kurdish"] = "sdh",
["Southern Lolopo"] = "ysp",
["Southern Lorung"] = "lrr",
["Southern Luri"] = "luz",
["Southern Ma'di"] = "snm",
["Southern Mansi"] = "mns-sou",
["Southern Mashan Hmong"] = "hma",
["Southern Mnong"] = "mnn",
["Southern Muji"] = "ymc",
["Southern Ndebele"] = "nr",
["Southern Ngbandi"] = "nbw",
["Southern Nicobarese"] = "nik",
["Southern Nisu"] = "nsd",
["Southern Nuni"] = "nnw",
["Southern Ohlone"] = "css",
["Southern One"] = "osu",
["Southern Pame"] = "pmz",
["Southern Pinghua"] = "csp",
["Southern Pomo"] = "peq",
["Southern Puebla Mixtec"] = "mit",
["Southern Pumi"] = "pmj",
["Southern Qiandong Miao"] = "hms",
["Southern Qiang"] = "qxs",
["Southern Rengma Naga"] = "nre",
["Southern Rincon Zapotec"] = "zsr",
["Southern Roglai"] = "rgs",
["Southern Sama"] = "ssb",
["Southern Sami"] = "sma",
["Southern Samo"] = "sbd",
["Southern Selkup"] = "sel-sou",
["Southern Sierra Miwok"] = "skd",
["Southern Thai"] = "sou",
["Southern Tidung"] = "itd",
["Southern Tiwa"] = "tix",
["Southern Toussian"] = "wib",
["Southern Tujia"] = "tjs",
["Southern Tutchone"] = "tce",
["Southern Valley Yokuts"] = "yok-svy",
["Southern Yukaghir"] = "yux",
["Southwest Gbaya"] = "gso",
["Southwest Palawano"] = "plv",
["Southwest Pashayi"] = "psh",
["Southwest Tanna"] = "nwi",
["Southwestern Bontoc"] = "vbk",
["Southwestern Dinka"] = "dik",
["Southwestern Fars"] = "fay",
["Southwestern Guiyang Hmong"] = "hmg",
["Southwestern Huishui Hmong"] = "hmh",
["Southwestern Nisu"] = "nsv",
["Southwestern Tarahumara"] = "twr",
["Southwestern Tepehuan"] = "tla",
["Southwestern Tlaxiaco Mixtec"] = "meh",
["Sowa"] = "sww",
["Sowanda"] = "sow",
["Soyaltepec Mazatec"] = "vmp",
["Soyaltepec Mixtec"] = "vmq",
["Spanish"] = "es",
["Spanish Sign Language"] = "ssp",
["Spiti Bhoti"] = "spt",
["Spokane"] = "spo",
["Squamish"] = "squ",
["Sranan Tongo"] = "srn",
["Sri Lankan Creole Malay"] = "sci",
["Sri Lankan Sign Language"] = "sqs",
["Stau"] = "ero-tau",
["Stod Bhoti"] = "sbu",
["Stoney"] = "sto",
["Suabo"] = "szp",
["Suau"] = "swp",
["Suba"] = "sxb",
["Suba-Simbiti"] = "ssc",
["Subi"] = "xsj",
["Subiya"] = "sbs",
["Subtiaba"] = "sut",
["Sudanese Arabic"] = "apd",
["Sudest"] = "tgo",
["Sudovian"] = "xsv",
["Suena"] = "sue",
["Suga"] = "sgi",
["Suganga"] = "sug",
["Sugut Dusun"] = "kzs",
["Sui"] = "swi",
["Suki"] = "sui",
["Suku"] = "sub",
["Sukuma"] = "suk",
["Sukur"] = "syk",
["Sukurum"] = "zsu",
["Sula"] = "szn",
["Sulka"] = "sua",
["Sulod"] = "srg",
["Suma"] = "sqm",
["Sumariup"] = "siv",
["Sumau"] = "six",
["Sumbawa"] = "smw",
["Sumbwa"] = "suw",
["Sumerian"] = "sux",
["Sumtu Chin"] = "csv",
["Sunam"] = "ssk",
["Sundanese"] = "su",
["Sungwadaga"] = "mwo",
["Sungwadia"] = "mrb",
["Sunum"] = "ymn",
["Sunwar"] = "suz",
["Suoy"] = "syo",
["Supyire"] = "spp",
["Sur"] = "tdl",
["Surbakhal"] = "sbj",
["Suri"] = "suq",
["Surigaonon"] = "sgd",
["Surjapuri"] = "sjp",
["Sursurunga"] = "sgz",
["Suruahá"] = "swx",
["Surubu"] = "sde",
["Suruí"] = "sru",
["Suruí Do Pará"] = "mdz",
["Susquehannock"] = "sqn",
["Susu"] = "sus",
["Susuami"] = "ssu",
["Suundi"] = "sdj",
["Suwawa"] = "swu",
["Suyá"] = "suy",
["Svan"] = "sva",
["Swabian"] = "swg",
["Swahili"] = "sw",
["Swampy Cree"] = "csw",
["Swazi"] = "ss",
["Swedish"] = "sv",
["Swedish Sign Language"] = "swl",
["Swiss-French Sign Language"] = "ssr",
["Swiss-German Sign Language"] = "sgg",
["Swiss-Italian Sign Language"] = "slf",
["Swo"] = "sox",
["Syenara"] = "shz",
["Sylheti"] = "syl",
["Sácata"] = "sai-sac",
["São Paulo Kaingáng"] = "zkp",
["Sãotomense"] = "cri",
["Sîshëë"] = "sih",
["Sô"] = "sss",
["T'en"] = "tct",
["Taabwa"] = "tap",
["Taba"] = "mky",
["Tabaa Zapotec"] = "zat",
["Tabancale"] = "sai-tab",
["Tabaru"] = "tby",
["Tabasaran"] = "tab",
["Tabasco Nahuatl"] = "nhc",
["Tabasco Zoque"] = "zoq",
["Tabla"] = "tnm",
["Tabo"] = "knv",
["Tabriak"] = "tzx",
["Tacahua Mixtec"] = "xtt",
["Tacana"] = "tna",
["Tachawit"] = "shy",
["Tadaksahak"] = "dsq",
["Tadyawan"] = "tdy",
["Tae'"] = "rob",
["Tafi"] = "tcd",
["Tafreshi"] = "xme-taf",
["Tagabawa"] = "bgs",
["Tagakaulu Kalagan"] = "klg",
["Tagal Murut"] = "mvv",
["Tagalog"] = "tl",
["Tagbu"] = "tbm",
["Tagdal"] = "tda",
["Tagish"] = "tgx",
["Tagoi"] = "tag",
["Tagwana"] = "tgw",
["Tahitian"] = "ty",
["Tahltan"] = "tht",
["Tai"] = "taw",
["Tai Daeng"] = "tyr",
["Tai Dam"] = "blt",
["Tai Do"] = "tyj",
["Tai Dón"] = "twh",
["Tai Hang Tong"] = "thc",
["Tai Hongjin"] = "tiz",
["Tai Laing"] = "tjl",
["Tai Loi"] = "tlq",
["Tai Long"] = "thi",
["Tai Nüa"] = "tdd",
["Tai Pao"] = "tpo",
["Tai Thanh"] = "tmm",
["Tai Ya"] = "cuu",
["Taiap"] = "gpn",
["Taikat"] = "aos",
["Taimyr Pidgin Russian"] = "crp-tpr",
["Tainae"] = "ago",
["Tairuma"] = "uar",
["Taishanese"] = "zhx-tai",
["Taita"] = "dav",
["Taivoan"] = "tvx",
["Taiwan Sign Language"] = "tss",
["Taje"] = "pee",
["Tajik"] = "tg",
["Tajiki Arabic"] = "abh",
["Tajio"] = "tdj",
["Tajuasohn"] = "tja",
["Takelma"] = "tkm",
["Takia"] = "tbc",
["Takua"] = "tkz",
["Takuu"] = "nho",
["Takwane"] = "tke",
["Tal"] = "tal",
["Tala"] = "tak",
["Talaud"] = "tld",
["Taliabu"] = "tlv",
["Talieng"] = "tdf",
["Talinga-Bwisi"] = "tlj",
["Talise"] = "tlr",
["Tallán"] = "sai-tal",
["Talodi"] = "tlo",
["Taloki"] = "tlk",
["Talondo'"] = "tln",
["Talossan"] = "tzl",
["Talu"] = "yta",
["Talysh"] = "tly",
["Tama (Chad)"] = "tma",
["Tama (Colombia)"] = "ten",
["Tamagario"] = "tcg",
["Tamambo"] = "mla",
["Taman (Indonesia)"] = "tmn",
["Taman (Myanmar)"] = "tcl",
["Tamanaku"] = "tmz",
["Tamazola Mixtec"] = "vmx",
["Tambas"] = "tdk",
["Tambora"] = "xxt",
["Tambotalo"] = "tls",
["Tami"] = "tmy",
["Tamil"] = "ta",
["Tamki"] = "tax",
["Tamnim Citak"] = "tml",
["Tampias Lobu"] = "low",
["Tampuan"] = "tpu",
["Tampulma"] = "tpm",
["Tanacross"] = "tcb",
["Tanahmerah"] = "tcm",
["Tanapag"] = "tpv",
["Tanchangya"] = "tnv",
["Tandaganon"] = "tgn",
["Tandia"] = "tni",
["Tanema"] = "tnx",
["Tangale"] = "tan",
["Tangam"] = "sit-tgm",
["Tanggu"] = "tgu",
["Tangkhul Naga"] = "nmf",
["Tangko"] = "tkx",
["Tangoa"] = "tgp",
["Tangsa"] = "nst",
["Tanguat"] = "tbs",
["Tangut"] = "txg",
["Tangwang"] = "mis-tnw",
["Tanimbili"] = "tbe",
["Tanimuca-Retuarã"] = "tnc",
["Tanjijili"] = "uji",
["Tanudan Kalinga"] = "kml",
["Tanzanian Sign Language"] = "tza",
["Taos"] = "twf",
["Tapachultec"] = "nai-tap",
["Taparita"] = "sai-tpr",
["Tapayuna"] = "sai-tap",
["Tapei"] = "afp",
["Tapieté"] = "tpj",
["Tapirapé"] = "taf",
["Tar Gula"] = "kcm",
["Tara Baka"] = "bdh",
["Tarairiú"] = "sai-trr",
["Tarantino"] = "roa-tar",
["Tarao"] = "tro",
["Taraon"] = "mhu",
["Tareng"] = "tgr",
["Tariana"] = "tae",
["Tarifit"] = "rif",
["Tarjumo"] = "txj",
["Tarok"] = "yer",
["Taroko"] = "trv",
["Tarpia"] = "tpf",
["Tartessian"] = "txr",
["Taruma"] = "tdm",
["Tasawaq"] = "twq",
["Tashelhit"] = "shi",
["Tasmate"] = "tmt",
["Tat"] = "ttt",
["Tataltepec Chatino"] = "cta",
["Tatana"] = "txx",
["Tatar"] = "tt",
["Tataviam"] = "azc-tat",
["Tatuyo"] = "tav",
["Tauade"] = "ttd",
["Taulil"] = "tuh",
["Taungyo"] = "tco",
["Taupota"] = "tpa",
["Tause"] = "tad",
["Taushiro"] = "trr",
["Tausug"] = "tsg",
["Tauya"] = "tya",
["Taveta"] = "tvs",
["Tavoyan"] = "tvn",
["Tavringer Romani"] = "rmu",
["Tawala"] = "tbo",
["Tawandê"] = "xtw",
["Tawang Monpa"] = "twm",
["Tawasa"] = "nai-taw",
["Taworta"] = "tbp",
["Tawoyan"] = "twy",
["Tawr Chin"] = "tcp",
["Tay Khang"] = "tnu",
["Taymanitic"] = "sem-tay",
["Tayo"] = "cks",
["Taíno"] = "tnq",
["Tboli"] = "tbl",
["Tchitchege"] = "tck",
["Tchumbuli"] = "bqa",
["Te'un"] = "tve",
["Teanu"] = "tkw",
["Tebul Sign Language"] = "tsy",
["Tebul Ure Dogon"] = "dtu",
["Tecpatlán Totonac"] = "tcw",
["Tedaga"] = "tuq",
["Tedim Chin"] = "ctd",
["Tee"] = "tkq",
["Tefaro"] = "tfo",
["Tegali"] = "ras",
["Tehit"] = "kps",
["Tehuelche"] = "teh",
["Teiwa"] = "twe",
["Tejalapan Zapotec"] = "ztt",
["Teke-Fuumu"] = "ifm",
["Teke-Kukuya"] = "kkw",
["Teke-Laali"] = "lli",
["Teke-Tege"] = "teg",
["Teke-Tsaayi"] = "tyi",
["Teke-Tyee"] = "tyx",
["Tektiteko"] = "ttc",
["Tela-Masbuar"] = "tvm",
["Telefol"] = "tlf",
["Telugu"] = "te",
["Teluti"] = "tlt",
["Tem"] = "kdh",
["Temascaltepec Nahuatl"] = "nhv",
["Tembé"] = "tqb",
["Teme"] = "tdo",
["Temein"] = "teq",
["Temi"] = "soz",
["Temiar"] = "tea",
["Temne"] = "tem",
["Temoaya Otomi"] = "ott",
["Temoq"] = "tmo",
["Tempasuk Dusun"] = "tdu",
["Ten'edn"] = "tnz",
["Tenango Otomi"] = "otn",
["Tene Kan Dogon"] = "dtk",
["Tenggarong Kutai Malay"] = "vkt",
["Tengger"] = "tes",
["Tenharim"] = "pah",
["Tenino"] = "tqn",
["Tenis"] = "tns",
["Tennet"] = "tex",
["Teochew"] = "nan-tws",
["Teojomulco Chatino"] = "omq-teo",
["Teop"] = "tio",
["Teor"] = "tev",
["Tepecano"] = "tep",
["Tepetotutla Chinantec"] = "cnt",
["Tepeuxila Cuicatec"] = "cux",
["Tepinapa Chinantec"] = "cte",
["Tepo Krumen"] = "ted",
["Teposcolula Mixtec"] = "omq-tel",
["Tequistlatec"] = "nai-teq",
["Ter Sami"] = "sjt",
["Tera"] = "ttr",
["Terebu"] = "trb",
["Terei"] = "buo",
["Terengganu Malay"] = "poz-ter",
["Tereno"] = "ter",
["Teressa"] = "tef",
["Tereweng"] = "twg",
["Teribe"] = "tfr",
["Terik"] = "tec",
["Termanu"] = "twu",
["Ternate"] = "tft",
["Ternateño"] = "tmg",
["Tese"] = "keg",
["Teshenawa"] = "twc",
["Tetela"] = "tll",
["Tetelcingo Nahuatl"] = "nhg",
["Tetete"] = "teb",
["Tetserret"] = "tez",
["Tetum"] = "tet",
["Tetun Dili"] = "tdt",
["Teushen"] = "sai-teu",
["Teutila Cuicatec"] = "cut",
["Tewa"] = "tew",
["Texcatepec Otomi"] = "otx",
["Texistepec Popoluca"] = "poq",
["Texmelucan Zapotec"] = "zpz",
["Tezoatlán Mixtec"] = "mxb",
["Tha"] = "thy",
["Thachanadan"] = "thn",
["Thado Chin"] = "tcz",
["Thai"] = "th",
["Thai Mon"] = "mnw-tha",
["Thai Sign Language"] = "tsq",
["Thai Song"] = "soa",
["Thaiphum Chin"] = "cth",
["Thakali"] = "ths",
["Thamudic"] = "sem-tha",
["Thangal Naga"] = "nki",
["Thangmi"] = "thf",
["Thao"] = "ssf",
["Tharaka"] = "thk",
["Tharrgari"] = "dhr",
["Thavung"] = "thm",
["Thawa"] = "xtv",
["Tho"] = "tou",
["Thompson"] = "thp",
["Thopho"] = "ytp",
["Thracian"] = "txh",
["Thu Lao"] = "tyl",
["Thulung"] = "tdh",
["Thurawal"] = "tbh",
["Thuri"] = "thu",
["Tiagba"] = "ahi",
["Tiale"] = "mnl",
["Tiang"] = "tbj",
["Tibea"] = "ngy",
["Tibetan"] = "bo",
["Tibetan Sign Language"] = "lsn",
["Ticuna"] = "tca",
["Tidaá Mixtec"] = "mtx",
["Tidore"] = "tvo",
["Tiemacèwè Bozo"] = "boo",
["Tiene"] = "tii",
["Tifal"] = "tif",
["Tigak"] = "tgc",
["Tigon Mbembe"] = "nza",
["Tigre"] = "tig",
["Tigrinya"] = "ti",
["Tii"] = "txq",
["Tijaltepec Mixtec"] = "xtl",
["Tikar"] = "tik",
["Tikopia"] = "tkp",
["Tilapa Otomi"] = "otl",
["Tillamook"] = "til",
["Tilquiapan Zapotec"] = "zts",
["Tilung"] = "tij",
["Tima"] = "tms",
["Timbe"] = "tim",
["Timor Pidgin"] = "tvy",
["Timote"] = "sai-tim",
["Timucua"] = "tjm",
["Timugon Murut"] = "tih",
["Tinani"] = "lbf",
["Tindi"] = "tin",
["Tingui-Boto"] = "tgv",
["Tinigua"] = "tit",
["Tinoc Kallahan"] = "tne",
["Tinputz"] = "tpz",
["Tinrin"] = "cir",
["Tipai"] = "nai-tip",
["Tippera"] = "tpe",
["Tira"] = "tic",
["Tirahi"] = "tra",
["Tiranige Diga Dogon"] = "tde",
["Tirax"] = "mme",
["Tiruray"] = "tiy",
["Tita"] = "tdq",
["Titan"] = "ttv",
["Tiv"] = "tiv",
["Tiwa"] = "lax",
["Tiwi"] = "tiw",
["Tiéfo"] = "tiq",
["Tiéyaxo Bozo"] = "boz",
["Tjurruru"] = "tju",
["Tlachichilco Tepehua"] = "tpt",
["Tlacoapa Me'phaa"] = "tpl",
["Tlacoatzintepec Chinantec"] = "ctl",
["Tlacolulita Zapotec"] = "zpk",
["Tlahuica"] = "ocu",
["Tlahuitoltepec Mixe"] = "mxp",
["Tlamacazapa Nahuatl"] = "nuz",
["Tlazoyaltepec Mixtec"] = "mqh",
["Tlingit"] = "tli",
["To"] = "toz",
["To'abaita"] = "mlu",
["Toaripi"] = "tqo",
["Toba"] = "tob",
["Toba Batak"] = "bbc",
["Toba-Maskoy"] = "tmf",
["Tobagonian Creole English"] = "tgh",
["Tobanga"] = "tng",
["Tobati"] = "tti",
["Tobelo"] = "tlb",
["Tobian"] = "tox",
["Tobilung"] = "tgb",
["Tobo"] = "tbv",
["Tocantins Asurini"] = "asu",
["Tocharian A"] = "xto",
["Tocharian B"] = "txb",
["Tocho"] = "taz",
["Toda"] = "tcx",
["Todrah"] = "tdr",
["Tofa"] = "kim",
["Tofanma"] = "tlg",
["Tofin Gbe"] = "tfi",
["Togbo-Vara Banda"] = "tor",
["Togoyo"] = "tgy",
["Tojolabal"] = "toj",
["Tok Pisin"] = "tpi",
["Toka-Leya"] = "dov",
["Tokano"] = "zuh",
["Tokelauan"] = "tkl",
["Toki Pona"] = "tok",
["Tokunoshima"] = "tkn",
["Tol"] = "jic",
["Tolai"] = "ksd",
["Tolaki"] = "lbw",
["Tolomako"] = "tlm",
["Tolowa"] = "tol",
["Toloza"] = "ytl",
["Toma"] = "tod",
["Tomadino"] = "tdi",
["Tombelala"] = "ttp",
["Tombonuo"] = "txa",
["Tombulu"] = "tom",
["Tomini"] = "txm",
["Tommeginne"] = "xpv",
["Tommo So"] = "dto",
["Tomo Kan Dogon"] = "dtm",
["Tomoip"] = "tqp",
["Tondano"] = "tdn",
["Tonga (Malawi)"] = "tog",
["Tonga (Mozambique)"] = "toh",
["Tonga (Zambia)"] = "toi",
["Tongan"] = "to",
["Tongwe"] = "tny",
["Tonjon"] = "tjn",
["Tonkawa"] = "tqw",
["Tonsawang"] = "tnw",
["Tonsea"] = "txs",
["Tontemboan"] = "tnt",
["Toogee"] = "xpx",
["Tooro"] = "ttj",
["Topoiyo"] = "toy",
["Toposa"] = "toq",
["Toraja-Sa'dan"] = "sda",
["Toram"] = "trj",
["Torau"] = "ttu",
["Toro"] = "tdv",
["Toro So Dogon"] = "dts",
["Toro Tegu Dogon"] = "dtt",
["Toromono"] = "tno",
["Torona"] = "tqr",
["Torres Strait Creole"] = "tcs",
["Torricelli"] = "tei",
["Torwali"] = "trw",
["Torá"] = "trz",
["Tosu"] = "sit-tos",
["Totela"] = "ttl",
["Toto"] = "txo",
["Totoli"] = "txe",
["Totomachapan Zapotec"] = "zph",
["Totontepec Mixe"] = "mto",
["Totoro"] = "ttk",
["Touo"] = "tqu",
["Toura"] = "neb",
["Towei"] = "ttn",
["Translingual"] = "mul",
["Transylvanian Saxon"] = "gmw-tsx",
["Traveller Danish"] = "rmd",
["Traveller Norwegian"] = "rmg",
["Traveller Scottish"] = "trl",
["Tregami"] = "trm",
["Tremembé"] = "tme",
["Trieng"] = "stg",
["Trimuris"] = "tip",
["Tring"] = "tgq",
["Tringgus"] = "trx",
["Trinidad and Tobago Sign Language"] = "lst",
["Trinidadian Creole English"] = "trf",
["Trinitario"] = "trn",
["Trió"] = "tri",
["Truká"] = "tka",
["Trumai"] = "tpy",
["Ts'ün-Lao"] = "tsl",
["Tsaangi"] = "tsa",
["Tsafiki"] = "cof",
["Tsakhur"] = "tkr",
["Tsakonian"] = "tsd",
["Tsakwambo"] = "kvz",
["Tsamai"] = "tsb",
["Tsat"] = "huq",
["Tsetsaut"] = "txc",
["Tsez"] = "ddo",
["Tshangla"] = "tsj",
["Tshobdun"] = "sit-tsh",
["Tshwa"] = "hio",
["Tsikimba"] = "kdl",
["Tsimané"] = "cas",
["Tsimshian"] = "tsi",
["Tsishingini"] = "tsw",
["Tso"] = "ldp",
["Tsogo"] = "tsv",
["Tsonga"] = "ts",
["Tsotsitaal"] = "fly",
["Tsou"] = "tsu",
["Tsucuba"] = "cbq",
["Tsum"] = "ttz",
["Tsuut'ina"] = "srs",
["Tsuvadi"] = "tvd",
["Tsuvan"] = "tsh",
["Tswa"] = "tsc",
["Tswana"] = "tn",
["Tswapong"] = "two",
["Tuamotuan"] = "pmt",
["Tuareg"] = "tmh",
["Tubar"] = "tbu",
["Tucano"] = "tuo",
["Tugen"] = "tuy",
["Tugun"] = "tzn",
["Tugutil"] = "tuj",
["Tuki"] = "bag",
["Tukpa"] = "tpq",
["Tukudede"] = "tkd",
["Tukumanféd"] = "tkf",
["Tula"] = "tul",
["Tule-Kaweah Yokuts"] = "yok-tky",
["Tulehu"] = "tlu",
["Tulishi"] = "tey",
["Tulu"] = "tcy",
["Tulu-Bohuai"] = "rak",
["Tulua"] = "aus-tul",
["Tuma-Irumu"] = "iou",
["Tumak"] = "tmc",
["Tumbuka"] = "tum",
["Tumi"] = "kku",
["Tumleo"] = "tmq",
["Tumshuqese"] = "xtq",
["Tumtum"] = "tbr",
["Tumulung Sisaala"] = "sil",
["Tundra Enets"] = "enh",
["Tundra Nenets"] = "yrk-tun",
["Tunen"] = "tvu",
["Tungag"] = "lcm",
["Tunggare"] = "trt",
["Tunia"] = "tug",
["Tunica"] = "tun",
["Tunisian Arabic"] = "aeb",
["Tunisian Berber"] = "sds",
["Tunisian Sign Language"] = "tse",
["Tunjung"] = "tjg",
["Tunni"] = "tqq",
["Tunumiisut"] = "esx-tut",
["Tunzu"] = "dza",
["Tuoba"] = "mis-tuo",
["Tuotomb"] = "ttf",
["Tuparí"] = "tpr",
["Tupinambá"] = "tpn",
["Tupinikin"] = "tpk",
["Tupuri"] = "tui",
["Turaka"] = "trh",
["Turdetanian"] = "mis-tdt",
["Turdulian"] = "mis-tdl",
["Turi"] = "trd",
["Turiwára"] = "twt",
["Turka"] = "tuz",
["Turkana"] = "tuv",
["Turkish"] = "tr",
["Turkish Sign Language"] = "tsm",
["Turkmen"] = "tk",
["Turks and Caicos Creole English"] = "tch",
["Turoyo"] = "tru",
["Turumsa"] = "tqm",
["Turung"] = "try",
["Tuscarora"] = "tus",
["Tutelo"] = "tta",
["Tutong"] = "ttg",
["Tutsa Naga"] = "tvt",
["Tutuba"] = "tmi",
["Tututepec Mixtec"] = "mtu",
["Tututni"] = "tuu",
["Tuvaluan"] = "tvl",
["Tuvan"] = "tyv",
["Tuwali Ifugao"] = "ifk",
["Tuwari"] = "tww",
["Tuwuli"] = "bov",
["Tuxináwa"] = "tux",
["Tuxá"] = "tud",
["Tuyuca"] = "tue",
["Tuyuhun"] = "mis-tuh",
["Twana"] = "twa",
["Twendi"] = "twn",
["Tyap"] = "kcg",
["Tyaraity"] = "woa",
["Tyerrernotepanner"] = "xph",
["Tz'utujil"] = "tzj",
["Tzeltal"] = "tzh",
["Tzotzil"] = "tzo",
["Tày"] = "tyz",
["Tày Tac"] = "tyt",
["Tây Bồi"] = "tas",
["Téén"] = "lor",
["Tübatulabal"] = "tub",
["U"] = "uuu",
["Uab Meto"] = "aoz",
["Uamué"] = "uam",
["Uare"] = "ksj",
["Ubaghara"] = "byc",
["Ubang"] = "uba",
["Ubi"] = "ubi",
["Ubir"] = "ubr",
["Ubykh"] = "uby",
["Ucayali-Yurúa Ashéninka"] = "cpb",
["Uda"] = "uda",
["Udi"] = "udi",
["Udihe"] = "ude",
["Udmurt"] = "udm",
["Uduk"] = "udu",
["Ufim"] = "ufi",
["Ugandan Sign Language"] = "ugn",
["Ugaritic"] = "uga",
["Ughele"] = "uge",
["Uhami"] = "uha",
["Uisai"] = "uis",
["Ujir"] = "udj",
["Ukaan"] = "kcf",
["Ukhwejo"] = "ukh",
["Ukit"] = "umi",
["Ukpe-Bayobiri"] = "ukp",
["Ukpet-Ehom"] = "akd",
["Ukrainian"] = "uk",
["Ukrainian Sign Language"] = "ukl",
["Ukue"] = "uku",
["Ukuriguma"] = "ukg",
["Ukwa"] = "ukq",
["Ukwuani-Aboh-Ndoni"] = "ukw",
["Ulau-Suain"] = "svb",
["Ulch"] = "ulc",
["Uldeme"] = "udl",
["Ulithian"] = "uli",
["Ullatan"] = "ull",
["Ulumanda'"] = "ulm",
["Ulwa (New Guinea)"] = "yla",
["Ulwa (Nicaragua)"] = "ulw",
["Uma"] = "ppk",
["Uma' Lasan"] = "xky",
["Uma' Lung"] = "ulu",
["Umanakaina"] = "gdn",
["Umatilla"] = "uma",
["Umbindhamu"] = "umd",
["Umbrian"] = "xum",
["Umbu-Ungu"] = "ubu",
["Umbugarla"] = "umr",
["Umbundu"] = "umb",
["Umbuygamu"] = "umg",
["Ume Sami"] = "sju",
["Umeda"] = "upi",
["Umiida"] = "xud",
["Umiray Dumaget Agta"] = "due",
["Umon"] = "umm",
["Umotína"] = "umo",
["Umpila"] = "ump",
["Una"] = "mtg",
["Unami"] = "unm",
["Unde Kaili"] = "unz",
["Undetermined"] = "und",
["Uneapa"] = "bbn",
["Uneme"] = "une",
["Unggaranggu"] = "xun",
["Unggumi"] = "xgu",
["Uni"] = "uni",
["Unserdeutsch"] = "uln",
["Unua"] = "onu",
["Unubahe"] = "unu",
["Uokha"] = "uok",
["Upper Chehalis"] = "cjh",
["Upper Grand Valley Dani"] = "dna",
["Upper Kinabatangan"] = "dmg",
["Upper Kuskokwim"] = "kuu",
["Upper Mandobo"] = "aax",
["Upper Necaxa Totonac"] = "tku",
["Upper Sorbian"] = "hsb",
["Upper Ta'oih"] = "tth",
["Upper Tanana"] = "tau",
["Upper Taromi"] = "tov",
["Upper Umpqua"] = "xup",
["Ura (New Guinea)"] = "uro",
["Ura (Vanuatu)"] = "uur",
["Uradhi"] = "urf",
["Urak Lawoi'"] = "urk",
["Urali"] = "url",
["Urapmin"] = "urm",
["Urarina"] = "ura",
["Urartian"] = "xur",
["Urat"] = "urt",
["Urdu"] = "ur",
["Urhobo"] = "urh",
["Uri"] = "uvh",
["Urigina"] = "urg",
["Urim"] = "uri",
["Urimo"] = "urx",
["Urningangg"] = "urc",
["Uru"] = "ure",
["Uru-Eu-Wau-Wau"] = "urz",
["Uru-Pa-In"] = "urp",
["Uruangnirin"] = "urn",
["Uruava"] = "urv",
["Urubú-Kaapor"] = "urb",
["Uruguayan Sign Language"] = "ugy",
["Urum"] = "uum",
["Urumi"] = "uru",
["Usaghade"] = "usk",
["Usan"] = "wnu",
["Usarufa"] = "usa",
["Ushojo"] = "ush",
["Usila Chinantec"] = "cuc",
["Uspanteco"] = "usp",
["Usui"] = "usi",
["Utarmbung"] = "omo",
["Ute"] = "ute",
["Utu"] = "utu",
["Uvbie"] = "evh",
["Uwinymil"] = "aus-uwi",
["Uya"] = "usu",
["Uyajitaya"] = "duk",
["Uyghur"] = "ug",
["Uzbek"] = "uz",
["Uzbeki Arabic"] = "auz",
["Uzekwe"] = "eze",
["Vaagri Booli"] = "vaa",
["Vaghri"] = "vgr",
["Vaghua"] = "tva",
["Vagla"] = "vag",
["Vai"] = "vai",
["Vaiphei"] = "vap",
["Vale"] = "vae",
["Valencian Sign Language"] = "vsv",
["Valle Nacional Chinantec"] = "cvn",
["Valley Maidu"] = "vmv",
["Valman"] = "van",
["Valpei"] = "vlp",
["Vamale"] = "mkt",
["Vame"] = "mlr",
["Vandalic"] = "xvn",
["Vangunu"] = "mpr",
["Vanimo"] = "vam",
["Vanji"] = "ira-wnj",
["Vanuma"] = "vau",
["Vao"] = "vao",
["Varhadi"] = "vah",
["Varisi"] = "vrs",
["Varli"] = "vav",
["Vasavi"] = "vas",
["Vayu"] = "vay",
["Veddah"] = "ved",
["Vehes"] = "val",
["Vemgo-Mabas"] = "vem",
["Venda"] = "ve",
["Venetan"] = "vec",
["Venetic"] = "xve",
["Venezuelan Sign Language"] = "vsl",
["Ventureño"] = "veo",
["Veps"] = "vep",
["Vera'a"] = "vra",
["Vestinian"] = "xvs",
["Vidunda"] = "vid",
["Viemo"] = "vig",
["Vietnamese"] = "vi",
["Vilamovian"] = "wym",
["Vilela"] = "vil",
["Vili"] = "vif",
["Vincentian Creole English"] = "svc",
["Vinitiri"] = "vmg",
["Virgin Islands Creole"] = "vic",
["Vishavan"] = "vis",
["Viti"] = "vit",
["Vitou"] = "vto",
["Viya"] = "gev",
["Vlax Romani"] = "rmy",
["Volapük"] = "vo",
["Volga German"] = "gmw-vog",
["Volscian"] = "xvo",
["Vono"] = "kch",
["Voro"] = "vor",
["Votic"] = "vot",
["Vumbu"] = "vum",
["Vunapu"] = "vnp",
["Vunjo"] = "vun",
["Vurës"] = "msn",
["Vute"] = "vut",
["Võro"] = "vro",
["Wa"] = "wbm",
["Wa'ema"] = "wag",
["Waama"] = "wwa",
["Waamwang"] = "wmn",
["Wab"] = "wab",
["Wabo"] = "wbb",
["Waboda"] = "kmx",
["Waci Gbe"] = "wci",
["Wadaginam"] = "wdg",
["Waddar"] = "wbq",
["Wadi Wadi"] = "xwd",
["Wadiyara Koli"] = "kxp",
["Wadjabangayi"] = "wdy",
["Wadjiginy"] = "wdj",
["Wadjigu"] = "wdu",
["Wae Rana"] = "wrx",
["Waffa"] = "waj",
["Wagawaga"] = "wgb",
["Wagaya"] = "wga",
["Wagdi"] = "wbr",
["Wageman"] = "waq",
["Wagi"] = "fad",
["Wahau Kayan"] = "whu",
["Wahau Kenyah"] = "whk",
["Wahgi"] = "wgi",
["Waigali"] = "wbk",
["Waigeo"] = "wgo",
["Waikuri"] = "nai-wai",
["Wailaki"] = "wlk",
["Wailapa"] = "wlr",
["Waima'a"] = "wmh",
["Waimaha"] = "bao",
["Waimiri-Atroari"] = "atr",
["Wainumá"] = "awd-wai",
["Waioli"] = "wli",
["Waitaká"] = "sai-wai",
["Waiwai"] = "waw",
["Waja"] = "wja",
["Wajarri"] = "wbv",
["Wajuk"] = "xwj",
["Waka"] = "wav",
["Wakawaka"] = "wkw",
["Wakhi"] = "wbl",
["Wakoná"] = "waf",
["Wala"] = "lgl",
["Walak"] = "wlw",
["Walangama"] = "nlw",
["Wali (Ghana)"] = "wlx",
["Wali (Sudan)"] = "wll",
["Waling"] = "wly",
["Walio"] = "wla",
["Walla Walla"] = "waa",
["Wallisian"] = "wls",
["Walloon"] = "wa",
["Walmajarri"] = "wmt",
["Wam"] = "wmo",
["Wamas"] = "wmc",
["Wambaya"] = "wmb",
["Wambon"] = "wms",
["Wambule"] = "wme",
["Wamey"] = "cou",
["Wamin"] = "wmi",
["Wampar"] = "lbq",
["Wampur"] = "waz",
["Wan"] = "wan",
["Wanap"] = "wnp",
["Wancho"] = "nnp",
["Wanda"] = "wbh",
["Wandala"] = "mfi",
["Wandamen"] = "wad",
["Wandarang"] = "wnd",
["Wandji"] = "wdd",
["Waneci"] = "wne",
["Wanga"] = "lwg",
["Wanggamala"] = "wnm",
["Wangganguru"] = "wgg",
["Wanggom"] = "wng",
["Wangkayutyuru"] = "wky",
["Wangkumara"] = "xwk",
["Wanham"] = "sai-wnm",
["Wanji"] = "wbi",
["Wanman"] = "wbt",
["Wannu"] = "jub",
["Wano"] = "wno",
["Wantoat"] = "wnc",
["Wanukaka"] = "wnk",
["Wanyi"] = "wny",
["Wané"] = "hwa",
["Wapan"] = "juk",
["Wapishana"] = "wap",
["Wappo"] = "wao",
["War-Jaintia"] = "aml",
["Wara"] = "wbf",
["Warao"] = "wba",
["Warapu"] = "wra",
["Waray Sorsogon"] = "srv",
["Waray-Waray"] = "war",
["Wardaman"] = "wrr",
["Wardandi"] = "wxw",
["Warekena"] = "gae",
["Warembori"] = "wsa",
["Wari'"] = "pav",
["Waris"] = "wrs",
["Waritai"] = "wbe",
["Wariyangga"] = "wri",
["Warji"] = "wji",
["Warkay-Bipim"] = "bgv",
["Warlmanpa"] = "wrl",
["Warlpiri"] = "wbp",
["Warluwara"] = "wrb",
["Warnang"] = "wrn",
["Waropen"] = "wrp",
["Warray"] = "wrz",
["Warrgamay"] = "wgy",
["Warrwa"] = "wwr",
["Waru"] = "wru",
["Warumungu"] = "wrm",
["Waruna"] = "wrv",
["Warungu"] = "wrg",
["Warwar Feni"] = "hrw",
["Wasco-Wishram"] = "wac",
["Wasembo"] = "gsp",
["Washo"] = "was",
["Waskia"] = "wsk",
["Wastek"] = "hus",
["Wasu"] = "wsu",
["Watakataui"] = "wtk",
["Watam"] = "wax",
["Wathaurong"] = "wth",
["Watiwa"] = "wtf",
["Watubela"] = "wah",
["Waube"] = "kop",
["Wauja"] = "wau",
["Wauyai"] = "wuy",
["Wawa"] = "www",
["Wawonii"] = "wow",
["Waxiang"] = "wxa",
["Wayampi"] = "oym",
["Wayana"] = "way",
["Wayanad Chetti"] = "ctt",
["Wayoró"] = "wyr",
["Wayumara"] = "sai-way",
["Wayuu"] = "guc",
["Wedau"] = "wed",
["Weh"] = "weh",
["Welaung"] = "weu",
["Weliki"] = "klh",
["Welsh"] = "cy",
["Welsh Romani"] = "rmw",
["Wemale"] = "weo",
["Wemba-Wemba"] = "xww",
["Weme Gbe"] = "wem",
["Wendat"] = "wdt",
["Weri"] = "wer",
["Wersing"] = "kvw",
["West Ambae"] = "nnd",
["West Central Banda"] = "bbp",
["West Circassian"] = "ady",
["West Coast Bajau"] = "bdr",
["West Damar"] = "drn",
["West Flemish"] = "vls",
["West Frisian"] = "fy",
["West Greenlandic Pidgin"] = "crp-gep",
["West Lembata"] = "lmj",
["West Makian"] = "mqs",
["West Masela"] = "mss",
["West Miraya Bikol"] = "fbl",
["West Tarangan"] = "txn",
["West Uvean"] = "uve",
["West-Central Limba"] = "lia",
["Western Apache"] = "apw",
["Western Arrernte"] = "are",
["Western Bolivian Guarani"] = "gnw",
["Western Bru"] = "brv",
["Western Bukidnon Manobo"] = "mbb",
["Western Cham"] = "cja",
["Western Dani"] = "dnw",
["Western Durango Nahuatl"] = "azn",
["Western Fijian"] = "wyy",
["Western Highland Chatino"] = "ctp",
["Western Huasteca Nahuatl"] = "nhw",
["Western Jicaque"] = "nai-wji",
["Western Juxtlahuaca Mixtec"] = "jmx",
["Western Karaboro"] = "kza",
["Western Katu"] = "kuf",
["Western Kayah"] = "kyu",
["Western Keres"] = "kjq",
["Western Krahn"] = "krw",
["Western Lalu"] = "ywl",
["Western Lawa"] = "lcp",
["Western Magar"] = "mrd",
["Western Maninkakan"] = "mlq",
["Western Mari"] = "mrj",
["Western Mashan Hmong"] = "hmw",
["Western Meohang"] = "raf",
["Western Muria"] = "mut",
["Western Neo-Aramaic"] = "amw",
["Western Ojibwa"] = "ojw",
["Western Parbate Kham"] = "kjl",
["Western Penan"] = "pne",
["Western Pwo"] = "pwo",
["Western Sisaala"] = "ssl",
["Western Subanon"] = "suc",
["Western Tamang"] = "tdg",
["Western Tawbuid"] = "twb",
["Western Totonac"] = "tqt",
["Western Tunebo"] = "tnb",
["Western Xiangxi Miao"] = "mmr",
["Western Xwla Gbe"] = "xwl",
["Western Yugur"] = "ybe",
["Wewaw"] = "wea",
["Weyewa"] = "wew",
["Weyto"] = "woy",
["White Gelao"] = "giw",
["White Hmong"] = "mww",
["White Lachi"] = "lwh",
["Whitesands"] = "tnp",
["Wiarumus"] = "tua",
["Wichita"] = "wic",
["Wichí Lhamtés Güisnay"] = "mzh",
["Wichí Lhamtés Nocten"] = "mtp",
["Wichí Lhamtés Vejoz"] = "wlv",
["Wik-Epa"] = "wie",
["Wik-Iiyanh"] = "wij",
["Wik-Keyangan"] = "wif",
["Wik-Me'anha"] = "wih",
["Wik-Mungkan"] = "wim",
["Wik-Ngathana"] = "wig",
["Wikalkan"] = "wik",
["Wikngenchera"] = "wua",
["Wilawila"] = "wil",
["Winnebago"] = "win",
["Wintu"] = "wnw",
["Winyé"] = "kst",
["Wipi"] = "gdr",
["Wiradjuri"] = "wrh",
["Wiraféd"] = "wir",
["Wirangu"] = "wgu",
["Wiru"] = "wiu",
["Wirö"] = "wpc",
["Wiwa"] = "mbp",
["Wiyot"] = "wiy",
["Wobé"] = "wob",
["Woccon"] = "xwc",
["Wogamusin"] = "wog",
["Wogeo"] = "woc",
["Woi"] = "wbw",
["Woiwurrung"] = "wyi",
["Wojenaka"] = "jod",
["Wolane"] = "wle",
["Wolani"] = "wod",
["Wolaytta"] = "wal",
["Woleaian"] = "woe",
["Wolio"] = "wlo",
["Wolof"] = "wo",
["Womo"] = "wmx",
["Wong-gie"] = "aus-won",
["Wongo"] = "won",
["Woods Cree"] = "cwd",
["Woria"] = "wor",
["Worimi"] = "kda",
["Worodougou"] = "jud",
["Worora"] = "wro",
["Wotapuri-Katarqalai"] = "wsv",
["Wotu"] = "wtw",
["Woun Meu"] = "noa",
["Written Oirat"] = "xwo",
["Wu"] = "wuu",
["Wudu"] = "wud",
["Wuhuan"] = "mis-wuh",
["Wulguru"] = "aus-wul",
["Wuliwuli"] = "wlu",
["Wulna"] = "wux",
["Wumboko"] = "bqm",
["Wumbvu"] = "wum",
["Wumeng"] = "ywu",
["Wunai Bunu"] = "bwn",
["Wunambal"] = "wub",
["Wurrugu"] = "wur",
["Wusa"] = "yig",
["Wushi"] = "bse",
["Wusi"] = "wsi",
["Wutung"] = "wut",
["Wutunhua"] = "wuh",
["Wuvulu-Aua"] = "wuv",
["Wyandot"] = "wya",
["Wára"] = "tci",
["Wãpha"] = "juw",
["Wè Southern"] = "gxx",
["Wè Western"] = "wec",
["Xadani Zapotec"] = "zax",
["Xakriabá"] = "xkr",
["Xamtanga"] = "xan",
["Xanaguía Zapotec"] = "ztg",
["Xavante"] = "xav",
["Xerénte"] = "xer",
["Xetá"] = "xet",
["Xhosa"] = "xh",
["Xianbei"] = "mis-xbi",
["Xiang"] = "hsn",
["Xibe"] = "sjo",
["Xicotepec de Juárez Totonac"] = "too",
["Xinca"] = "xin",
["Xingú Asuriní"] = "asn",
["Xiongnu"] = "mis-xnu",
["Xipaya"] = "xiy",
["Xiri"] = "xii",
["Xiriâna"] = "xir",
["Xishanba Lalo"] = "ywt",
["Xocó"] = "sai-xoc",
["Xokleng"] = "xok",
["Xukurú"] = "xoo",
["Xwela Gbe"] = "xwe",
["Xârâcùù"] = "ane",
["Xârâgurè"] = "axx",
["Yaa"] = "iyx",
["Yaaku"] = "muu",
["Yabarana"] = "yar",
["Yabaâna"] = "ybn",
["Yaben"] = "ybm",
["Yabong"] = "ybo",
["Yabula Yabula"] = "yxy",
["Yace"] = "ekr",
["Yaeyama"] = "rys",
["Yafi"] = "wfg",
["Yagara"] = "yxg",
["Yagaria"] = "ygr",
["Yaghnobi"] = "yai",
["Yagomi"] = "ygm",
["Yagua"] = "yad",
["Yagwoia"] = "ygw",
["Yahadian"] = "ner",
["Yahang"] = "rhp",
["Yahuna"] = "ynu",
["Yaka"] = "yaf",
["Yakaikeke"] = "ykk",
["Yakan"] = "yka",
["Yakima"] = "yak",
["Yakkha"] = "ybh",
["Yakoma"] = "yky",
["Yakut"] = "sah",
["Yala"] = "yba",
["Yalahatan"] = "jal",
["Yalakalore"] = "xyl",
["Yalarnnga"] = "ylr",
["Yale"] = "nce",
["Yaleba"] = "ylb",
["Yalunka"] = "yal",
["Yalálag Zapotec"] = "zpu",
["Yamap"] = "ymp",
["Yamba"] = "yam",
["Yamben"] = "ynb",
["Yambes"] = "ymb",
["Yambeta"] = "yat",
["Yamdena"] = "jmd",
["Yameo"] = "yme",
["Yami"] = "tao",
["Yaminahua"] = "yaa",
["Yamongeri"] = "ymg",
["Yamphu"] = "ybi",
["Yan-nhangu"] = "jay",
["Yana"] = "ynn",
["Yanda"] = "yda",
["Yanda Dogon"] = "dym",
["Yandjibara"] = "xyb",
["Yandruwandha"] = "ynd",
["Yanesha'"] = "ame",
["Yangben"] = "yav",
["Yangkaal"] = "aus-ynk",
["Yangkam"] = "bsx",
["Yangman"] = "jng",
["Yango"] = "yng",
["Yangulam"] = "ynl",
["Yangum Dey"] = "yde",
["Yangum Gel"] = "ygl",
["Yangum Mon"] = "ymo",
["Yankunytjatjara"] = "kdd",
["Yanomam"] = "wca",
["Yanomamö"] = "guu",
["Yansi"] = "yns",
["Yanyuwa"] = "jao",
["Yao (Africa)"] = "yao",
["Yao (South America)"] = "sai-yao",
["Yaosakor Asmat"] = "asy",
["Yaouré"] = "yre",
["Yapese"] = "yap",
["Yaqay"] = "jaq",
["Yaqui"] = "yaq",
["Yarawata"] = "yrw",
["Yareba"] = "yrb",
["Yareni Zapotec"] = "zae",
["Yarli"] = "yxl",
["Yarluyandi"] = "yry",
["Yarumá"] = "sai-yar",
["Yarí"] = "yri",
["Yasa"] = "yko",
["Yatay"] = "yty",
["Yatee Zapotec"] = "zty",
["Yatzachi Zapotec"] = "zav",
["Yau (Finisterre)"] = "yuw",
["Yau (Torricelli)"] = "yyu",
["Yaur"] = "jau",
["Yautepec Zapotec"] = "zpb",
["Yavitero"] = "yvt",
["Yawa"] = "yva",
["Yawalapití"] = "yaw",
["Yawanawa"] = "ywn",
["Yawarawarga"] = "yww",
["Yaweyuha"] = "yby",
["Yawijibaya"] = "jbw",
["Yawiyo"] = "ybx",
["Yawuru"] = "ywr",
["Yaygir"] = "xya",
["Yazghulami"] = "yah",
["Ye'kwana"] = "mch",
["Yei"] = "jei",
["Yekhee"] = "ets",
["Yekora"] = "ykr",
["Yele"] = "yle",
["Yelmek"] = "jel",
["Yelogu"] = "ylg",
["Yemaek"] = "hmk",
["Yemba"] = "ybb",
["Yemeni Arabic"] = "ayn",
["Yemsa"] = "jnj",
["Yendang"] = "yen",
["Yeni"] = "yei",
["Yenish"] = "yec",
["Yerakai"] = "yra",
["Yeretuar"] = "gop",
["Yeri"] = "yev",
["Yerong"] = "yrn",
["Yerukula"] = "yeu",
["Yeskwa"] = "yes",
["Yessan-Mayo"] = "yss",
["Yetfa"] = "yet",
["Yevanic"] = "yej",
["Yeyi"] = "yey",
["Yiddish"] = "yi",
["Yidgha"] = "ydg",
["Yidiny"] = "yii",
["Yil"] = "yll",
["Yilan Creole"] = "ycr",
["Yimas"] = "yee",
["Yimchungru Naga"] = "yim",
["Yinbaw Karen"] = "kvu",
["Yinchia"] = "yin",
["Yindjibarndi"] = "yij",
["Yindjilandji"] = "yil",
["Yine"] = "pib",
["Yinggarda"] = "yia",
["Yinhawangka"] = "ywg",
["Yiningayi"] = "ygi",
["Yintale Karen"] = "kvy",
["Yinwum"] = "yxm",
["Yir-Yoront"] = "yiy",
["Yirandali"] = "ljw",
["Yis"] = "yis",
["Yitha Yitha"] = "xth",
["Yoba"] = "yob",
["Yocoboué Dida"] = "gud",
["Yogad"] = "yog",
["Yoidik"] = "ydk",
["Yoke"] = "yki",
["Yola"] = "yol",
["Yolmo"] = "scp",
["Yolngu Sign Language"] = "ygs",
["Yoloxochitl Mixtec"] = "xty",
["Yom"] = "pil",
["Yombe"] = "yom",
["Yonaguni"] = "yoi",
["Yong"] = "yno",
["Yongkom"] = "yon",
["Yopno"] = "yut",
["Yora"] = "mts",
["Yoron"] = "yox",
["Yorta Yorta"] = "xyy",
["Yoruba"] = "yo",
["Yosondúa Mixtec"] = "mpm",
["Youle Jino"] = "jiu",
["Younuo Bunu"] = "buh",
["Yout Wam"] = "ytw",
["Yoy"] = "yoy",
["Yuanga"] = "nua",
["Yucatec Maya"] = "yua",
["Yucatec Maya Sign Language"] = "msd",
["Yuchi"] = "yuc",
["Yucuañe Mixtec"] = "mvg",
["Yucuna"] = "ycn",
["Yug"] = "yug",
["Yugambal"] = "yub",
["Yugoslavian Sign Language"] = "ysl",
["Yugul"] = "ygu",
["Yuhup"] = "yab",
["Yuki"] = "yuk",
["Yukpa"] = "yup",
["Yukuben"] = "ybl",
["Yulu"] = "yul",
["Yuma"] = "yum",
["Yumana"] = "awd-yum",
["Yup'ik"] = "esu",
["Yupiltepeque"] = "nai-yup",
["Yupua"] = "sai-yup",
["Yuqui"] = "yuq",
["Yuracare"] = "yuz",
["Yuri"] = "sai-yri",
["Yurok"] = "yur",
["Yuru"] = "ljx",
["Yurumanguí"] = "sai-yur",
["Yurutí"] = "yui",
["Yutanduchi Mixtec"] = "mab",
["Yuwana"] = "yau",
["Yuyu"] = "yxu",
["Yámana"] = "yag",
["Zaachila Zapotec"] = "ztx",
["Zabana"] = "kji",
["Zacatepec Chatino"] = "ctz",
["Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"] = "nhi",
["Zaghawa"] = "zag",
["Zaiwa"] = "atb",
["Zakhring"] = "zkr",
["Zambian Sign Language"] = "zsl",
["Zan Gula"] = "zna",
["Zanaki"] = "zak",
["Zande"] = "zne",
["Zangskari"] = "zau",
["Zangwal"] = "zah",
["Zaniza Zapotec"] = "zpw",
["Zapotec"] = "zap",
["Zaramo"] = "zaj",
["Zari"] = "zaz",
["Zarma"] = "dje",
["Zauzou"] = "zal",
["Zay"] = "zwa",
["Zayein Karen"] = "kxk",
["Zayse-Zergulla"] = "zay",
["Zazaki"] = "zza",
["Zazao"] = "jaj",
["Zbu"] = "sit-zbu",
["Zealandic"] = "zea",
["Zeem"] = "zua",
["Zemba"] = "dhm",
["Zeme Naga"] = "nzm",
["Zenag"] = "zeg",
["Zenaga"] = "zen",
["Zenzontepec Chatino"] = "czn",
["Zhaba"] = "zhb",
["Zhang-Zhung"] = "xzh",
["Zhenan Min"] = "nan-zhe",
["Zhire"] = "zhi",
["Zhoa"] = "zhw",
["Zhuang"] = "za",
["Zhár"] = "jjr",
["Zia"] = "zia",
["Zialo"] = "zil",
["Zigula"] = "ziw",
["Zimakani"] = "zik",
["Zimba"] = "zmb",
["Zimbabwe Sign Language"] = "zib",
["Zinza"] = "zin",
["Zipser German"] = "gmw-zps",
["Zirenkel"] = "zrn",
["Ziriya"] = "zir",
["Zizilivakan"] = "ziz",
["Zo'é"] = "pto",
["Zokhuo"] = "yzk",
["Zoogocho Zapotec"] = "zpq",
["Zotung Chin"] = "czt",
["Zou"] = "zom",
["Zulgo-Gemzek"] = "gnd",
["Zulu"] = "zu",
["Zumaya"] = "zuy",
["Zumbun"] = "jmb",
["Zuni"] = "zun",
["Zuojiang Zhuang"] = "zzj",
["Zuwara"] = "ber-zuw",
["Zyphe"] = "zyp",
["Záparo"] = "zro",
["Àhàn"] = "ahn",
["Áncá"] = "acb",
["Äiwoo"] = "nfl",
["Äynu"] = "aib",
["Ömie"] = "aom",
["Önge"] = "oon",
["ǀXam"] = "xam",
["ǁAni"] = "hnh",
["ǁGana"] = "gnk",
["ǁXegwi"] = "xeg",
["ǂHoan"] = "huc",
["ǃKung"] = "khi-kun",
["ǃXóõ"] = "nmn",
["Ỹaroamë"] = "yro",
}
0qknd7e2019sqh76vi8ctj5b2dznpqb
Mòideal:languages/canonical names.json
828
16832
86370
2026-07-23T01:29:35Z
Altronic
4137
Copy from English Wiktionary
86370
json
application/json
{
"'Are'are": "alu",
"A'ou": "aou",
"A-Hmao": "hmd",
"A-Pucikwar": "apq",
"Aari": "aiw",
"Aasax": "aas",
"Aba": "utp",
"Abaga": "abg",
"Abai": "poz-abi",
"Abai Sungai": "abf",
"Abanyom": "abm",
"Abau": "aau",
"Abaza": "abq",
"Abenaki": "abe",
"Abenlen Ayta": "abp",
"Abidji": "abi",
"Abinomn": "bsa",
"Abipón": "axb",
"Abishira": "ash",
"Abkhaz": "ab",
"Abom": "aob",
"Abon": "abo",
"Aborlan Tagbanwa": "tbw",
"Abu": "ado",
"Abu'": "aah",
"Abua": "abn",
"Abui": "abz",
"Abun": "kgr",
"Abung": "abl",
"Abure": "abu",
"Abureni": "mgj",
"Abé": "aba",
"Acatepec Me'phaa": "tpx",
"Acehnese": "ace",
"Achagua": "aca",
"Achang": "acn",
"Ache": "yif",
"Acheron": "acz",
"Achi": "acr",
"Acholi": "ach",
"Achuar": "acu",
"Achumawi": "acv",
"Aché": "guq",
"Acroá": "acs",
"Adai": "xad",
"Adamorobe Sign Language": "ads",
"Adang": "adn",
"Adangbe": "adq",
"Adangme": "ada",
"Adap": "adp",
"Adasen": "tiu",
"Adele": "ade",
"Adhola": "adh",
"Adi": "adi",
"Adioukrou": "adj",
"Adithinngithigh": "dth",
"Adivasi Odia": "ort",
"Adiwasi Garasia": "gas",
"Adnyamathanha": "adt",
"Adonara": "adr",
"Aduge": "adu",
"Adzera": "adz",
"Adûni": "art-adu",
"Aeka": "aez",
"Aekyom": "awi",
"Aequian": "xae",
"Aer": "aeq",
"Afade": "aal",
"Afar": "aa",
"Afghan Sign Language": "afg",
"Afitti": "aft",
"Afra": "ulf",
"Afrihili": "afh",
"Afrikaans": "af",
"Afro-Seminole Creole": "afs",
"Agarabi": "agd",
"Agariya": "agi",
"Agatu": "agc",
"Agavotaguerra": "avo",
"Agawam": "alg-aga",
"Aghem": "agq",
"Aghu": "ahh",
"Aghu Tharrnggala": "gtu",
"Aghul": "agx",
"Aghwan": "xag",
"Agi": "aif",
"Agob": "kit",
"Agoi": "ibm",
"Aguacateca": "agu",
"Aguano": "aga",
"Aguaruna": "agr",
"Aguna": "aug",
"Agusan Manobo": "msm",
"Agutaynen": "agn",
"Agwagwune": "yay",
"Ahanta": "aha",
"Ahirani": "ahr",
"Ahom": "aho",
"Ahtna": "aht",
"Ahwai": "nfd",
"Ai-Cham": "aih",
"Aighon": "aix",
"Aikanã": "tba",
"Aiklep": "mwg",
"Aimele": "ail",
"Aimol": "aim",
"Ainbai": "aic",
"Ainu": "ain",
"Aiome": "aki",
"Airoran": "air",
"Aisi": "mmq",
"Aiton": "aio",
"Aja (East Africa)": "aja",
"Aja (West Africa)": "ajg",
"Ajawa": "ajw",
"Ajië": "aji",
"Ak": "akq",
"Aka (Central Africa)": "axk",
"Aka (Sudan)": "soh",
"Aka-Bea": "abj",
"Aka-Bo": "akm",
"Aka-Cari": "aci",
"Aka-Kede": "akx",
"Aka-Kol": "aky",
"Aka-Kora": "ack",
"Akan": "ak",
"Akar-Bale": "acl",
"Akaselem": "aks",
"Akatek": "knj",
"Akawaio": "ake",
"Ake": "aik",
"Akebu": "keu",
"Akei": "tsr",
"Akeu": "aeu",
"Akha": "ahk",
"Akhvakh": "akv",
"Akkadian": "akk",
"Akkala Sami": "sia",
"Aklanon": "akl",
"Akolet": "akt",
"Akoose": "bss",
"Akoye": "miw",
"Akpa": "akf",
"Akpes": "ibe",
"Akrukay": "afi",
"Akuku": "ayk",
"Akum": "aku",
"Akuntsu": "aqz",
"Akurio": "ako",
"Akwa": "akw",
"Akyaung Ari": "nqy",
"Al-Sayyid Bedouin Sign Language": "syy",
"Alaba": "alw",
"Alabama": "akz",
"Alabat Island Agta": "dul",
"Alacatlatzala Mixtec": "mim",
"Alago": "ala",
"Alagwa": "wbj",
"Alak": "alk",
"Alamblak": "amp",
"Alangan": "alj",
"Alanic": "xln",
"Alapmunte": "apv",
"Alas-Kluet Batak": "btz",
"Alawa": "alh",
"Alazapa": "nai-ala",
"Albanian": "sq",
"Albanian Sign Language": "sqk",
"Alchuka": "tuw-alk",
"Alcozauca Mixtec": "xta",
"Alege": "alf",
"Alekano": "gah",
"Alemannic German": "gsw",
"Aleut": "ale",
"Algerian Arabic": "arq",
"Algerian Sign Language": "asp",
"Algonquin": "alq",
"Ali": "aiy",
"Alladian": "ald",
"Allar": "all",
"Allentiac": "sai-all",
"Alngith": "aid",
"Alo Phola": "ypo",
"Alorese": "aol",
"Aloápam Zapotec": "zaq",
"Alsea": "aes",
"Alu": "mte",
"Alu Kurumba": "xua",
"Alugu": "aub",
"Alumu-Tesu": "aab",
"Alune": "alp",
"Alungul": "aus-alu",
"Aluo": "yna",
"Alur": "alz",
"Alutiiq": "ems",
"Alutor": "alr",
"Alviri-Vidari": "avd",
"Alyawarr": "aly",
"Ama": "amm",
"Amahai": "amq",
"Amahuaca": "amc",
"Amaimon": "ali",
"Amal": "aad",
"Amanab": "amn",
"Amanayé": "ama",
"Amara": "aie",
"Amarakaeri": "amr",
"Amarasi": "aaz",
"Amarizana": "awd-ama",
"Amasi": "alv-ama",
"Amatlán Zapotec": "zpo",
"Amba": "rwm",
"Ambai": "amk",
"Ambakich": "aew",
"Ambala Ayta": "abc",
"Ambelau": "amv",
"Ambele": "ael",
"Amblong": "alm",
"Ambo": "amb",
"Ambonese Malay": "abs",
"Ambrak": "aag",
"Ambul": "apo",
"Ambulas": "abt",
"Amdang": "amj",
"Amele": "aey",
"American Sign Language": "ase",
"Amganad Ifugao": "ifa",
"Amharic": "am",
"Ami": "amy",
"Amis": "ami",
"Ammonite": "sem-amm",
"Amo": "amo",
"Amol": "alx",
"Amoltepec Mixtec": "mbz",
"Amondawa": "adw",
"Amorite": "sem-amo",
"Ampanang": "apg",
"Ampari Dogon": "aqd",
"Amri Karbi": "ajz",
"Amto": "amt",
"Amurdag": "amg",
"Ana Tinga Dogon": "dti",
"Anaang": "anw",
"Anakalangu": "akg",
"Anam": "pda",
"Anambé": "aan",
"Anamgura": "imi",
"Anasi": "bpo",
"Anauyá": "awd-ana",
"Ancient Greek": "grc",
"Ancient Ligurian": "xlg",
"Ancient Macedonian": "xmk",
"Ancient North Arabian": "xna",
"Ancient Zapotec": "xzp",
"Andai": "afd",
"Andajin": "ajn",
"Andalusian Arabic": "xaa",
"Andaman Creole Hindi": "hca",
"Andaqui": "ana",
"Andarum": "aod",
"Andegerebinha": "adg",
"Andh": "anr",
"Andi": "ani",
"Andio": "bzb",
"Andjingith": "aus-and",
"Andoa": "anb",
"Andoque": "ano",
"Andoquero": "sai-and",
"Andra-Hus": "anx",
"Aneityum": "aty",
"Anem": "anz",
"Aneme Wake": "aby",
"Anfillo": "myo",
"Angaataha": "agm",
"Angaité": "aqt",
"Angal": "age",
"Angal Enen": "aoe",
"Angal Heneng": "akh",
"Angami": "njm",
"Angevin": "roa-ang",
"Angguruk Yali": "yli",
"Angika": "anp",
"Angkamuthi": "avm",
"Angkola Batak": "akb",
"Angkula": "aus-ang",
"Angloromani": "rme",
"Angolar": "aoa",
"Angor": "agg",
"Angoram": "aog",
"Angosturas Tunebo": "tnd",
"Anguthimri": "awg",
"Ani Phowa": "ypn",
"Anii": "blo",
"Animere": "anf",
"Anindilyakwa": "aoi",
"Anjam": "boj",
"Ankave": "aak",
"Anmatyerre": "amx",
"Annobonese": "fab",
"Anong": "nun",
"Anor": "anj",
"Anserma": "ans",
"Ansus": "and",
"Antakarinya": "ant",
"Antigua and Barbuda Creole English": "aig",
"Antillean Creole": "gcf",
"Anu": "anl",
"Anuak": "anu",
"Anufo": "cko",
"Anuki": "aui",
"Anus": "auq",
"Anuta": "aud",
"Anyi": "any",
"Anyin Morofo": "mtb",
"Anāl": "anm",
"Aoheng": "pni",
"Aore": "aor",
"Ap Ma": "kbx",
"Apabhramsa": "inc-apa",
"Apalachee": "xap",
"Apalaí": "apy",
"Apali": "ena",
"Apasco-Apoala Mixtec": "mip",
"Apatani": "apt",
"Apiaká": "api",
"Apinayé": "apn",
"Apma": "app",
"Apolista": "awd-apo",
"Apro": "ahp",
"Apurinã": "apu",
"Apurucayali Ashéninka": "cpc",
"Aputai": "apx",
"Arabana": "ard",
"Arabela": "arl",
"Arabic": "ar",
"Aragonese": "an",
"Araki": "akr",
"Arakwal": "rkw",
"Aralle-Tabulahan": "atq",
"Aramaic": "arc",
"Arammba": "stk",
"Aranadan": "aaf",
"Aranama-Tamique": "xrt",
"Arandai": "jbj",
"Araona": "aro",
"Arapaho": "arp",
"Arapaso": "arj",
"Arara-Karo": "arr",
"Ararandewára": "xaj",
"Araweté": "awt",
"Arawum": "awm",
"Arbore": "arv",
"Archi": "aqc",
"Are": "mwc",
"Areba": "aea",
"Arem": "aem",
"Argentine Sign Language": "aed",
"Argobba": "agj",
"Arguni": "agf",
"Arhuaco": "arh",
"Arhâ": "aqr",
"Arhö": "aok",
"Ari": "aac",
"Aribwatsa": "laz",
"Aribwaung": "ylu",
"Arifama-Miniafia": "aai",
"Arigidi": "aqg",
"Arikapú": "ark",
"Arikara": "ari",
"Arikem": "ait",
"Arin": "xrn",
"Aringa": "luc",
"Armazic": "xrm",
"Armenian": "hy",
"Armenian Sign Language": "aen",
"Aromanian": "rup",
"Arop-Lokep": "apr",
"Arop-Sissano": "aps",
"Arosi": "aia",
"Arritinngithigh": "rrt",
"Arta": "atz",
"Arua": "aru",
"Aruamu": "msy",
"Aruek": "aur",
"Aruop": "lsr",
"Arutani": "atx",
"Aruá": "arx",
"Arára (Mato Grosso)": "axg",
"Arára (Pará)": "aap",
"As": "asz",
"Asaba": "seo",
"Asaro'o": "mtv",
"Ashe": "ahs",
"Ashkun": "ask",
"Asho Chin": "csh",
"Ashokan Prakrit": "inc-ash",
"Ashraaf": "cus-ash",
"Asháninka": "cni",
"Asi": "bno",
"Asilulu": "asl",
"Askopan": "eiv",
"Asoa": "asv",
"Assamese": "as",
"Assan": "xss",
"Assangori": "sjg",
"Assiniboine": "asb",
"Assyrian Neo-Aramaic": "aii",
"Asturian": "ast",
"Asu": "aum",
"Asue Awyu": "psa",
"Asumboa": "aua",
"Asunción Mixtepec Zapotec": "zoo",
"Asuri": "asr",
"Ata": "atm",
"Ata Manobo": "atd",
"Atakapa": "aqp",
"Atampaya": "amz",
"Atanques": "cba-ata",
"Atatláhuca Mixtec": "mib",
"Atauran": "adb",
"Atayal": "tay",
"Atemble": "ate",
"Ateso": "teo",
"Athpare": "aph",
"Ati": "atk",
"Atikamekw": "atj",
"Atohwaim": "aqm",
"Atong (Cameroon)": "ato",
"Atong (India)": "aot",
"Atorada": "aox",
"Atsahuaca": "atc",
"Atsam": "cch",
"Atsugewi": "atw",
"Attapady Kurumba": "pkr",
"Attié": "ati",
"Au": "avt",
"Auhelawa": "kud",
"Aukan": "djk",
"Aulua": "aul",
"Aurá": "aux",
"Aushi": "auh",
"Aushiri": "avs",
"Auslan": "asf",
"Austral": "aut",
"Australian Aboriginal Sign Language": "asw",
"Australian Kriol": "rop",
"Austrian Sign Language": "asq",
"Auwe": "smf",
"Auyana": "auy",
"Auye": "auu",
"Auyokawa": "auo",
"Avar": "av",
"Avatime": "avn",
"Avau": "avb",
"Avava": "tmb",
"Avestan": "ae",
"Avikam": "avi",
"Avokaya": "avu",
"Avá-Canoeiro": "avv",
"Awa (China)": "vwa",
"Awa (New Guinea)": "awb",
"Awa-Cuaiquer": "kwi",
"Awabakal": "awk",
"Awadhi": "awa",
"Awak": "awo",
"Awar": "aya",
"Awara": "awx",
"Awbono": "awh",
"Aweer": "bob",
"Awera": "awr",
"Awetí": "awe",
"Awing": "azo",
"Awjila": "auj",
"Awngi": "awn",
"Awngthim": "gwm",
"Awtuw": "kmn",
"Awun": "aww",
"Awutu": "afu",
"Awyi": "auw",
"Axamb": "ahb",
"Axi": "yix",
"Ayabadhu": "ayd",
"Ayautla Mazatec": "vmy",
"Ayere": "aye",
"Ayerrerenge": "axe",
"Ayi": "ayq",
"Ayizi": "yyz",
"Ayizo": "ayb",
"Aymara": "ay",
"Ayomán": "sai-ayo",
"Ayoquesco Zapotec": "zaf",
"Ayoreo": "ayo",
"Ayu": "ayu",
"Ayutla Mixtec": "miy",
"Azerbaijani": "az",
"Azha": "aza",
"Azhe": "yiz",
"Azoyú Me'phaa": "tpc",
"Baa": "kwb",
"Baagandji": "drl",
"Baan": "bvj",
"Baangi": "bqx",
"Baatonum": "bba",
"Baba": "bbw",
"Baba Malay": "mbf",
"Babango": "bbm",
"Babanki": "bbk",
"Babatana": "baa",
"Babine-Witsuwit'en": "bcr",
"Babole": "bvx",
"Babungo": "bav",
"Babuza": "bzg",
"Bacama": "bcy",
"Bacanese Malay": "btj",
"Bactrian": "xbc",
"Bada": "bhz",
"Badaga": "bfq",
"Badanchi": "bau",
"Bade": "bde",
"Badeshi": "bdz",
"Badimaya": "bia",
"Badjiri": "jbi",
"Baduy": "bac",
"Badyara": "pbp",
"Baeggu": "bvd",
"Baekje": "pkc",
"Baelelea": "bvc",
"Baenan": "sai-bae",
"Baetora": "btr",
"Bafanji": "bfj",
"Bafaw": "bwt",
"Bafia": "ksf",
"Bafut": "bfd",
"Baga Kaloum": "bqf",
"Baga Koga": "bgo",
"Baga Manduri": "bmd",
"Baga Pokur": "bcg",
"Baga Sitemu": "bsp",
"Baga Sobané": "bsv",
"Bagheli": "bfy",
"Bagirmi": "bmi",
"Bago-Kusuntu": "bqg",
"Bagri": "bgq",
"Bagua": "sai-bag",
"Bagupi": "bpi",
"Bagusa": "bqb",
"Bagvalal": "kva",
"Baha": "yha",
"Baham": "bdw",
"Bahamian Creole": "bah",
"Baharna Arabic": "abv",
"Bahau": "bhv",
"Bahinemo": "bjh",
"Bahing": "bhj",
"Bahnar": "bdq",
"Bahonsuai": "bsu",
"Bai (South Sudan)": "bdj",
"Baibai": "bbf",
"Baikeno": "bkx",
"Bailang": "tbq-blg",
"Baima": "bqh",
"Baimak": "bmx",
"Bainouk Gubeeher": "alv-bgu",
"Bainouk-Gunyaamolo": "bcz",
"Bainouk-Gunyuño": "bab",
"Bainouk-Samik": "bcb",
"Baiso": "bsw",
"Baissa Fali": "fah",
"Bajan": "bjs",
"Bajelani": "bjm",
"Bajjika": "vjk",
"Baka": "bkc",
"Bakairí": "bkq",
"Bakaka": "bqz",
"Bakhtiari": "bqi",
"Baki": "bki",
"Bakoko": "bkh",
"Bakole": "kme",
"Bakpinka": "bbs",
"Bakulung": "bbu",
"Bakumpai": "bkr",
"Bakung": "xkl",
"Bakwé": "bjw",
"Bala": "tuw-bal",
"Balaesang": "bls",
"Balangao": "blw",
"Balangingi": "sse",
"Balanta-Ganja": "bjt",
"Balanta-Kentohe": "ble",
"Balantak": "blz",
"Balau": "blg",
"Baldemu": "bdn",
"Bali": "bcp",
"Baliledo": "poz-bal",
"Balinese": "ban",
"Balinese Malay": "mhp",
"Balkan Gagauz Turkish": "bgx",
"Balkan Romani": "rmn",
"Balo": "bqo",
"Baloi": "biz",
"Balong": "bnt-bal",
"Balti": "bft",
"Baltic Romani": "rml",
"Baluan-Pam": "blq",
"Baluchi": "bal",
"Bamako Sign Language": "bog",
"Bamali": "bbq",
"Bambalang": "bmo",
"Bambam": "ptu",
"Bambara": "bm",
"Bambassi": "myf",
"Bambili-Bambui": "baw",
"Bamenyam": "bce",
"Bamu": "bcf",
"Bamukumbit": "bqt",
"Bamum": "bax",
"Bamunka": "bvm",
"Bamwe": "bmg",
"Ban Khor Sign Language": "bfk",
"Bana": "bcw",
"Banao Itneg": "bjx",
"Banaro": "byz",
"Banda": "bnd",
"Banda Malay": "bpq",
"Banda-Bambari": "liy",
"Banda-Banda": "bpd",
"Banda-Mbrès": "bqk",
"Banda-Ndélé": "bfl",
"Banda-Yangere": "yaj",
"Bandi": "bza",
"Bandial": "bqj",
"Bandjalang": "bdy",
"Bangala": "bxg",
"Bangandu": "bgf",
"Bangba": "bbe",
"Banggai": "bgz",
"Bangi": "bni",
"Bangime": "dba",
"Bangka": "mfb",
"Bangolan": "bgj",
"Bangru": "sit-ban",
"Bangubangu": "bnx",
"Bangwinji": "bsj",
"Baniva": "bvv",
"Baniwa": "bwi",
"Banjarese": "bjn",
"Banka": "bxw",
"Bankan Tey Dogon": "dbw",
"Bankon": "abb",
"Banoni": "bcm",
"Bantawa": "bap",
"Bantayanon": "bfx",
"Bantik": "bnq",
"Banyumasan": "map-bms",
"Baoule": "bci",
"Baraamu": "brd",
"Barai": "bbb",
"Barakai": "baj",
"Baram Kayan": "kys",
"Barama": "bbg",
"Barambu": "brm",
"Baramu": "bmz",
"Barapasi": "brp",
"Baras": "brs",
"Barasana": "bsn",
"Barbareño": "boi",
"Barclayville Grebo": "gry",
"Bardi": "bcj",
"Barein": "bva",
"Bargam": "mlp",
"Bari": "bfa",
"Bariai": "bch",
"Bariji": "bjc",
"Barikanchi": "bxo",
"Barikewa": "jbk",
"Barngarla": "bjb",
"Barok": "bjk",
"Barombi": "bbi",
"Barranbinya": "aus-bra",
"Barro Negro Tunebo": "tbn",
"Barrow Point": "bpt",
"Baruga": "bjz",
"Barunggam": "aus-brm",
"Baruya": "byr",
"Barwe": "bwg",
"Barzani Jewish Neo-Aramaic": "bjf",
"Baré": "bae",
"Barí": "mot",
"Basa": "bzw",
"Basa-Gumna": "bsl",
"Basa-Gurmana": "buj",
"Basaa": "bas",
"Basap": "bdb",
"Basay": "byq",
"Bashkardi": "bsg",
"Bashkir": "ba",
"Basketo": "bst",
"Basque": "eu",
"Basque-Icelandic Pidgin": "crp-bip",
"Bassa": "bsq",
"Bassa-Kontagora": "bsr",
"Bassari": "bsc",
"Bassossi": "bsi",
"Bata": "bta",
"Bataan Ayta": "ayt",
"Batad Ifugao": "ifb",
"Batanga": "bnm",
"Batek": "btq",
"Bateri": "btv",
"Bathari": "bhm",
"Bati (Cameroon)": "btc",
"Bati (Indonesia)": "bvt",
"Bats": "bbl",
"Batu": "btu",
"Batui": "zbt",
"Batuley": "bay",
"Bau": "bbd",
"Bau Bidayuh": "sne",
"Bauchi": "bsf",
"Bauni": "bpe",
"Baure": "brg",
"Bauria": "bge",
"Bauro": "bxa",
"Bauwaki": "bwk",
"Bauzi": "bvz",
"Bavarian": "bar",
"Bawm Chin": "bgr",
"Bay Miwok": "mkq",
"Bayali": "bjy",
"Baybayanon": "bvy",
"Baygo": "byg",
"Bayogoula": "nai-bay",
"Bayono": "byl",
"Bayot": "bda",
"Bayungu": "bxj",
"Bazigar": "bfr",
"Beami": "beo",
"Beary": "dra-bry",
"Beaver": "bea",
"Beba": "bfp",
"Bebe": "bzv",
"Bebele": "beb",
"Bebeli": "bek",
"Bebil": "bxp",
"Bedik": "tnr",
"Bedjond": "bjv",
"Bedoanas": "bed",
"Beeke": "bkf",
"Beele": "bxq",
"Beembe": "beq",
"Beezen": "bnz",
"Befang": "bby",
"Begbere-Ejar": "bqv",
"Beja": "bej",
"Bekati'": "bei",
"Bekwarra": "bkv",
"Bekwel": "bkw",
"Belait": "beg",
"Belanda Bor": "bxb",
"Belanda Viri": "bvi",
"Belarusian": "be",
"Belhariya": "byw",
"Beli (New Guinea)": "bey",
"Beli (South Sudan)": "blm",
"Belizean Creole": "bzj",
"Bella Coola": "blc",
"Bellari": "brw",
"Belter Creole": "art-bel",
"Bemba": "bem",
"Bembe": "bmb",
"Ben Tey": "dbt",
"Bena": "yun",
"Benabena": "bef",
"Bench": "bcq",
"Bende": "bdp",
"Bendi": "bct",
"Beneraf": "bnv",
"Beng": "nhb",
"Benga": "bng",
"Bengali": "bn",
"Benggoi": "bgy",
"Bengkala Sign Language": "bqy",
"Bentong": "bnu",
"Benyadu'": "byd",
"Beothuk": "bue",
"Bepour": "bie",
"Bera": "brf",
"Berakou": "bxv",
"Berau Malay": "bve",
"Berawan": "lod",
"Berbice Creole Dutch": "brc",
"Bergish": "gmw-bgh",
"Berik": "bkl",
"Berinomo": "bit",
"Berom": "bom",
"Berta": "wti",
"Berti": "byt",
"Besisi": "mhe",
"Besme": "bes",
"Besoa": "bep",
"Betaf": "bfe",
"Betawi": "bew",
"Bete": "byf",
"Bete-Bendi": "btt",
"Betoi": "sai-bet",
"Betta Kurumba": "xub",
"Bezhta": "kap",
"Bhadrawahi": "bhd",
"Bhalay": "bhx",
"Bharia": "bha",
"Bhatri": "bgw",
"Bhattiyali": "bht",
"Bhaya": "bhe",
"Bhele": "bhy",
"Bhilali": "bhi",
"Bhili": "bhb",
"Bhojpuri": "bho",
"Bhoti Kinnauri": "nes",
"Bhunjia": "bhu",
"Biafada": "bif",
"Biage": "bdf",
"Biak": "bhw",
"Biali": "beh",
"Bian Marind": "bpv",
"Biangai": "big",
"Biao": "byk",
"Biao Mon": "bmt",
"Biao-Jiao Mien": "bje",
"Biatah Bidayuh": "bth",
"Bibaali": "bcn",
"Bibbulman": "xbp",
"Bidiyo": "bid",
"Bidyara": "bym",
"Bidyogo": "bjg",
"Biem": "bmc",
"Bierebo": "bnk",
"Bieria": "brj",
"Biete": "biu",
"Big Nambas": "nmb",
"Biga": "bhc",
"Bigambal": "xbe",
"Bih": "ibh",
"Bihari": "bh",
"Bijori": "bix",
"Bikya": "byb",
"Bila": "bip",
"Bilaspuri": "kfs",
"Bilba": "bpz",
"Bilbil": "brz",
"Bile": "bil",
"Biliau": "bcu",
"Biloxi": "bll",
"Bilua": "blb",
"Bilur": "bxf",
"Bima": "bhp",
"Bimin": "bhl",
"Bimoba": "bim",
"Bina": "bmn",
"Binahari": "bxz",
"Binandere": "bhg",
"Binawa": "byj",
"Bindal": "xbd",
"Bine": "bon",
"Binji": "bpj",
"Binongan Itneg": "itb",
"Bintauna": "bne",
"Bintulu": "bny",
"Binukid": "bkd",
"Binumarien": "bjr",
"Bipi": "biq",
"Birao": "brr",
"Birgid": "brk",
"Birgit": "btf",
"Birhor": "biy",
"Biri": "bzr",
"Biritai": "bqq",
"Birri": "bvq",
"Birrpayi": "xbj",
"Birwa": "brl",
"Biseni": "ije",
"Bishnupriya Manipuri": "bpy",
"Bishuo": "bwh",
"Bisis": "bnw",
"Bislama": "bi",
"Bisorio": "bir",
"Bissa": "bib",
"Bisu": "bzi",
"Bit": "bgk",
"Bitare": "brt",
"Bitur": "mcc",
"Biwat": "bwm",
"Biyo": "byo",
"Biyom": "bpm",
"Blablanga": "blp",
"Black Speech": "art-bsp",
"Blackfoot": "bla",
"Blafe": "bfh",
"Blagar": "beu",
"Blang": "blr",
"Blin": "byn",
"Bo": "bgl",
"Bo-Rukul": "mae",
"Bo-Ung": "mux",
"Boano (Maluku)": "bzn",
"Boano (Sulawesi)": "bzl",
"Bobongko": "bgb",
"Bobot": "bty",
"Bodo (Central Africa)": "boy",
"Bodo (India)": "brx",
"Bodo Gadaba": "gbj",
"Bodo Parja": "bdv",
"Bofi": "bff",
"Boga": "bvw",
"Bogaya": "boq",
"Boghom": "bux",
"Boguru": "bqu",
"Bohtan Neo-Aramaic": "bhn",
"Boikin": "bzf",
"Bokar": "sit-bok",
"Bokha": "ybk",
"Boko": "bqc",
"Bokobaru": "bus",
"Bokoto": "bdt",
"Bokyi": "bky",
"Bola": "bnp",
"Bolak": "art-blk",
"Bolango": "bld",
"Bole": "bol",
"Bolgo": "bvo",
"Bolia": "bli",
"Bolinao": "smk",
"Bolivian Sign Language": "bvl",
"Boloki": "bkt",
"Bolon": "bof",
"Bolondo": "bzm",
"Bolyu": "ply",
"Bom": "bmf",
"Boma Nkuu": "bnt-bon",
"Boma Yumu": "bnt-boy",
"Bomboli": "bml",
"Bomboma": "bws",
"Bomitaba": "zmx",
"Bomu": "bmq",
"Bomwali": "bmw",
"Bon Gula": "glc",
"Bonan": "peh",
"Bondei": "bou",
"Bondo": "bfw",
"Bondoukou Kulango": "kzc",
"Bondum Dom Dogon": "dbu",
"Bonerate": "bna",
"Bonggi": "bdg",
"Bonggo": "bpg",
"Bongili": "bui",
"Bongo": "bot",
"Bongu": "bpu",
"Bonjo": "bok",
"Bonkeng": "bvg",
"Bonkiman": "bop",
"Bookan": "bnb",
"Boon": "bnl",
"Boor": "bvf",
"Bora": "boa",
"Border Kuna": "kvn",
"Borei": "gai",
"Boro": "xxb",
"Borong": "ksr",
"Boruca": "brn",
"Borôro": "bor",
"Boselewa": "bwf",
"Bosngun": "bqs",
"Bote-Majhi": "bmj",
"Botlikh": "bph",
"Botolan Sambal": "sbl",
"Bouna Kulango": "nku",
"Bouni": "suo",
"Bourbonnais-Berrichon": "roa-bbn",
"Bourguignon": "roa-brg",
"Bouyei": "pcc",
"Bozaba": "bzo",
"Bragat": "aof",
"Brahui": "brh",
"Braj": "bra",
"Brazilian Sign Language": "bzs",
"Brek Karen": "kvl",
"Brem": "buq",
"Breri": "brq",
"Breton": "br",
"Bribri": "bzd",
"British Sign Language": "bfi",
"Brokkat": "bro",
"Brokpake": "sgt",
"Brokskat": "bkk",
"Brooke's Point Palawano": "plw",
"Broome Pearling Lugger Pidgin": "bpl",
"Brunei Bisaya": "bsb",
"Brunei Malay": "kxd",
"Bruny Island": "xpz",
"Bu": "jid",
"Bu-Nao Bunu": "bwx",
"Bua": "bub",
"Bualkhaw Chin": "cbl",
"Buamu": "box",
"Bube": "bvb",
"Bubi": "buw",
"Bubia": "bbx",
"Budeh Stieng": "stt",
"Budibud": "btp",
"Budong-Budong": "bdx",
"Budu": "buu",
"Budukh": "bdk",
"Buduma": "bdm",
"Budza": "bja",
"Buena Vista Yokuts": "yok-bvy",
"Bugan": "bbh",
"Bughotu": "bgt",
"Buginese": "bug",
"Buglere": "sab",
"Bugun": "bgg",
"Buhi'non Bikol": "ubl",
"Buhid": "bku",
"Buhutu": "bxh",
"Bujhyal": "byh",
"Bukar-Sadung Bidayuh": "sdo",
"Bukat": "bvk",
"Bukawa": "buk",
"Bukhari": "bhh",
"Bukit Malay": "bvu",
"Bukitan": "bkn",
"Bukiyip": "ape",
"Buksa": "tkb",
"Bukusu": "bxk",
"Bulgar": "xbo",
"Bulgarian": "bg",
"Bulgarian Sign Language": "bqn",
"Bulgebi": "bmp",
"Buli (Ghana)": "bwu",
"Buli (Indonesia)": "bzq",
"Bulo Stieng": "sti",
"Bulu (Cameroon)": "bum",
"Bulu (New Guinea)": "bjl",
"Bulungan": "blj",
"Bum": "bmv",
"Bumaji": "byp",
"Bumang": "bvp",
"Bumbita Arapesh": "aon",
"Bumthangkha": "kjz",
"Bun": "buv",
"Buna": "bvn",
"Bunaba": "bck",
"Bunak": "bfn",
"Bunama": "bdd",
"Bundeli": "bns",
"Bung": "bqd",
"Bungain": "but",
"Bunganditj": "xbg",
"Bungku": "bkz",
"Bungu": "wun",
"Bunoge": "dgb",
"Bunun": "bnn",
"Buol": "blf",
"Bura": "bwr",
"Bura Mabang": "mde",
"Burak": "bys",
"Buraka": "bkg",
"Burarra": "bvr",
"Burate": "bti",
"Burduna": "bxn",
"Bure": "bvh",
"Burgundian": "gme-bur",
"Burji": "bji",
"Burmbar": "vrt",
"Burmese": "my",
"Burmeso": "bzu",
"Buru (Indonesia)": "mhs",
"Buru (Nigeria)": "bqw",
"Burui": "bry",
"Burumakok": "aip",
"Burun": "bdi",
"Burundian Sign Language": "lsb",
"Burunge": "bds",
"Burushaski": "bsk",
"Burusu": "bqr",
"Buruwai": "asi",
"Buryat": "bua",
"Busa": "bqp",
"Busam": "bxs",
"Busami": "bsm",
"Busang Kayan": "bfg",
"Bushoong": "buf",
"Buso": "bso",
"Busoa": "bup",
"Bussa": "dox",
"Busuu": "bju",
"Butbut Kalinga": "kyb",
"Butchulla": "xby",
"Butmas-Tur": "bnr",
"Butuanon": "btw",
"Buwal": "bhs",
"Buyeo": "xpy",
"Buyu": "byi",
"Buyuan Jino": "jiy",
"Bwa": "bww",
"Bwaidoka": "bwd",
"Bwala": "bnt-bwa",
"Bwanabwana": "tte",
"Bwatoo": "bwa",
"Bwe Karen": "bwe",
"Bwela": "bwl",
"Bwile": "bwc",
"Bwisi": "bwz",
"Byangsi": "bee",
"Byep": "mkk",
"Bädi Kanum": "khd",
"Caac": "msq",
"Cabiyarí": "cbb",
"Cabre": "awd-cab",
"Cabécar": "cjp",
"Cacaloxtepec Mixtec": "miu",
"Cacaopera": "ccr",
"Cacgia Roglai": "roc",
"Cacua": "cbv",
"Cacán": "sai-cac",
"Caddo": "cad",
"Cafundó": "ccd",
"Cahuarano": "cah",
"Cahuilla": "chl",
"Caijia": "sit-cai",
"Cajonos Zapotec": "zad",
"Caka": "ckx",
"Cakfem-Mushere": "cky",
"Calabrian Greek": "grk-cal",
"Calamian Tagbanwa": "tbk",
"Calusa": "nai-cal",
"Caluyanun": "clu",
"Caló": "rmq",
"Camarines Norte Agta": "abd",
"Cambodian Sign Language": "csx",
"Cameroon Mambila": "mcu",
"Cameroon Pidgin": "wes",
"Campalagian": "cml",
"Camsá": "kbh",
"Camtho": "cmt",
"Camunic": "xcc",
"Candoshi-Shapra": "cbu",
"Canela": "ram",
"Canichana": "caz",
"Cantabrian": "roa-can",
"Cantonese": "yue",
"Cao Miao": "cov",
"Caolan": "mlc",
"Capanahua": "kaq",
"Capiznon": "cps",
"Cappadocian Greek": "cpg",
"Caquinte": "cot",
"Car Nicobarese": "caq",
"Cara": "cfd",
"Carabayo": "cby",
"Caramanta": "crf",
"Caranqui": "sai-caq",
"Carapana": "cbc",
"Carian": "xcr",
"Cariay": "awd-kar",
"Caribbean Hindustani": "hns",
"Caribbean Javanese": "jvn",
"Carijona": "cbd",
"Carolina Algonquian": "crr",
"Carolinian": "cal",
"Carpathian Romani": "rmc",
"Carpathian Rusyn": "rue",
"Carrier": "crx",
"Cashibo-Cacataibo": "cbr",
"Cashinahua": "cbs",
"Casiguran Dumagat Agta": "dgc",
"Casuarina Coast Asmat": "asc",
"Catacao": "sai-cat",
"Catalan": "ca",
"Catalan Sign Language": "csc",
"Catawba": "chc",
"Catuquinaru": "sai-ctq",
"Catío Chibcha": "cba-cat",
"Cavineña": "cav",
"Cayubaba": "cyb",
"Cayuga": "cay",
"Cayuse": "xcy",
"Cazcan": "azc-caz",
"Cañari": "sai-cnr",
"Cebaara": "sef",
"Cebuano": "ceb",
"Celtiberian": "xce",
"Cen": "cen",
"Central Asmat": "cns",
"Central Atlas Tamazight": "tzm",
"Central Awyu": "awu",
"Central Bai": "bca",
"Central Bikol": "bcl",
"Central Bontoc": "lbk",
"Central Cagayan Agta": "agt",
"Central Dusun": "dtp",
"Central Franconian": "gmw-cfr",
"Central Grebo": "grv",
"Central Huasteca Nahuatl": "nch",
"Central Huishui Hmong": "hmc",
"Central Kurdish": "ckb",
"Central Mahuatlán Zapotec": "zam",
"Central Malay": "pse",
"Central Mansi": "mns-cen",
"Central Masela": "mxz",
"Central Mashan Hmong": "hmm",
"Central Mazahua": "maz",
"Central Melanau": "mel",
"Central Min": "czo",
"Central Mnong": "cmo",
"Central Nahuatl": "nhn",
"Central Nicobarese": "ncb",
"Central Ojibwa": "ojc",
"Central Palawano": "plc",
"Central Pame": "pbs",
"Central Pomo": "poo",
"Central Puebla Nahuatl": "ncx",
"Central Sama": "sml",
"Central Siberian Yupik": "ess",
"Central Sierra Miwok": "csm",
"Central Subanen": "syb",
"Central Tagbanwa": "tgt",
"Central Tarahumara": "tar",
"Central Teke": "nzu",
"Central Tunebo": "tuf",
"Centúúm": "cet",
"Cerma": "cme",
"Ch'olti'": "myn-chl",
"Ch'orti'": "caa",
"Chaap Wuurong": "tjw",
"Chachi": "cbi",
"Chadian Arabic": "shu",
"Chadian Sign Language": "cds",
"Chadong": "cdy",
"Chagatai": "chg",
"Chaha": "sem-cha",
"Chaima": "ciy",
"Chairel": "sit-cha",
"Chak": "ckh",
"Chakali": "cli",
"Chakma": "ccp",
"Chala": "cll",
"Chaldean Neo-Aramaic": "cld",
"Chali": "tgf",
"Chamacoco": "ceg",
"Chamalal": "cji",
"Chamba Daka": "ccg",
"Chamba Leko": "ndi",
"Chambeali": "cdh",
"Chambri": "can",
"Chamicuro": "ccc",
"Chamling": "rab",
"Chamorro": "ch",
"Champenois": "roa-cha",
"Chang": "nbc",
"Changriwa": "cga",
"Changthang": "cna",
"Chantyal": "chx",
"Chaná": "sai-chn",
"Chané": "caj",
"Chapacura": "sai-chp",
"Chara": "cra",
"Charrua": "sai-chr",
"Chaudangsi": "cdn",
"Chaura": "crv",
"Chavacano": "cbk",
"Chayahuita": "cbt",
"Chayuco Mixtec": "mih",
"Chazumba Mixtec": "xtb",
"Che": "ruk",
"Chechen": "ce",
"Cheke Holo": "mrn",
"Chemakum": "xch",
"Chenapian": "cjn",
"Chenchu": "cde",
"Chenoua": "cnu",
"Chepang": "cdm",
"Chepya": "ycp",
"Cherepon": "cpn",
"Cherokee": "chr",
"Chesu": "ych",
"Chetco-Tolowa": "ctc",
"Chewong": "cwg",
"Cheyenne": "chy",
"Chhattisgarhi": "hne",
"Chhintange": "ctn",
"Chhulung": "cur",
"Chiangmai Sign Language": "csd",
"Chiapanec": "cip",
"Chibcha": "chb",
"Chicahuaxtla Triqui": "trs",
"Chichewa": "ny",
"Chichicapan Zapotec": "zpv",
"Chichimeca-Jonaz": "pei",
"Chichonyi-Chidzihana-Chikauma": "coh",
"Chickasaw": "cic",
"Chicomuceltec": "cob",
"Chiduruma": "dug",
"Chigmecatitlán Mixtec": "mii",
"Chilcotin": "clc",
"Chilean Sign Language": "csg",
"Chilisso": "clh",
"Chiltepec Chinantec": "csa",
"Chimalapa Zoque": "zoh",
"Chimariko": "cid",
"Chimila": "cbg",
"Chimwiini": "bnt-cmw",
"Chinali": "cih",
"Chinbon Chin": "cnb",
"Chinese": "zh",
"Chinese Pidgin English": "cpi",
"Chinese Pidgin Russian": "crp-cpr",
"Chinese Sign Language": "csl",
"Chinook": "chh",
"Chinook Jargon": "chn",
"Chipaya": "cap",
"Chipewyan": "chp",
"Chiquihuitlán Mazatec": "maq",
"Chiquimulilla": "nai-chi",
"Chiquitano": "cax",
"Chiricahua": "apm",
"Chirino": "sai-chi",
"Chiripá": "nhd",
"Chiru": "cdf",
"Chitimacha": "ctm",
"Chitkuli Kinnauri": "cik",
"Chittagonian": "ctg",
"Chitwania Tharu": "the",
"Chiwere": "iow",
"Choapan Zapotec": "zpc",
"Chocangaca": "cgk",
"Chochotec": "coz",
"Choctaw": "cho",
"Chodri": "cdi",
"Chokri Naga": "nri",
"Chokwe": "cjk",
"Chol": "ctu",
"Cholón": "cht",
"Chong": "cog",
"Choni": "cda",
"Chono": "sai-cno",
"Chontal Maya": "chf",
"Chopi": "cce",
"Chothe Naga": "nct",
"Chrau": "crw",
"Chru": "cje",
"Chuabo": "chw",
"Chuanqiandian Cluster Miao": "cqd",
"Chuave": "cjv",
"Chug": "cvg",
"Chuj": "cac",
"Chuka": "cuh",
"Chukchi": "ckt",
"Chukwa": "cuw",
"Chulym": "clw",
"Chumburung": "ncu",
"Chungli Ao": "njo-jgl",
"Churahi": "cdj",
"Church Slavonic": "zls-chs",
"Churuya": "sai-chu",
"Chut": "scb",
"Chuukese": "chk",
"Chuvan": "xcv",
"Chuvash": "cv",
"Chácobo": "cao",
"Ci Gbe": "cib",
"Cia-Cia": "cia",
"Cibak": "ckl",
"Cicipu": "awc",
"Ciguayo": "nai-cig",
"Cimbrian": "cim",
"Cinamiguin Manobo": "mkx",
"Cinda-Regi-Tiyal": "cdr",
"Cineni": "cie",
"Cinta Larga": "cin",
"Cishingini": "asg",
"Citak": "txt",
"Ciwogai": "tgd",
"Classical Chinese": "lzh",
"Classical Gaelic": "ghc",
"Classical Guarani": "gn-cls",
"Classical Mandaic": "myz",
"Classical Mongolian": "cmg",
"Classical Nahuatl": "nci",
"Classical Newar": "nwc",
"Classical Quechua": "qwc",
"Classical Syriac": "syc",
"Classical Tibetan": "xct",
"Coahuilteco": "xcw",
"Coast Miwok": "csi",
"Coastal Kadazan": "kzj",
"Coastal Konjo": "kjc",
"Coatecas Altas Zapotec": "zca",
"Coatepec Nahuatl": "naz",
"Coatlán Mixe": "mco",
"Coatlán Zapotec": "zps",
"Coatzospan Mixtec": "miz",
"Cocama": "cod",
"Cochimi": "coj",
"Cocopa": "coc",
"Cocos Islands Malay": "coa",
"Coeruna": "sai-coe",
"Coeur d'Alene": "crd",
"Cofán": "con",
"Cogui": "kog",
"Col": "liw",
"Colombian Sign Language": "csn",
"Colonia Tovar German": "gct",
"Columbia-Wenatchi": "col",
"Colán": "sai-col",
"Comaltepec Chinantec": "cco",
"Comanche": "com",
"Comechingon": "sai-cmg",
"Comecrudo": "xcm",
"Communicationssprache": "art-com",
"Como Karim": "cfg",
"Comox": "coo",
"Con": "cno",
"Coos": "csz",
"Copainalá Zoque": "zoc",
"Copala Triqui": "trc",
"Copallén": "sai-cop",
"Coptic": "cop",
"Coquille": "coq",
"Cora": "crn",
"Cori": "cry",
"Cornish": "kw",
"Coroado Puri": "sai-crd",
"Corsican": "co",
"Cosoleacaque Nahuatl": "nhk",
"Costa Rican Sign Language": "csr",
"Cotabato Manobo": "mta",
"Cotoname": "xcn",
"Cowlitz": "cow",
"Coyaima": "coy",
"Coyotepec Popoloca": "pbf",
"Coyutla Totonac": "toc",
"Cree": "cr",
"Creek": "mus",
"Crimean Gothic": "gme-cgo",
"Crimean Tatar": "crh",
"Croatian Sign Language": "csq",
"Cross River Mbembe": "mfn",
"Crow": "cro",
"Cruzeño": "crz",
"Cua": "cua",
"Cuban Sign Language": "csf",
"Cubeo": "cub",
"Cueva": "sai-cva",
"Cuiba": "cui",
"Cuitlatec": "cuy",
"Culina": "cul",
"Culli": "sai-cul",
"Cumanagoto": "cuo",
"Cumbric": "xcb",
"Cun": "cuq",
"Cung": "cug",
"Cupeño": "cup",
"Curonian": "xcu",
"Curripaco": "kpc",
"Cutchi-Swahili": "ccl",
"Cuvok": "cuv",
"Cuyamecalco Mixtec": "xtu",
"Cuyunon": "cyo",
"Cwi Bwamu": "bwy",
"Cypriot Arabic": "acy",
"Czech": "cs",
"Czech Sign Language": "cse",
"Cèmuhî": "cam",
"Cốông": "cnc",
"Da'a Kaili": "kzf",
"Daai Chin": "dao",
"Daakaka": "bpa",
"Daantanai'": "lni",
"Daasanach": "dsh",
"Daba": "dbq",
"Dabarre": "dbr",
"Dabe": "dbe",
"Dacian": "xdc",
"Dadanitic": "sem-dad",
"Dadi Dadi": "dda",
"Dadibi": "mps",
"Dadiya": "dbd",
"Daga": "dgz",
"Dagaari Dioula": "dgd",
"Dagba": "dgk",
"Dagbani": "dag",
"Dagik": "dec",
"Dagoman": "dgn",
"Dahalik": "dlk",
"Dahalo": "dal",
"Daho-Doo": "das",
"Dai": "dij",
"Dair": "drb",
"Dairi Batak": "btd",
"Dakka": "dkk",
"Dakota": "dak",
"Dakpa": "dka",
"Dalmatian": "dlm",
"Daloa Bété": "bev",
"Dama (Nigeria)": "dmm",
"Dama (Sierra Leone)": "dmn-dam",
"Damakawa": "dam",
"Damal": "uhn",
"Dambi": "dac",
"Dameli": "dml",
"Dampelas": "dms",
"Dan": "dnj",
"Danaru": "dnr",
"Danau": "dnu",
"Dandami Maria": "daq",
"Dangaléat": "daa",
"Dangaura Tharu": "thl",
"Danish": "da",
"Danish Sign Language": "dsl",
"Dano": "aso",
"Danu": "dnv",
"Danuwar": "dhw",
"Dao": "daz",
"Daonda": "dnd",
"Dar Daju Daju": "djc",
"Dar Fur Daju": "daj",
"Dar Sila Daju": "dau",
"Darai": "dry",
"Dargwa": "dar",
"Darkinjung": "xda",
"Darlong": "dln",
"Darmiya": "drd",
"Daro-Matu Melanau": "dro",
"Darumbal": "xgm",
"Dass": "dot",
"Datian Min": "nan-dat",
"Datooga": "tcc",
"Daungwurrung": "dgw",
"Daur": "dta",
"Davawenyo": "daw",
"Dawawa": "dww",
"Dawera-Daweloor": "ddw",
"Dawro": "dwr",
"Day": "dai",
"Dayi": "dax",
"Dazaga": "dzg",
"Deccani": "dcc",
"Dedua": "ded",
"Defaka": "afn",
"Defi Gbe": "gbh",
"Deg": "mzw",
"Deg Xinag": "ing",
"Degema": "deg",
"Degenan": "dge",
"Dehwari": "deh",
"Dela-Oenale": "row",
"Delo": "ntr",
"Delta Yokuts": "yok-dly",
"Dem": "dem",
"Dema": "dmx",
"Demisa": "dei",
"Demotic Egyptian": "egx-dem",
"Demta": "dmy",
"Dena'ina": "tfn",
"Dendi": "ddn",
"Dengese": "dez",
"Dengka": "dnk",
"Deno": "dbb",
"Denya": "anv",
"Dení": "dny",
"Deori": "der",
"Desano": "des",
"Desiya": "dso",
"Dewas Rai": "dwz",
"Dewoin": "dee",
"Dezfuli": "def",
"Dghwede": "dgh",
"Dhaiso": "dhs",
"Dhalandji": "dhl",
"Dhangu": "dhg",
"Dhanki": "dhn",
"Dhao": "nfa",
"Dharug": "xdk",
"Dhatki": "mki",
"Dhimal": "dhi",
"Dhivehi": "dv",
"Dhodia": "dho",
"Dhofari Arabic": "adf",
"Dhudhuroa": "ddr",
"Dhundhari": "dhd",
"Dhungaloo": "dhx",
"Dhurga": "dhu",
"Dhuwal": "dwu",
"Dhuwaya": "dwy",
"Dia": "dia",
"Dibabawon Manobo": "mbd",
"Dibiyaso": "dby",
"Dibo": "dio",
"Dicamay Agta": "duy",
"Didinga": "did",
"Dieri": "dif",
"Digo": "dig",
"Dii": "dur",
"Dijim-Bwilim": "cfa",
"Dilling": "dil",
"Dima": "jma",
"Dimasa": "dis",
"Dimbong": "dii",
"Dime": "dim",
"Dinapigue Agta": "phi-din",
"Dineor": "mrx",
"Ding": "diz",
"Dinka": "din",
"Diodio": "ddi",
"Dirasha": "gdl",
"Diri": "dwa",
"Dirim": "dir",
"Disa": "dsi",
"Ditammari": "tbz",
"Ditidaht": "dtd",
"Diuwe": "diy",
"Diuxi-Tilantongo Mixtec": "xtd",
"Dixon Reef": "dix",
"Dizin": "mdx",
"Djadjawurrung": "dja",
"Djambarrpuyngu": "djr",
"Djangun": "djf",
"Djauan": "djn",
"Djawi": "djw",
"Djimini": "dyi",
"Djinang": "dji",
"Djinba": "djb",
"Djiwarli": "djl",
"Dobel": "kvo",
"Dobu": "dob",
"Doe": "doe",
"Doga": "dgg",
"Doghoro": "dgx",
"Dogoso": "dgs",
"Dogosé": "dos",
"Dogri": "doi",
"Dogrib": "dgr",
"Dogul Dom": "dbg",
"Doka": "dbi",
"Doko-Uyanga": "uya",
"Dolgan": "dlg",
"Dom": "doa",
"Domaaki": "dmk",
"Domari": "rmt",
"Dominican Sign Language": "doq",
"Dompo": "doy",
"Domu": "dof",
"Domung": "dev",
"Dondo": "dok",
"Dong": "doh",
"Dongo": "doo",
"Dongolawi": "kzh",
"Dongotono": "ddd",
"Dongshanba Lalo": "yik",
"Dongxiang": "sce",
"Donno So Dogon": "dds",
"Doondo": "dde",
"Dorasque": "cba-dor",
"Dori'o": "dor",
"Dorig": "wwo",
"Doromu-Koki": "kqc",
"Dorze": "doz",
"Doso": "dol",
"Doteli": "dty",
"Dothraki": "art-dtk",
"Doura": "don",
"Doutai": "tds",
"Doyayo": "dow",
"Drehu": "dhv",
"Drung": "duu",
"Duala": "dua",
"Duano": "dup",
"Duau": "dva",
"Dubli": "dub",
"Dubu": "dmu",
"Dugun": "ndu",
"Duguri": "dbm",
"Dugwor": "dme",
"Duhwa": "kbz",
"Duit": "cba-dui",
"Duke": "nke",
"Dukhan": "trk-dkh",
"Dulbu": "dbo",
"Duli": "duz",
"Duma": "dma",
"Dumaitic": "sem-dum",
"Dumbea": "duf",
"Dumi": "dus",
"Dumpas": "dmv",
"Dumun": "dui",
"Duna": "duc",
"Dungan": "dng",
"Dungmali": "raa",
"Dungra Bhil": "duh",
"Dungu": "dbv",
"Dupaningan Agta": "duo",
"Dura": "drq",
"Duri": "mvp",
"Duriankere": "dbn",
"Duruwa": "pci",
"Dusner": "dsn",
"Dusun Deyah": "dun",
"Dusun Malang": "duq",
"Dusun Witu": "duw",
"Dutch": "nl",
"Dutch Sign Language": "dse",
"Duun": "dux",
"Duupa": "dae",
"Duvle": "duv",
"Duwai": "dbp",
"Duwet": "gve",
"Dwang": "nnu",
"Dyaabugay": "dyy",
"Dyaberdyaber": "dyb",
"Dyan": "dya",
"Dyangadi": "dyn",
"Dyirbal": "dbl",
"Dyugun": "dyd",
"Dyula": "dyu",
"Dza": "jen",
"Dzala": "dzl",
"Dzando": "dzn",
"Dzao Min": "bpn",
"Dzodinka": "add",
"Dzongkha": "dz",
"Dzuun": "dnn",
"Dâw": "kwa",
"E": "eee",
"E'ma Buyang": "yzg",
"Early Assamese": "inc-oas",
"Early Modern Korean": "ko-ear",
"Early Old Oghuz": "trk-eog",
"Early Tripuri": "xtr",
"East Central German": "gmw-ecg",
"East Circassian": "kbd",
"East Damar": "dmr",
"East Franconian": "vmf",
"East Futuna": "fud",
"East Kewa": "kjs",
"East Limba": "lma",
"East Masela": "vme",
"East Miraya Bikol": "rbl",
"East Nyala": "nle",
"East Tarangan": "tre",
"East Yugur": "yuy",
"Eastern Acipa": "acp",
"Eastern Arrernte": "aer",
"Eastern Bolivian Guarani": "gui",
"Eastern Bontoc": "ebk",
"Eastern Bru": "bru",
"Eastern Canadian Inuktitut": "ike",
"Eastern Cham": "cjm",
"Eastern Durango Nahuatl": "azd",
"Eastern Gorkha Tamang": "tge",
"Eastern Highland Chatino": "cly",
"Eastern Highland Otomi": "otm",
"Eastern Huasteca Nahuatl": "nhe",
"Eastern Huishui Hmong": "hme",
"Eastern Karaboro": "xrb",
"Eastern Katu": "ktv",
"Eastern Kayah": "eky",
"Eastern Keres": "kee",
"Eastern Khanty": "kca-eas",
"Eastern Krahn": "kqo",
"Eastern Lalu": "yit",
"Eastern Lawa": "lwl",
"Eastern Magar": "mgp",
"Eastern Maninkakan": "emk",
"Eastern Mari": "mhr",
"Eastern Meohang": "emg",
"Eastern Min": "cdo",
"Eastern Mnong": "mng",
"Eastern Muria": "emu",
"Eastern Ngad'a": "nea",
"Eastern Nisu": "nos",
"Eastern Ojibwa": "ojg",
"Eastern Parbate Kham": "kif",
"Eastern Penan": "pez",
"Eastern Pomo": "peb",
"Eastern Pwo": "kjp",
"Eastern Qiandong Miao": "hmq",
"Eastern Subanun": "sfe",
"Eastern Tamang": "taj",
"Eastern Tawbuid": "bnj",
"Eastern Xiangxi Miao": "muq",
"Eastern Xwla Gbe": "gbx",
"Ebira": "igb",
"Eblaite": "xeb",
"Ebrié": "ebr",
"Ebughu": "ebg",
"Ecuadorian Sign Language": "ecs",
"Ede Cabe": "cbj",
"Ede Ica": "ica",
"Ede Idaca": "idd",
"Ede Ije": "ijj",
"Ede Nago": "nqg",
"Edera Awyu": "awy",
"Edo": "bin",
"Edolo": "etr",
"Edomite": "xdm",
"Edopi": "dbf",
"Efai": "efa",
"Efe": "efe",
"Efik": "efi",
"Efutop": "ofu",
"Ega": "ega",
"Eggon": "ego",
"Egyptian": "egy",
"Egyptian Arabic": "arz",
"Egyptian Sign Language": "esl",
"Ehueun": "ehu",
"Eipomek": "eip",
"Eitiep": "eit",
"Ejagham": "etu",
"Ejamat": "eja",
"Ekajuk": "eka",
"Ekari": "ekg",
"Ekele": "khy",
"Eki": "eki",
"Ekit": "eke",
"Ekpeye": "ekp",
"El Alto Zapotec": "zpp",
"El Hugeirat": "elh",
"El Molo": "elo",
"Elamite": "elx",
"Eleme": "elm",
"Elepi": "ele",
"Elfdalian": "ovd",
"Elip": "ekm",
"Elkei": "elk",
"Eloi": "art-elo",
"Elotepec Zapotec": "zte",
"Eloyi": "afo",
"Elseng": "mrf",
"Elu": "elu",
"Elymian": "xly",
"Emae": "mmw",
"Emai": "ema",
"Eman": "emn",
"Embaloh": "emb",
"Emberá-Baudó": "bdc",
"Emberá-Catío": "cto",
"Emberá-Chamí": "cmi",
"Emberá-Tadó": "tdc",
"Embu": "ebu",
"Emem": "enr",
"Emerillon": "eme",
"Emilian": "egl",
"Emplawas": "emw",
"En": "enc",
"Enawené-Nawé": "unk",
"Ende": "end",
"Enga": "enq",
"Engenni": "enn",
"Enggano": "eno",
"English": "en",
"Enlhet": "enl",
"Enrekang": "ptt",
"Enu": "enu",
"Enwan": "env",
"Enwang": "enw",
"Enxet": "enx",
"Enya": "gey",
"Eotile": "eot",
"Epena": "sja",
"Epi-Olmec": "xep",
"Epie": "epi",
"Epigraphic Mayan": "emy",
"Eravallan": "era",
"Erave": "kjy",
"Ere": "twp",
"Erie": "iro-ere",
"Eritai": "ert",
"Erokwanas": "erw",
"Erre": "err",
"Erromintxela": "emx",
"Ersu": "ers",
"Eruwa": "erh",
"Erzya": "myv",
"Esan": "ish",
"Ese": "mcq",
"Ese Ejja": "ese",
"Eshtehardi": "esh",
"Esimbi": "ags",
"Eskayan": "esy",
"Esmeralda": "sai-esm",
"Esperanto": "eo",
"Esselen": "esq",
"Estado de México Otomi": "ots",
"Estonian": "et",
"Estonian Sign Language": "eso",
"Esuma": "esm",
"Etchemin": "etc",
"Etebi": "etb",
"Eten": "etx",
"Eteocretan": "ecr",
"Eteocypriot": "ecy",
"Ethiopian Sign Language": "eth",
"Etkywan": "ich",
"Eton (Cameroon)": "eto",
"Eton (Vanuatu)": "etn",
"Etruscan": "ett",
"Etulo": "utr",
"Evant": "bzz",
"Even": "eve",
"Evenki": "evn",
"Ewage-Notu": "nou",
"Ewarhuyana": "sai-ewa",
"Ewe": "ee",
"Ewondo": "ewo",
"Extremaduran": "ext",
"Eyak": "eya",
"Ezaa": "eza",
"Fagani": "faf",
"Faifi": "fif",
"Faire Atta": "azt",
"Faiwol": "fai",
"Fakkanci": "gel",
"Fala": "fax",
"Falam Chin": "cfm",
"Fali": "fli",
"Faliscan": "xfa",
"Fam": "fam",
"Fanagalo": "fng",
"Fanamaket": "bjp",
"Fang (Bantu)": "fan",
"Fang (Beboid)": "fak",
"Fania": "fni",
"Far Western Muria": "fmu",
"Farefare": "gur",
"Faroese": "fo",
"Fas": "fqs",
"Fasu": "faa",
"Fataleka": "far",
"Fataluku": "ddg",
"Fayu": "fau",
"Fe'fe'": "fmp",
"Fedan": "pdn",
"Fembe": "agl",
"Fer": "kah",
"Feroge": "fer",
"Fiji Hindi": "hif",
"Fijian": "fj",
"Filomena Mata-Coahuitlán Totonac": "tlp",
"Fingallian": "gmw-fin",
"Finnish": "fi",
"Finnish Sign Language": "fse",
"Finnish-Swedish Sign Language": "fss",
"Finongan": "fag",
"Fipa": "fip",
"Firan": "fir",
"Fiwaga": "fiw",
"Flemish Sign Language": "vgt",
"Flinders Island": "fln",
"Foau": "flh",
"Fogaha": "ber-fog",
"Foi": "foi",
"Foia Foia": "ffi",
"Folopa": "ppo",
"Foma": "fom",
"Fon": "fon",
"Fongoro": "fgr",
"Foodo": "fod",
"Forak": "frq",
"Fordata": "frd",
"Fore": "for",
"Forest Enets": "enf",
"Forest Nenets": "yrk-for",
"Fortsenal": "frt",
"Fox": "sac",
"Franc-Comtois": "roa-fcm",
"Francisco León Zoque": "zos",
"Franco-Provençal": "frp",
"French": "fr",
"French Belgian Sign Language": "sfb",
"French Sign Language": "fsl",
"Friulian": "fur",
"Fula": "ff",
"Fuliiru": "flr",
"Fulniô": "fun",
"Fum": "fum",
"Fungwa": "ula",
"Fur": "fvr",
"Furu": "fuu",
"Futuna-Aniwa": "fut",
"Fuyug": "fuy",
"Fwe": "fwe",
"Fwâi": "fwa",
"Fyam": "pym",
"Fyer": "fie",
"Ga": "gaa",
"Ga'anda": "gqa",
"Ga'dang": "gdg",
"Gaa": "ttb",
"Gaam": "tbi",
"Gabadi": "kbt",
"Gabi": "gbw",
"Gabri": "gab",
"Gabrielino-Fernandeño": "xgf",
"Gadang": "gdk",
"Gaddang": "gad",
"Gaddi": "gbk",
"Gade": "ged",
"Gadjerawang": "gdh",
"Gadsup": "gaj",
"Gafat": "gft",
"Gagadu": "gbu",
"Gagauz": "gag",
"Gagnoa Bété": "btg",
"Gahri": "bfu",
"Gaikundi": "gbf",
"Gaina": "gcn",
"Gal": "gap",
"Galambu": "glo",
"Galatian": "xga",
"Galela": "gbi",
"Galeya": "gar",
"Galice": "gce",
"Galician": "gl",
"Galindian": "xgl",
"Gallaecian": "cel-gal",
"Gallo": "roa-gal",
"Gallo-Italic of Basilicata": "roa-gib",
"Gallo-Italic of Sicily": "roa-gis",
"Gallurese": "sdn",
"Galo": "adl",
"Galoli": "gal",
"Gamale Kham": "kgj",
"Gambera": "gma",
"Gamela": "sai-gam",
"Gamilaraay": "kld",
"Gamit": "gbl",
"Gamkonora": "gak",
"Gamo": "gmv",
"Gamo-Ningi": "bte",
"Gan": "gan",
"Gana": "gnq",
"Ganang": "gne",
"Gandhari": "pgd",
"Gane": "gzn",
"Ganggalida": "gcd",
"Ganglau": "ggl",
"Gangte": "gnb",
"Gangulu": "gnl",
"Gants": "gao",
"Ganza": "gza",
"Ganzi": "gnz",
"Gao": "gga",
"Gapapaiwa": "pwg",
"Garawa": "wrk",
"Garhwali": "gbm",
"Garifuna": "cab",
"Garingbal": "xgi",
"Garo": "grt",
"Garre": "gex",
"Garus": "gyb",
"Garza": "xgr",
"Gashowu Yokuts": "yok-gsy",
"Gata'": "gaq",
"Gaulish": "cel-gau",
"Gavak": "dmc",
"Gavar": "gou",
"Gavião do Jiparaná": "gvo",
"Gawar-Bati": "gwt",
"Gawwada": "gwd",
"Gaya": "zra",
"Gayil": "gyl",
"Gayo": "gay",
"Gayón": "sai-gay",
"Gbagyi": "gbr",
"Gban": "ggu",
"Gbanu": "gbv",
"Gbanziri": "gbg",
"Gbari": "gby",
"Gbaya-Bossangoa": "gbp",
"Gbaya-Bozoum": "gbq",
"Gbaya-Mbodomo": "gmm",
"Gbayi": "gyg",
"Gbesi Gbe": "gbs",
"Gbii": "ggb",
"Gbin": "xgb",
"Gbiri-Niragu": "grh",
"Gboloo Grebo": "gec",
"Gciriku": "diu",
"Gcwi": "gwj",
"Ge": "hmj",
"Ge'ez": "gez",
"Geba Karen": "kvq",
"Gebe": "gei",
"Gedaged": "gdd",
"Gedeo": "drs",
"Geji": "gji",
"Geko Karen": "ghk",
"Gela": "nlg",
"Gele'": "sbc",
"Geme": "geq",
"Gen": "gej",
"Gende": "gaf",
"Gengle": "geg",
"Georgian": "ka",
"Gepo": "ygp",
"Gera": "gew",
"Gerka": "gek",
"German": "de",
"German Sign Language": "gsg",
"Geruma": "gea",
"Geser-Gorom": "ges",
"Geshiza": "ero-gsz",
"Gey": "guv",
"Ghadames": "gha",
"Ghanaian Sign Language": "gse",
"Ghandruk Sign Language": "gds",
"Ghanongga": "ghn",
"Ghari": "gri",
"Ghayavi": "bmk",
"Ghera": "ghr",
"Ghomala'": "bbj",
"Ghomara": "gho",
"Ghotuo": "aaa",
"Ghulfan": "ghl",
"Giangan": "bgi",
"Gibanawa": "gib",
"Gidar": "gid",
"Gikyode": "acd",
"Gilaki": "glk",
"Gilbertese": "gil",
"Gilima": "gix",
"Gimi (Austronesian)": "gip",
"Gimi (Papuan)": "gim",
"Gimme": "kmp",
"Gimnime": "gmn",
"Ginuman": "gnm",
"Girawa": "bbr",
"Girirra": "gii",
"Giryama": "nyf",
"Githabul": "gih",
"Gitua": "ggt",
"Gitxsan": "git",
"Giyug": "giy",
"Gizrra": "tof",
"Glaro-Twabo": "glr",
"Glavda": "glw",
"Glio-Oubi": "oub",
"Glosa": "igs",
"Gnau": "gnu",
"Goa'uld": "art-gld",
"Goaria": "gig",
"Gobasi": "goi",
"Gobu": "gox",
"Godié": "god",
"Godoberi": "gdo",
"Godwari": "gdx",
"Goemai": "ank",
"Gofa": "gof",
"Gogo": "gog",
"Gogodala": "ggw",
"Goguryeo": "zkg",
"Gojri": "gju",
"Gokana": "gkn",
"Gokhy": "tbq-gkh",
"Gola": "gol",
"Golin": "gvf",
"Golpa": "lja",
"Gondi": "gon",
"Gone Dau": "goo",
"Gong": "ugo",
"Gongduk": "goe",
"Gonja": "gjn",
"Goo": "gov",
"Gooniyandi": "gni",
"Gor": "gqr",
"Gorakor": "goc",
"Gorap": "goq",
"Goreng": "xgg",
"Gorontalo": "gor",
"Gorovu": "grq",
"Gorwaa": "gow",
"Gothic": "got",
"Gottscheerish": "gmw-gts",
"Goundo": "goy",
"Gourmanchéma": "gux",
"Gowlan": "goj",
"Gowro": "gwf",
"Gozarkhani": "goz",
"Grangali": "nli",
"Grass Koiari": "kbk",
"Greek": "el",
"Greek Sign Language": "gss",
"Green Gelao": "giq",
"Green Hmong": "hnj",
"Greenlandic": "kl",
"Grenadian Creole English": "gcl",
"Gresi": "grs",
"Groma": "gro",
"Gros Ventre": "ats",
"Gua": "gwx",
"Guachí": "sai-gua",
"Guahibo": "guh",
"Guajajára": "gub",
"Guajá": "gvj",
"Guambiano": "gum",
"Guamo": "sai-gmo",
"Guanano": "gvc",
"Guanche": "gnc",
"Guarayu": "gyr",
"Guatemalan Sign Language": "gsm",
"Guató": "gta",
"Guayabero": "guo",
"Guazacapán": "nai-guz",
"Gudang": "xgd",
"Gudanji": "nji",
"Gude": "gde",
"Gudu": "gdu",
"Guduf-Gava": "gdf",
"Guerrero Amuzgo": "amu",
"Guerrero Nahuatl": "ngu",
"Guevea de Humboldt Zapotec": "zpg",
"Gugadj": "ggd",
"Gugu Badhun": "gdc",
"Gugu Warra": "wrw",
"Guhu-Samane": "ghs",
"Guianese Creole": "gcr",
"Guiberoua Bété": "bet",
"Guinau": "awd-gnu",
"Guinea Kpelle": "gkp",
"Guinea-Bissau Creole": "pov",
"Guinea-Bissau Sign Language": "lgs",
"Guinean Sign Language": "gus",
"Guiqiong": "gqi",
"Gujarati": "gu",
"Gula": "glu",
"Gula'alaa": "gmb",
"Gulay": "gvl",
"Gule": "gly",
"Gulf Arabic": "afb",
"Gullah": "gul",
"Gumalu": "gmu",
"Gumatj": "gnn",
"Gumawana": "gvs",
"Gumuz": "guk",
"Gun": "guw",
"Gundi": "gdi",
"Gunditjmara": "gjm",
"Gundungurra": "xrd",
"Gungabula": "gyf",
"Gungu": "rub",
"Guntai": "gnt",
"Gunu": "yas",
"Gunwinggu": "gup",
"Gunya": "gyy",
"Gupa-Abawa": "gpa",
"Gupapuyngu": "guf",
"Gur Lama": "las",
"Guragone": "gge",
"Guramalum": "grz",
"Gurani": "hac",
"Gureng Gureng": "gnr",
"Gurgula": "ggg",
"Guriaso": "grx",
"Gurindji": "gue",
"Gurindji Kriol": "gjr",
"Gurmana": "gvm",
"Guro": "goa",
"Gurung": "gvr",
"Guruntum": "grd",
"Gusan": "gsn",
"Gusii": "guz",
"Gusilay": "gsl",
"Gutnish": "gmq-gut",
"Guugu Yimidhirr": "kky",
"Guwa": "xgw",
"Guwamu": "gwu",
"Guwar": "aus-guw",
"Guya": "gka",
"Guyanese Creole English": "gyn",
"Guyani": "gvy",
"Guébie": "gie",
"Gvoko": "ngs",
"Gwa": "gwb",
"Gwahatike": "dah",
"Gwak": "jgk",
"Gwamhi-Wuri": "bga",
"Gwandara": "gwn",
"Gwara": "alv-gwa",
"Gweda": "grw",
"Gweno": "gwe",
"Gwere": "gwr",
"Gwich'in": "gwi",
"Gyalsumdo": "gyo",
"Gyele": "gyi",
"Gyem": "gye",
"Güenoa": "sai-gue",
"Habu": "hbu",
"Hachijō": "jpx-hcj",
"Hadiyya": "hdy",
"Hadoti": "hoj",
"Hadrami": "xhd",
"Hadza": "hts",
"Haeke": "aek",
"Hahon": "hah",
"Haida": "hai",
"Haigwai": "hgw",
"Hailufeng Min": "nan-hlh",
"Hainanese": "hnm",
"Hainyaxo Bozo": "bzx",
"Haiphong Sign Language": "haf",
"Haisla": "has",
"Haitian Creole": "ht",
"Haitian Vodoun Culture Language": "hvc",
"Haiǁom": "hgm",
"Haji": "hji",
"Hajong": "haj",
"Hakka": "hak",
"Hakö": "hao",
"Halang": "hal",
"Halang Doan": "hld",
"Halbi": "hlb",
"Halia": "hla",
"Halkomelem": "hur",
"Hamap": "hmu",
"Hamba": "hba",
"Hamer-Banna": "amf",
"Hamtai": "hmt",
"Hanga": "hag",
"Hanga Hundi": "wos",
"Hani": "hni",
"Hanoi Sign Language": "hab",
"Hanunoo": "hnn",
"Harami": "xha",
"Harappan": "xiv",
"Harari": "har",
"Haraza": "nub-har",
"Harijan Kinnauri": "kjo",
"Haroi": "hro",
"Harsusi": "hss",
"Haruai": "tmd",
"Haruku": "hrk",
"Haryanvi": "bgc",
"Harzani": "hrz",
"Hasaitic": "sem-has",
"Hasha": "ybj",
"Hassaniya Arabic": "mey",
"Hatam": "had",
"Hattic": "xht",
"Hausa": "ha",
"Hausa Sign Language": "hsl",
"Haush": "sai-hau",
"Havasupai-Walapai-Yavapai": "yuf",
"Haveke": "hvk",
"Havu": "hav",
"Hawai'i Pidgin Sign Language": "hps",
"Hawaiian": "haw",
"Hawaiian Creole": "hwc",
"Haya": "hay",
"Hdi": "xed",
"Hebrew": "he",
"Hehe": "heh",
"Heiban": "hbn",
"Heiltsuk": "hei",
"Helong": "heg",
"Hema": "nix",
"Hemba": "hem",
"Hember Avu": "mmi",
"Herdé": "hed",
"Herero": "hz",
"Hermit": "llf",
"Hernican": "xhr",
"Hewa": "ham",
"Heyo": "auk",
"Hibito": "hib",
"Hidatsa": "hid",
"Higaonon": "mba",
"High Valyrian": "art-vlh",
"Highland Konjo": "kjk",
"Highland Oaxaca Chontal": "chd",
"Highland Popoluca": "poi",
"Highland Puebla Nahuatl": "azz",
"Highland Totonac": "tos",
"Hijazi Arabic": "acw",
"Hijuk": "hij",
"Hiligaynon": "hil",
"Hill Maria": "mrr",
"Himarimã": "hir",
"Hindi": "hi",
"Hindi Dogri": "dgo",
"Hinduri": "hii",
"Hinukh": "gin",
"Hiri Motu": "ho",
"Hismaic": "sem-his",
"Hitchiti": "nai-hit",
"Hittite": "hit",
"Hitu": "htu",
"Hiw": "hiw",
"Hixkaryana": "hix",
"Hlai": "lic",
"Hlepho Phowa": "yhl",
"Hlersu": "hle",
"Hmar": "hmr",
"Hmong Don": "hmf",
"Hmong Dô": "hmv",
"Hmong Shua": "hmz",
"Hmwaveke": "mrk",
"Ho": "hoc",
"Ho Chi Minh City Sign Language": "hos",
"Hoava": "hoa",
"Hobyót": "hoh",
"Hoia Hoia": "hhi",
"Hokkien": "nan-hbl",
"Holikachuk": "hoi",
"Holiya": "hoy",
"Holma": "hod",
"Holoholo": "hoo",
"Holu": "hol",
"Homa": "hom",
"Honduran Lenca": "len",
"Honduras Sign Language": "hds",
"Hone": "juh",
"Hong Kong Sign Language": "hks",
"Honi": "how",
"Hopi": "hop",
"Horned Miao": "hrm",
"Horo": "hor",
"Horom": "hoe",
"Hote": "hot",
"Hoti": "hti",
"Hovongan": "hov",
"Hoyahoya": "hhy",
"Hozo": "hoz",
"Hpon": "hpo",
"Hrangkhol": "hra",
"Hruso": "hru",
"Hrê": "hre",
"Hu": "huo",
"Huachipaeri": "hug",
"Huambisa": "hub",
"Huaorani": "auc",
"Huarijio": "var",
"Huaulu": "hud",
"Huautla Mazatec": "mau",
"Huave": "huv",
"Huaxcaleca Nahuatl": "nhq",
"Huba": "hbb",
"Huehuetla Tepehua": "tee",
"Huetar": "cba-hue",
"Huichol": "hch",
"Huilliche": "huh",
"Huitepec Mixtec": "mxs",
"Huizhou": "czh",
"Hukumina": "huw",
"Hula": "hul",
"Hulaulá": "huy",
"Huli": "hui",
"Hulung": "huk",
"Humburi Senni": "hmb",
"Humene": "huf",
"Hun": "uth",
"Hunde": "hke",
"Hung": "hnu",
"Hungana": "hum",
"Hungarian": "hu",
"Hungarian Sign Language": "hsh",
"Hungworo": "nat",
"Hunjara-Kaina Ke": "hkk",
"Hunnic": "xhc",
"Hunsrik": "hrx",
"Hunzib": "huz",
"Hupa": "hup",
"Hupdë": "jup",
"Hupla": "hap",
"Hurrian": "xhu",
"Hutterisch": "geh",
"Hwana": "hwo",
"Hya": "hya",
"Hyam": "jab",
"Hän": "haa",
"Hértevin": "hrt",
"I-Wak": "iwk",
"Iaai": "iai",
"Iamalele": "yml",
"Iatmul": "ian",
"Iau": "tmu",
"Ibali Teke": "tek",
"Ibaloi": "ibl",
"Iban": "iba",
"Ibanag": "ibg",
"Ibani": "iby",
"Ibatan": "ivb",
"Iberian": "xib",
"Ibibio": "ibb",
"Ibino": "ibn",
"Iboko": "bkp",
"Ibu": "ibu",
"Ibuoro": "ibr",
"Icelandic": "is",
"Icelandic Sign Language": "icl",
"Iceve-Maci": "bec",
"Ida'an": "dbj",
"Idakho-Isukha-Tiriki": "ida",
"Idaté": "idt",
"Idere": "ide",
"Idesa": "ids",
"Idi": "idi",
"Idiom Neutral": "mis-idn",
"Ido": "io",
"Idoma": "idu",
"Idon": "idc",
"Idu": "clk",
"Idun": "ldb",
"Iduna": "viv",
"Ifo": "iff",
"Ifè": "ife",
"Igala": "igl",
"Igana": "igg",
"Igbo": "ig",
"Igede": "ige",
"Ignaciano": "ign",
"Igo": "ahl",
"Iguta": "nar",
"Igwe": "igw",
"Iha": "ihp",
"Ihievbe": "ihi",
"Ija-Zuba": "vki",
"Ik": "ikx",
"Ika": "ikk",
"Ikaranggal": "ikr",
"Ikizu": "ikz",
"Iko": "iki",
"Ikobi-Mena": "meb",
"Ikoma": "ntk",
"Ikpeng": "txi",
"Ikpeshi": "ikp",
"Ikposo": "kpo",
"Iku-Gora-Ankwa": "ikv",
"Ikulu": "ikl",
"Ikwere": "ikw",
"Ikwo": "iqw",
"Ila": "ilb",
"Ile Ape": "ila",
"Ilgar": "ilg",
"Ili Turki": "ili",
"Ili'uun": "ilu",
"Ilianen Manobo": "mbi",
"Illyrian": "xil",
"Ilocano": "ilo",
"Ilongot": "ilk",
"Ilue": "ilv",
"Ilwana": "mlk",
"Imbongu": "imo",
"Imonda": "imn",
"Imroing": "imr",
"Inabaknon": "abx",
"Inapang": "mzu",
"Inari Sami": "smn",
"Indanga": "bnt-ind",
"Indian Sign Language": "ins",
"Indo-Portuguese": "idb",
"Indonesian": "id",
"Indonesian Bajau": "bdl",
"Indonesian Sign Language": "inl",
"Indri": "idr",
"Indus Kohistani": "mvy",
"Inebu One": "oin",
"Ineseño": "inz",
"Inga": "inb",
"Ingrian": "izh",
"Ingush": "inh",
"Inlaod Itneg": "iti",
"Inoke-Yate": "ino",
"Inonhan": "loc",
"Inor": "ior",
"Inpui Naga": "nkf",
"Interlingua": "ia",
"Interlingue": "ie",
"International Sign": "ils",
"Interslavic": "isv",
"Intha": "int",
"Inuinnaqtun": "esx-inq",
"Inuit Sign Language": "iks",
"Inuktitut": "iu",
"Inuktun": "esx-ink",
"Inupiaq": "ik",
"Inuvialuktun": "ikt",
"Ipai": "nai-ipa",
"Ipalapa Amuzgo": "azm",
"Ipiko": "ipo",
"Ipili": "ipi",
"Ipulo": "ass",
"Iquito": "iqu",
"Ir": "irr",
"Irantxe": "irn",
"Iranun": "ill",
"Iraqi Arabic": "acm",
"Iraqw": "irk",
"Irarutu": "irh",
"Iraya": "iry",
"Iresim": "ire",
"Irish": "ga",
"Irish Sign Language": "isg",
"Irula": "iru",
"Isabi": "isa",
"Isan": "tts",
"Isanzu": "isn",
"Isarog Agta": "agk",
"Isaurian": "mis-isa",
"Isconahua": "isc",
"Isebe": "igo",
"Ishkashimi": "isk",
"Isinai": "inn",
"Isirawa": "srl",
"Islander Creole English": "icr",
"Isnag": "isd",
"Isoko": "iso",
"Israeli Sign Language": "isr",
"Isthmus Mixe": "mir",
"Isthmus Zapotec": "zai",
"Istriot": "ist",
"Istro-Romanian": "ruo",
"Isu": "isu",
"Isubu": "szv",
"Italian": "it",
"Italian Sign Language": "ise",
"Italiot Greek": "grk-ita",
"Itawit": "itv",
"Itelmen": "itl",
"Itene": "ite",
"Iteri": "itr",
"Itik": "itx",
"Ito": "itw",
"Itonama": "ito",
"Itsekiri": "its",
"Itu Mbon Uzo": "itm",
"Itundujia Mixtec": "mce",
"Itza'": "itz",
"Iu Mien": "ium",
"Ivatan": "ivv",
"Iwaidja": "ibd",
"Iwal": "kbm",
"Iwam": "iwm",
"Iwur": "iwo",
"Ixcatec": "ixc",
"Ixcatlán Mazatec": "mzi",
"Ixil": "ixl",
"Ixtayutla Mixtec": "vmj",
"Ixtenco Otomi": "otz",
"Iyayu": "iya",
"Iyive": "uiv",
"Iyo": "nca",
"Iyo'wujwa Chorote": "crq",
"Iyojwa'ja Chorote": "crt",
"Izere": "izr",
"Izi": "izz",
"Izi-Ezaa-Ikwo-Mgbo": "izi",
"Izon": "ijc",
"Izora": "cbo",
"Iñapari": "inp",
"Jabem": "jae",
"Jabutí": "jbt",
"Jad": "jda",
"Jadgali": "jdg",
"Jah Hut": "jah",
"Jahanka": "jad",
"Jair Awyu": "awv",
"Jakaltek": "jac",
"Jakati": "jat",
"Jalapa de Díaz Mazatec": "maj",
"Jalkunan": "bxl",
"Jamaican Country Sign Language": "jcs",
"Jamaican Creole": "jam",
"Jamaican Sign Language": "jls",
"Jamamadí": "jaa",
"Jambi Malay": "jax",
"Jamiltepec Mixtec": "mxt",
"Jaminjung": "djd",
"Jamsay": "djm",
"Jamtish": "gmq-jmk",
"Jandavra": "jnd",
"Janday": "jan",
"Jangkang": "djo",
"Jangshung": "jna",
"Janji": "jni",
"Japanese": "ja",
"Japanese Sign Language": "jsl",
"Japhug": "sit-jap",
"Japrería": "jru",
"Jaqaru": "jqr",
"Jara": "jaf",
"Jarai": "jra",
"Jarawa": "anq",
"Jaru": "ddj",
"Jassic": "ysc",
"Jaunsari": "jns",
"Javanese": "jv",
"Javindo": "jvd",
"Jawe": "jaz",
"Jaya": "jyy",
"Jebero": "jeb",
"Jeh": "jeh",
"Jehai": "jhi",
"Jeikó": "sai-jko",
"Jeju": "jje",
"Jemez": "tow",
"Jenaama Bozo": "bze",
"Jeng": "jeg",
"Jennu Kurumba": "xuj",
"Jere": "jer",
"Jeri Kuo": "jek",
"Jersey Dutch": "gmw-jdt",
"Jeru": "akj",
"Jerung": "jee",
"Jhankot Sign Language": "jhs",
"Jiamao": "jio",
"Jiba": "juo",
"Jibu": "jib",
"Jicarilla": "apj",
"Jie": "mis-jie",
"Jiiddu": "jii",
"Jilbe": "jie",
"Jili": "mgi",
"Jilim": "jil",
"Jimi": "jmi",
"Jimjimen": "jim",
"Jin": "cjy",
"Jina": "jia",
"Jingpho": "kac",
"Jingulu": "jig",
"Jiongnai Bunu": "pnu",
"Jirajara": "sai-jrj",
"Jirel": "jul",
"Jiru": "jrr",
"Jita": "jit",
"Jizhao": "mis-jzh",
"Jju": "kaj",
"Joba": "job",
"Jofotek-Bromnya": "jbr",
"Jola-Fonyi": "dyo",
"Jola-Kasa": "csk",
"Jonkor Bourmataguil": "jeu",
"Jordanian Sign Language": "jos",
"Jorá": "jor",
"Jowulu": "jow",
"Ju": "juu",
"Juang": "jun",
"Juba Arabic": "pga",
"Judeo-Italian": "itk",
"Judeo-Persian": "jpr",
"Judeo-Tat": "jdt",
"Jukun Takum": "jbu",
"Jumaytepeque": "nai-jum",
"Jumjum": "jum",
"Jumla Sign Language": "jus",
"Jumli": "jml",
"Jungle Inga": "inj",
"Juquila Mixe": "mxq",
"Jur Modo": "bex",
"Juray": "juy",
"Jurchen": "juc",
"Jurúna": "jur",
"Jutiapa": "nai-jtp",
"Jutish": "jut",
"Juwal": "mwb",
"Juxtlahuaca Mixtec": "vmc",
"Juǀ'hoan": "ktz",
"Jwira-Pepesa": "jwi",
"Júma": "jua",
"K'iche'": "quc",
"Kaamba": "xku",
"Kaan": "ldl",
"Kaang Chin": "ckn",
"Kaansa": "gna",
"Kaapor Sign Language": "uks",
"Kaba": "ksp",
"Kabalai": "kvf",
"Kabatei": "xkp",
"Kabba-Laka": "lap",
"Kabishiana": "tup-kab",
"Kabiye": "kbp",
"Kabola": "klz",
"Kabore One": "onk",
"Kabras": "lkb",
"Kaburi": "uka",
"Kabutra": "kbu",
"Kabuverdianu": "kea",
"Kabwa": "cwa",
"Kabwari": "kcw",
"Kabyle": "kab",
"Kachama-Ganjule": "kcx",
"Kachari": "xac",
"Kachchi": "kfr",
"Kachi Koli": "gjk",
"Kacipo-Balesi": "koe",
"Kaco'": "xkk",
"Kadai": "kzd",
"Kadar": "kej",
"Kadara": "kad",
"Kadaru": "kdu",
"Kadiwéu": "kbc",
"Kado": "kdv",
"Kadu (Myanmar)": "zkd",
"Kadugli": "xtc",
"Kaduo": "ktp",
"Kaera": "jka",
"Kafa": "kbr",
"Kafoa": "kpu",
"Kagan Kalagan": "kll",
"Kagate": "syw",
"Kagayanen": "cgc",
"Kagoma": "kdm",
"Kagoro": "xkg",
"Kagulu": "kki",
"Kahe": "hka",
"Kahua": "agw",
"Kaian": "kct",
"Kaibobo": "kzb",
"Kaidipang": "kzp",
"Kaiep": "kbw",
"Kaikadi": "kep",
"Kaike": "kzq",
"Kaiku": "kkq",
"Kaimbulawa": "zka",
"Kaimbé": "xai",
"Kaingang": "kgp",
"Kairak": "ckr",
"Kairiru": "kxa",
"Kairui-Midiki": "krd",
"Kais": "kzm",
"Kaitag": "xdq",
"Kaivi": "kce",
"Kaiwá": "kgk",
"Kaiy": "tcq",
"Kajakse": "ckq",
"Kajali": "xkj",
"Kajaman": "kag",
"Kakabai": "kqf",
"Kakabe": "kke",
"Kakanda": "kka",
"Kaki Ae": "tbd",
"Kakihum": "kxe",
"Kako": "kkj",
"Kakwa": "keo",
"Kala": "kcl",
"Kala Lagaw Ya": "mwp",
"Kalaamaya": "lkm",
"Kalabakan": "kve",
"Kalabari": "ijn",
"Kalabra": "kzz",
"Kalagan": "kqe",
"Kalaktang Monpa": "kkf",
"Kalam": "kmh",
"Kalami": "gwc",
"Kalamsé": "knz",
"Kalanadi": "wkl",
"Kalanga": "kck",
"Kalao": "kly",
"Kalapuya": "kyl",
"Kalarko": "kba",
"Kalasha": "kls",
"Kalasuri": "xme-kls",
"Kalašma": "ine-kal",
"Kalenjin": "kln",
"Kalinago": "crb",
"Kalkatungu": "ktg",
"Kalkoti": "xka",
"Kallawaya": "caw",
"Kalmyk": "xal",
"Kalo Finnish Romani": "rmf",
"Kalou": "ywa",
"Kaluli": "bco",
"Kalumpang": "kli",
"Kam": "kdx",
"Kamakan": "vkm",
"Kamang": "woi",
"Kamano": "kbq",
"Kamantan": "kci",
"Kamar": "keq",
"Kamara": "jmr",
"Kamarian": "kzx",
"Kamaru": "kgx",
"Kamarupi Prakrit": "inc-kam",
"Kamasa": "klp",
"Kamasau": "kms",
"Kamassian": "xas",
"Kamayo": "kyk",
"Kamayurá": "kay",
"Kamba": "kam",
"Kambaata": "ktb",
"Kambaira": "kyy",
"Kambera": "xbr",
"Kamberataro": "kbv",
"Kamberau": "irx",
"Kambiwá": "xbw",
"Kami": "kmi",
"Kamkata-viri": "bsh",
"Kamo": "kcq",
"Kamoro": "kgq",
"Kamta": "rkt",
"Kamu": "xmu",
"Kamula": "xla",
"Kamwe": "hig",
"Kanakanabu": "xnb",
"Kanakuru": "kna",
"Kanamari": "knm",
"Kanashi": "xns",
"Kanasi": "soq",
"Kandas": "kqw",
"Kandawo": "gam",
"Kande": "kbs",
"Kang": "kyp",
"Kanga": "kcp",
"Kangean": "kkv",
"Kanggape": "igm",
"Kangjia": "kxs",
"Kango": "kty",
"Kango-Sua": "kzy",
"Kangri": "xnr",
"Kaniet": "ktk",
"Kanikkaran": "kev",
"Kaningdon-Nindem": "kdp",
"Kaningi": "kzo",
"Kaningra": "knr",
"Kaninuwa": "wat",
"Kanite": "kmu",
"Kanjari": "kft",
"Kanju": "kbe",
"Kankanaey": "kne",
"Kannada": "kn",
"Kannada Kurumba": "kfi",
"Kannauji": "bjj",
"Kanowit": "kxn",
"Kanoé": "kxo",
"Kansa": "ksk",
"Kantosi": "xkt",
"Kanu": "khx",
"Kanufi": "kni",
"Kanuri": "kr",
"Kanyok": "kny",
"Kao": "kax",
"Kaonde": "kqn",
"Kap": "ykm",
"Kapampangan": "pam",
"Kapauri": "khp",
"Kapin": "tbx",
"Kapinawá": "xpn",
"Kapingamarangi": "kpg",
"Kapriman": "dju",
"Kaptiau": "kbi",
"Kapya": "klo",
"Kaqchikel": "cak",
"Kaqchikel-K'iche' Mixed Language": "ckz",
"Kara (New Guinea)": "leu",
"Kara (Tanzania)": "reg",
"Karachay-Balkar": "krc",
"Karadjeri": "gbd",
"Karaga Mandaya": "mry",
"Karaim": "kdr",
"Karajá": "kpj",
"Karakalpak": "kaa",
"Karakhanid": "xqa",
"Karami": "xar",
"Karamojong": "kdj",
"Karang": "kzr",
"Karanga": "kth",
"Karankawa": "zkk",
"Karao": "kyj",
"Karas": "kgv",
"Karata": "kpt",
"Karawa": "xrw",
"Karbi": "mjw",
"Kare (Central Africa)": "kbn",
"Kare (New Guinea)": "kmf",
"Karekare": "kai",
"Karelian": "krl",
"Karey": "kyd",
"Kari": "kbj",
"Kari'na": "car",
"Karian": "bql",
"Karingani": "kgn",
"Karipuna": "kuq",
"Karipúna Creole French": "kmv",
"Kariri": "kzw",
"Karitiâna": "ktn",
"Kariya": "kil",
"Kariyarra": "vka",
"Karkar-Yuri": "yuj",
"Karkin": "krb",
"Karko": "kko",
"Karnai": "bbv",
"Karo": "kxh",
"Karo Batak": "btx",
"Karok": "kyh",
"Karolanos": "kyn",
"Karon": "krx",
"Karon Dori": "kgw",
"Karore": "xkx",
"Karranga": "xrq",
"Karuwali": "rxw",
"Kasanga": "ccj",
"Kasem": "xsm",
"Kashaya": "kju",
"Kashmiri": "ks",
"Kashubian": "csb",
"Kasiguranin": "ksn",
"Kaska": "kkz",
"Kaskean": "zsk",
"Kaskihá": "gva",
"Kassite": "mis-kas",
"Kassonke": "kao",
"Kasua": "khs",
"Kataang": "kgd",
"Katabaga": "ktq",
"Katawixi": "xat",
"Katembri": "sai-kat",
"Kathlamet": "nai-kat",
"Kathoriya Tharu": "tkt",
"Kathu": "ykt",
"Katkari": "kfu",
"Katla": "kcr",
"Kato": "ktw",
"Katso": "kaf",
"Katua": "kta",
"Katukina": "knt",
"Kaulong": "pss",
"Kaur": "vkk",
"Kaure": "bpp",
"Kaurna": "zku",
"Kauwera": "xau",
"Kavalan": "ckv",
"Kavet": "krv",
"Kawacha": "kcb",
"Kawaiisu": "xaw",
"Kawe": "kgb",
"Kawishana": "awd-kaw",
"Kawésqar": "alc",
"Kaxararí": "ktx",
"Kaxuyana": "kbb",
"Kayabí": "kyz",
"Kayagar": "kyt",
"Kayan": "pdu",
"Kayan Mahakam": "xay",
"Kayan River Kayan": "xkn",
"Kayapa Kallahan": "kak",
"Kayapó": "txu",
"Kayardild": "gyd",
"Kayeli": "kzl",
"Kayong": "kxy",
"Kayort": "kyv",
"Kaytetye": "gbb",
"Kayupulau": "kzu",
"Kazakh": "kk",
"Kazukuru": "kzk",
"Ke'o": "xxk",
"Keak": "keh",
"Keapara": "khz",
"Kedah Malay": "meo",
"Kedang": "ksx",
"Keder": "kdy",
"Kehu": "khh",
"Kei": "kei",
"Keiga": "kec",
"Kein": "bmh",
"Keiyo": "eyo",
"Kela-Yela": "kel",
"Kelabit": "kzi",
"Kelantan Peranakan Hokkien": "mis-hkl",
"Keley-I Kallahan": "ify",
"Keliko": "kbo",
"Kelo": "xel",
"Kelon": "kyo",
"Kemak": "kem",
"Kembayan": "xem",
"Kemberano": "bzp",
"Kembra": "xkw",
"Kemezung": "dmo",
"Kemi Sami": "sjk",
"Kemiehua": "kfj",
"Kemtuik": "kmt",
"Kenaboi": "xbn",
"Kenati": "gat",
"Kendayan": "knx",
"Kendeje": "klf",
"Kendem": "kvm",
"Kenga": "kyq",
"Keningau Murut": "kxi",
"Keninjal": "knl",
"Kensiu": "kns",
"Kenswei Nsei": "ndb",
"Kenyan Sign Language": "xki",
"Kenyang": "ken",
"Kenyi": "lke",
"Keoru-Ahia": "xeu",
"Kepkiriwát": "kpn",
"Kepo'": "kuk",
"Kera": "ker",
"Kerak": "hhr",
"Kereho": "xke",
"Kerek": "krk",
"Kerewe": "ked",
"Kerewo": "kxz",
"Kerinci": "kvr",
"Kermanic": "xme-ker",
"Ket": "ket",
"Ketangalan": "kae",
"Kete": "kcv",
"Ketengban": "xte",
"Ketum": "ktt",
"Kewa": "kew",
"Keyagana": "kyg",
"Kgalagadi": "xkv",
"Khakas": "kjh",
"Khalaj": "klj",
"Khaling": "klr",
"Khamnigan Mongol": "ykh",
"Khamti": "kht",
"Khamyang": "ksu",
"Khana": "ogo",
"Khandeshi": "khn",
"Khao": "xao",
"Kharam Naga": "kfw",
"Kharia": "khr",
"Kharia Thar": "ksy",
"Khasi": "kha",
"Khayo": "lko",
"Khazar": "zkz",
"Khe": "kqg",
"Khehek": "tlx",
"Khengkha": "xkf",
"Khetrani": "xhe",
"Khezha Naga": "nkh",
"Khiamniungan Naga": "kix",
"Khinalug": "kjj",
"Khirwar": "kwx",
"Khisa": "kqm",
"Khitan": "zkt",
"Khlula": "ykl",
"Khmer": "km",
"Khmu": "kjg",
"Khoekhoe": "naq",
"Khoibu Naga": "nkb",
"Khoini": "xkc",
"Kholok": "ktc",
"Kholosi": "inc-kho",
"Khorasani Turkish": "kmz",
"Khorezmian Turkic": "zkh",
"Khotanese": "kho",
"Khowar": "khw",
"Khroskyabs": "jiq",
"Khua": "xhv",
"Khuen": "khf",
"Khumi Chin": "cnk",
"Khvarshi": "khv",
"Khwarezmian": "xco",
"Khwe": "xuu",
"Kháng": "kjm",
"Khün": "kkh",
"Kiautschou German Pidgin": "crp-kia",
"Kibala": "blv",
"Kibena": "bez",
"Kibet": "kie",
"Kibiri": "prm",
"Kichwa": "qwe-kch",
"Kickapoo": "kic",
"Kikai": "kzg",
"Kikami": "kcu",
"Kikuyu": "ki",
"Kildin Sami": "sjd",
"Kili": "tuw-kli",
"Kilit": "xme-klt",
"Kilivila": "kij",
"Kiliwa": "klb",
"Kilmeri": "kih",
"Kim": "kia",
"Kim Mun": "mji",
"Kimaama": "kig",
"Kimaragang": "kqr",
"Kimbu": "kiv",
"Kimbundu": "kmb",
"Kimki": "sbt",
"Kimré": "kqp",
"Kinabalian": "cbw",
"Kinalakna": "kco",
"Kinaray-a": "krj",
"Kinga": "zga",
"Kings River Yokuts": "yok-kry",
"Kinikinao": "gqn",
"Kinnauri": "kfk",
"Kintaq": "knq",
"Kinuku": "kkd",
"Kioko": "ues",
"Kiong": "kkm",
"Kiorr": "xko",
"Kiowa": "kio",
"Kipchak": "qwm",
"Kipfokomo": "pkb",
"Kipsigis": "sgc",
"Kiput": "kyi",
"Kir-Balar": "kkr",
"Kire": "geb",
"Kirfi": "kks",
"Kirike": "okr",
"Kirikiri": "kiy",
"Kirya-Konzel": "fkk",
"Kis": "kis",
"Kisa": "lks",
"Kisan": "xis",
"Kisankasa": "kqh",
"Kisar": "kje",
"Kisi": "kiz",
"Kistane": "gru",
"Kita Maninkakan": "mwk",
"Kitanemuk": "azc-ktn",
"Kitembo": "tbt",
"Kitja": "gia",
"Kitsai": "kii",
"Kituba": "ktu",
"Kiunum": "wei",
"Kla": "lda",
"Klallam": "clm",
"Klamath-Modoc": "kla",
"Klao": "klu",
"Klias River Kadazan": "kqt",
"Klingon": "tlh",
"Knaanic": "czk",
"Ko": "fuj",
"Koalib": "kib",
"Koasati": "cku",
"Koba": "kpd",
"Kobiana": "kcj",
"Kobol": "kgu",
"Kobon": "kpw",
"Koch": "kdq",
"Kochila Tharu": "thq",
"Koda": "cdz",
"Kodaku": "ksz",
"Kodava": "kfa",
"Kodeoha": "vko",
"Kodi": "kod",
"Kodia": "kwp",
"Koenoem": "kcs",
"Kofa": "kso",
"Kofei": "kpi",
"Kofyar": "kwl",
"Kohin": "kkx",
"Kohistani Shina": "plk",
"Koho": "kpm",
"Kohumono": "bcs",
"Koi": "kkt",
"Koibal": "zkb",
"Koireng": "nkd",
"Koitabu": "kqi",
"Koiwat": "kxt",
"Kok-Nar": "gko",
"Kok-Paponk": "okg",
"Kokata": "ktd",
"Kokborok": "trp",
"Koke": "kou",
"Koko-Bera": "kkp",
"Kokoda": "xod",
"Kokola": "kzn",
"Kokota": "kkk",
"Kol (Cameroon)": "biw",
"Kol (New Guinea)": "kol",
"Kola": "kvv",
"Kolami": "kfb",
"Kolbila": "klc",
"Kolhe": "ekl",
"Kolibugan Subanon": "skn",
"Kolom": "klm",
"Koluwawa": "klx",
"Kom (Cameroon)": "bkm",
"Kom (India)": "kmm",
"Koma": "kmy",
"Komba": "kpf",
"Kombai": "tyn",
"Kombio": "xbi",
"Komering": "kge",
"Komi-Permyak": "koi",
"Komi-Yazva": "urj-kya",
"Komi-Zyrian": "kpv",
"Kominimung": "xoi",
"Komo": "xom",
"Komodo": "kvh",
"Kompane": "kvp",
"Komyandaret": "kzv",
"Kon Keu": "kkn",
"Konabéré": "bbo",
"Konai": "kxw",
"Konda": "knd",
"Konda-Dora": "kfc",
"Kondekor": "gau",
"Koneraw": "kdw",
"Kongo": "kg",
"Konkani": "kok",
"Konkomba": "xon",
"Konni": "kma",
"Kono (Guinea)": "knu",
"Kono (Nigeria)": "klk",
"Kono (Sierra Leone)": "kno",
"Konomala": "koa",
"Konomihu": "nai-knm",
"Konongo": "kcz",
"Konso": "kxc",
"Konyak Naga": "nbe",
"Konyanka Maninka": "mku",
"Konzo": "koo",
"Koonzime": "ozm",
"Koorete": "kqy",
"Kopar": "xop",
"Kopkaka": "opk",
"Korafe-Yegha": "kpr",
"Korak": "koz",
"Korana": "kqz",
"Korandje": "kcy",
"Korean": "ko",
"Korean Sign Language": "kvk",
"Koreguaje": "coe",
"Koresh-e Rostam": "okh",
"Korku": "kfq",
"Korlai Creole Portuguese": "vkp",
"Koro (India)": "jkr",
"Koro (Vanuatu)": "krf",
"Koro (West Africa)": "kfo",
"Koromfé": "kfz",
"Koromira": "kqj",
"Koromu": "xes",
"Koronadal Blaan": "bpr",
"Koroni": "xkq",
"Korop": "krp",
"Koropó": "xxr",
"Koroshi": "ktl",
"Korowai": "khe",
"Korra Koraga": "kfd",
"Korubo": "xor",
"Korupun-Sela": "kpq",
"Korwa": "kfp",
"Koryak": "kpy",
"Kosadle": "kiq",
"Kosarek Yale": "kkl",
"Koshin": "kid",
"Kosraean": "kos",
"Kota (Gabon)": "koq",
"Kota (India)": "kfe",
"Kota Bangun Kutai Malay": "mqg",
"Kota Marudu Talantang": "grm",
"Kotafon Gbe": "kqk",
"Kotava": "avk",
"Koti": "eko",
"Kott": "zko",
"Kou": "snz",
"Kouya": "kyf",
"Kovai": "kqb",
"Kove": "kvc",
"Kowaki": "xow",
"Kowiai": "kwh",
"Koy Sanjaq Surat": "kqd",
"Koya": "kff",
"Koyaga": "kga",
"Koyo": "koh",
"Koyra Chiini": "khq",
"Koyraboro Senni": "ses",
"Koyukon": "koy",
"Kpagua": "kuw",
"Kpala": "kpl",
"Kpan": "kpk",
"Kpasam": "pbn",
"Kpati": "koc",
"Kpatili": "kym",
"Kpee": "cpo",
"Kpelle": "kpe",
"Kpessi": "kef",
"Kplang": "kph",
"Krache": "kye",
"Krahô": "xra",
"Kraol": "rka",
"Krenak": "kqq",
"Kresh": "krs",
"Krevinian": "zkv",
"Kreye": "xre",
"Krikati-Timbira": "xri",
"Krim": "krm",
"Krio": "kri",
"Krisa": "ksi",
"Kristang": "mcm",
"Krobu": "kxb",
"Krongo": "kgo",
"Kru'ng": "krr",
"Krymchak": "jct",
"Kryts": "kry",
"Ktunaxa": "kut",
"Kua": "tyu",
"Kua-nsi": "ykn",
"Kuamasi": "yku",
"Kuan": "uan",
"Kuanhua": "xnh",
"Kube": "kgf",
"Kubi": "kof",
"Kubo": "jko",
"Kubu": "kvb",
"Kucong": "lkc",
"Kudiya": "kfg",
"Kudmali": "kyw",
"Kudu-Camo": "kov",
"Kugama": "kow",
"Kugbo": "kes",
"Kugu-Muminh": "xmh",
"Kui (India)": "kxu",
"Kui (Indonesia)": "kvd",
"Kuijau": "dkr",
"Kuikúro": "kui",
"Kujarge": "vkj",
"Kuk": "kfn",
"Kukatja": "kux",
"Kukele": "kez",
"Kukkuzi": "urj-kuk",
"Kukna": "kex",
"Kuku-Mangk": "xmq",
"Kuku-Mu'inh": "xmp",
"Kuku-Thaypan": "typ",
"Kuku-Ugbanh": "ugb",
"Kuku-Uwanh": "uwa",
"Kuku-Yalanji": "gvn",
"Kula": "tpg",
"Kulaal": "glj",
"Kulere": "kul",
"Kulfa": "kxj",
"Kulina": "xpk",
"Kulisusu": "vkl",
"Kullu Pahari": "kfx",
"Kulon": "uon",
"Kulung": "kle",
"Kumak": "nee",
"Kumalu": "ksl",
"Kumam": "kdi",
"Kuman": "kue",
"Kumaoni": "kfy",
"Kumarbhag Paharia": "kmj",
"Kumba": "ksm",
"Kumbainggar": "kgs",
"Kumbaran": "wkb",
"Kumbewaha": "xks",
"Kumeyaay": "nai-kum",
"Kumhali": "kra",
"Kumu": "kmw",
"Kumukio": "kuo",
"Kumyk": "kum",
"Kumzari": "zum",
"Kuna": "cuk",
"Kunama": "kun",
"Kunbarlang": "wlg",
"Kunda": "kdn",
"Kundal Shahi": "shd",
"Kunduvadi": "wku",
"Kung": "kfl",
"Kungarakany": "ggk",
"Kungardutyi": "gdt",
"Kunggari": "kgl",
"Kungkari": "lku",
"Kuni": "kse",
"Kuni-Boazi": "kvg",
"Kunigami": "xug",
"Kunimaipa": "kup",
"Kunja": "pep",
"Kunjen": "kjn",
"Kunyi": "njx",
"Kunza": "kuz",
"Kuo": "xuo",
"Kuot": "kto",
"Kupa": "kug",
"Kupang Malay": "mkn",
"Kupia": "key",
"Kupsabiny": "kpz",
"Kur": "kuv",
"Kura Ede Nago": "nqk",
"Kurama": "krh",
"Kuranko": "knk",
"Kuri": "nbn",
"Kuria": "kuj",
"Kurichiya": "kfh",
"Kurmukar": "kfv",
"Kurnai": "unn",
"Kurrama": "vku",
"Kursav": "faj",
"Kurti": "ktm",
"Kurtjar": "gdj",
"Kurtöp": "xkz",
"Kurudu": "kjr",
"Kurux": "kru",
"Kuruáya": "kyr",
"Kusaal": "kus",
"Kusaghe": "ksg",
"Kushi": "kuh",
"Kustenau": "awd-kus",
"Kusu": "ksv",
"Kusunda": "kgg",
"Kutang Ghale": "ght",
"Kutep": "kub",
"Kuthant": "xut",
"Kutto": "kpa",
"Kutu": "kdc",
"Kuturmi": "khj",
"Kuuk Thaayorre": "thd",
"Kuuk Yak": "uky",
"Kuuku-Ya'u": "kuy",
"Kuvale": "olu",
"Kuvi": "kxv",
"Kuwaa": "blh",
"Kuwaataay": "cwt",
"Kuwani": "paa-kwn",
"Kuy": "kdt",
"Kven": "fkv",
"Kw'adza": "wka",
"Kwa'": "bko",
"Kwaami": "ksq",
"Kwadi": "kwz",
"Kwaio": "kwd",
"Kwaja": "kdz",
"Kwak": "kwq",
"Kwak'wala": "kwk",
"Kwakum": "kwu",
"Kwalhioqua-Tlatskanai": "qwt",
"Kwama": "kmq",
"Kwambi": "kwm",
"Kwamera": "tnk",
"Kwami": "ktf",
"Kwamtim One": "okk",
"Kwang": "kvi",
"Kwanga": "kwj",
"Kwangali": "kwn",
"Kwanja": "knp",
"Kwanka": "bij",
"Kwanyama": "kj",
"Kwara'ae": "kwf",
"Kwasio": "nmg",
"Kwaya": "kya",
"Kwaza": "xwa",
"Kwegu": "xwg",
"Kwer": "kwr",
"Kwerba": "kwe",
"Kwerba Mamberamo": "xwr",
"Kwere": "cwe",
"Kwerisa": "kkb",
"Kwese": "kws",
"Kwesten": "kwt",
"Kwini": "gww",
"Kwinsu": "kuc",
"Kwinti": "kww",
"Kwoma": "kmo",
"Kwomtari": "kwo",
"Kyak": "bka",
"Kyaka": "kyc",
"Kyakala": "tuw-kkl",
"Kyan-Karyaw Naga": "nqq",
"Kyenele": "kql",
"Kyenga": "tye",
"Kyerung": "kgy",
"Kyrgyz": "ky",
"Kâte": "kmg",
"Kélé": "keb",
"Kómnzo": "paa-kmn",
"La'bi": "lbi",
"Laal": "gdm",
"Laalaa": "cae",
"Laba": "lau",
"Label": "lbb",
"Labir": "jku",
"Labo": "mwi",
"Labo Phowa": "ypb",
"Laboya": "lmy",
"Labu": "lbu",
"Labuk-Kinabatangan Kadazan": "dtb",
"Lacandon": "lac",
"Lachi": "lbt",
"Lachiguiri Zapotec": "zpa",
"Lachixío Zapotec": "zpl",
"Ladakhi": "lbj",
"Ladin": "lld",
"Ladino": "lad",
"Ladji-Ladji": "llj",
"Laeko-Libuat": "lkl",
"Lafofa": "laf",
"Laghu": "lgb",
"Laghuu": "lgh",
"Lagwan": "kot",
"Laha (Indonesia)": "lhh",
"Laha (Vietnam)": "lha",
"Lahanan": "lhn",
"Lahnda": "lah",
"Lahta Karen": "kvt",
"Lahu": "lhu",
"Lahu Shi": "lhi",
"Lahul Lohar": "lhl",
"Lai": "cnh",
"Laimbue": "lmx",
"Laitu Chin": "clj",
"Laiyolo": "lji",
"Lak": "lbe",
"Laka": "lak",
"Lakalei": "lka",
"Lake Miwok": "lmw",
"Lakha": "lkh",
"Laki": "lki",
"Lakkia": "lbc",
"Lakon": "lkn",
"Lakondê": "lkd",
"Lakota": "lkt",
"Lakota Dida": "dic",
"Lala (New Guinea)": "nrz",
"Lala (South Africa)": "bnt-lal",
"Lala-Bisa": "leb",
"Lala-Roba": "lla",
"Lalana Chinantec": "cnl",
"Lama Bai": "lay",
"Lamaholot": "slp",
"Lamalera": "lmr",
"Lamang": "hia",
"Lamatuka": "lmq",
"Lamba": "lam",
"Lambadi": "lmn",
"Lambichhong": "lmh",
"Lambya": "lai",
"Lame": "bma",
"Lamenu": "lmu",
"Lamet": "lbn",
"Lamja-Dengsa-Tola": "ldh",
"Lamkang": "lmk",
"Lamma": "lev",
"Lamnso'": "lns",
"Lamogai": "lmg",
"Lampung Api": "ljp",
"Lamu": "llh",
"Lamu-Lamu": "lby",
"Lanas Lobu": "ruu",
"Landoma": "ldm",
"Lang'e": "yne",
"Langbashe": "lna",
"Langi": "lag",
"Langnian Buyang": "yln",
"Lango (Sudan)": "lno",
"Lango (Uganda)": "laj",
"Lanima": "lnw",
"Lanoh": "lnh",
"Lao": "lo",
"Lao Naga": "nlq",
"Laomian": "lwm",
"Laopang": "lbg",
"Laos Sign Language": "lso",
"Lapaguía-Guivini Zapotec": "ztl",
"Lapine": "art-lap",
"Lapuyan Subanun": "laa",
"Laragia": "lrg",
"Larantuka Malay": "lrt",
"Lardil": "lbz",
"Larestani": "lrl",
"Larike-Wakasihu": "alo",
"Laro": "lro",
"Larteh": "lar",
"Laru": "lan",
"Larëvat": "lrv",
"Lasalimu": "llm",
"Lasgerdi": "lsa",
"Lashi": "lsi",
"Lasi": "lss",
"Latgalian": "ltg",
"Latin": "la",
"Latu": "ltu",
"Latundê": "ltn",
"Latvian": "lv",
"Latvian Sign Language": "lsl",
"Lau": "llu",
"Laua": "luf",
"Lauan": "llx",
"Lauje": "law",
"Laura": "lur",
"Laurentian": "lre",
"Lavatbura-Lamusong": "lbv",
"Lave": "brb",
"Laven": "lbo",
"Lavukaleve": "lvk",
"Lawangan": "lbx",
"Lawi": "lvi",
"Lawu": "lwu",
"Lawunuia": "tgi",
"Layakha": "lya",
"Laz": "lzz",
"Laze": "tbq-laz",
"Lealao Chinantec": "cle",
"Leco": "lec",
"Ledo Kaili": "lew",
"Leelau": "ldk",
"Lefa": "lfa",
"Lega-Mwenga": "lgm",
"Lega-Shabunda": "lea",
"Legbo": "agb",
"Legenyem": "lcc",
"Lehali": "tql",
"Leinong Naga": "lzn",
"Leipon": "lek",
"Leitre": "paa-lei",
"Leizhou Min": "luh",
"Lela": "dri",
"Lelak": "llk",
"Lele (Chad)": "lln",
"Lele (Congo)": "lel",
"Lele (Guinea)": "llc",
"Lele (New Guinea)": "lle",
"Lelemi": "lef",
"Lelepa": "lpa",
"Lembena": "leq",
"Lemerig": "lrz",
"Lemio": "lei",
"Lemnian": "xle",
"Lemolang": "ley",
"Lemoro": "ldj",
"Lenakel": "tnl",
"Lendu": "led",
"Lengilu": "lgi",
"Lengo": "lgr",
"Lengola": "lej",
"Lenje": "leh",
"Lenkau": "ler",
"Lenyima": "ldg",
"Leonese": "roa-leo",
"Lepcha": "lep",
"Lepki": "lpe",
"Lepontic": "xlp",
"Lere": "gnh",
"Lese": "les",
"Lesing-Gelimi": "let",
"Letemboi": "nms",
"Leti": "lti",
"Levuka": "lvu",
"Lewo": "lww",
"Lewo Eleng": "lwe",
"Lewotobi": "lwt",
"Leyigha": "ayi",
"Lezgi": "lez",
"Lhao Vo": "mhx",
"Lhokpu": "lhp",
"Li'o": "ljl",
"Liabuku": "lix",
"Liana-Seti": "ste",
"Liangmai Naga": "njn",
"Liberia Kpelle": "xpe",
"Liberian Kreyol": "lir",
"Libido": "liq",
"Libinza": "liz",
"Libon Bikol": "lbl",
"Liburnian": "xli",
"Libyan Arabic": "ayl",
"Libyan Sign Language": "lbs",
"Ligbi": "lig",
"Ligenza": "lgz",
"Ligurian": "lij",
"Lihir": "lih",
"Lika": "lik",
"Liki": "lio",
"Likila": "lie",
"Likuba": "kxx",
"Likum": "lib",
"Likwala": "kwc",
"Lilau": "lll",
"Lillooet": "lil",
"Limassa": "bme",
"Limbu": "lif",
"Limbum": "lmp",
"Limburgish": "li",
"Limi": "ylm",
"Limilngan": "lmc",
"Limos Kalinga": "kmk",
"Lindu": "klw",
"Linear A": "lab",
"Lingala": "ln",
"Lingao": "onb",
"Lingkhim": "lii",
"Lingua Franca Nova": "lfn",
"Linngithigh": "lnj",
"Lipan": "apl",
"Lipo": "lpo",
"Lisabata-Nuniali": "lcs",
"Lisela": "lcl",
"Lish": "lsh",
"Lishana Deni": "lsd",
"Lishanid Noshan": "aij",
"Lishán Didán": "trg",
"Lisu": "lis",
"Lithuanian": "lt",
"Lithuanian Sign Language": "lls",
"Little Swanport": "aus-lsw",
"Litzlitz": "lzl",
"Livonian": "liv",
"Livvi": "olo",
"Lizu": "sit-liz",
"Lo-Toga": "lht",
"Loarki": "lrk",
"Lobala": "loq",
"Lobi": "lob",
"Lodhi": "lbm",
"Logba": "lgq",
"Logo": "log",
"Logol": "lof",
"Logooli": "rag",
"Logorik": "liu",
"Lojban": "jbo",
"Lokaa": "yaz",
"Loko": "lok",
"Lokono": "arw",
"Lokoya": "lky",
"Lola": "lcd",
"Lolak": "llq",
"Lole": "llg",
"Lolo": "llb",
"Loloda": "loa",
"Lolopo": "ycl",
"Loma": "lom",
"Lomaiviti": "lmv",
"Lomakka": "loi",
"Lomavren": "rmi",
"Lombard": "lmo",
"Lombi": "lmi",
"Lombo": "loo",
"Lomwe": "ngl",
"Loncong": "lce",
"Long Phuri Naga": "lpn",
"Long Wat": "ttw",
"Longgu": "lgu",
"Longjia": "sit-lnj",
"Longto": "wok",
"Longuda": "lnu",
"Longyan Min": "nan-lnx",
"Loniu": "los",
"Lonwolwol": "crc",
"Loo": "ldo",
"Lopa": "lop",
"Lope": "yiu",
"Lopi": "lov",
"Lopit": "lpx",
"Lorang": "lrn",
"Lorediakarkar": "lnn",
"Lorrain": "roa-lor",
"Lote": "uvl",
"Lotha Naga": "njh",
"Lotud": "dtr",
"Lotuko": "lot",
"Lou": "loj",
"Louisiana Creole": "lou",
"Loun": "lox",
"Loup A": "xlo",
"Loup B": "xlb",
"Lovono": "vnk",
"Low German": "nds",
"Lower Burdekin": "xbb",
"Lower Chehalis": "cea",
"Lower Grand Valley Dani": "dni",
"Lower Mandobo": "bwp",
"Lower Nossob": "nsb",
"Lower Sorbian": "dsb",
"Lower Southern Aranda": "axl",
"Lower Ta'oih": "tto",
"Lower Tanana": "taa",
"Lowland Oaxaca Chontal": "clo",
"Lowland Tarahumara": "tac",
"Loxicha Zapotec": "ztp",
"Lozi": "loz",
"Luang": "lex",
"Luba-Kasai": "lua",
"Luba-Katanga": "lu",
"Lubila": "kcc",
"Lubu": "lcf",
"Lubuagan Kalinga": "knb",
"Luchazi": "lch",
"Lucumí": "luq",
"Ludian": "lud",
"Lufu": "ldq",
"Luganda": "lg",
"Lugbara": "lgg",
"Luguru": "ruf",
"Luhu": "lcq",
"Luhya": "luy",
"Luimbi": "lum",
"Luiseño": "lui",
"Lukpa": "dop",
"Lule": "ule",
"Lule Sami": "smj",
"Lumba-Yakkha": "luu",
"Lumbu": "lup",
"Lumun": "lmd",
"Lun Bawang": "lnd",
"Luna": "luj",
"Lunanakha": "luk",
"Lunda": "lun",
"Lungga": "lga",
"Luo": "luo",
"Luopohe Hmong": "hml",
"Luren": "sit-lrn",
"Luri (Nigeria)": "ldd",
"Lusengo": "lse",
"Lushootseed": "lut",
"Lusi": "khl",
"Lusitanian": "xls",
"Lutachoni": "lts",
"Lutos": "ndy",
"Lutuv": "clt",
"Luvale": "lue",
"Luwati": "luv",
"Luwian": "xlu",
"Luwo": "lwo",
"Luxembourgish": "lb",
"Luyana": "lyn",
"Lwalu": "lwa",
"Lwel": "lvl",
"Lycian": "xlc",
"Lydian": "xld",
"Lyngngam": "lyg",
"Lyélé": "lee",
"Láadan": "ldn",
"Láá Láá Bwamu": "bwj",
"Löyöp": "urr",
"Lü": "khb",
"Ma": "msj",
"Ma Manda": "skc",
"Ma'anyan": "mhy",
"Ma'di": "mhi",
"Ma'ya": "slz",
"Maaka": "mew",
"Maale": "mdy",
"Maasai": "mas",
"Maay": "ymm",
"Maba": "mqa",
"Mabaale": "mmz",
"Mabaan": "mfz",
"Mabaka Valley Kalinga": "kkg",
"Mabire": "muj",
"Maca": "mca",
"Macaguaje": "mcl",
"Macaguán": "mbn",
"Macanese": "mzs",
"Macau Pidgin Portuguese": "crp-mpp",
"Macedonian": "mk",
"Machame": "jmc",
"Machiguenga": "mcb",
"Machinere": "mpd",
"Machinga": "mvw",
"Macoris": "nai-mac",
"Macuna": "myy",
"Macushi": "mbc",
"Mada (Cameroon)": "mxu",
"Mada (Nigeria)": "mda",
"Madagascar Sign Language": "mzc",
"Madak": "mmx",
"Maden": "xmx",
"Madhi Madhi": "dmd",
"Madi": "grg",
"Madngele": "zml",
"Madukayang Kalinga": "kmd",
"Madurese": "mad",
"Maeng Itneg": "itt",
"Mafa": "maf",
"Mag-Anchi Ayta": "sgb",
"Mag-Indi Ayta": "blx",
"Magahat": "mtw",
"Magahi": "mag",
"Magdalena Peñasco Mixtec": "xtm",
"Magi": "gkd",
"Magiyi": "gmg",
"Magoma": "gmx",
"Magori": "zgr",
"Maguindanao": "mdh",
"Mahali": "mjx",
"Mahasu Pahari": "bfz",
"Mahican": "mjy",
"Mahongwe": "mhb",
"Mahou": "mxx",
"Maia": "sks",
"Maiadomu": "mzz",
"Maiani": "tnh",
"Maii": "mmm",
"Mailu": "mgu",
"Maindo": "cwb",
"Maipure": "awd-mpr",
"Mairasi": "zrs",
"Maisin": "mbq",
"Maithili": "mai",
"Maiwa (Indonesia)": "wmm",
"Maiwa (New Guinea)": "mti",
"Maiwala": "mum",
"Majang": "mpe",
"Majera": "xmj",
"Majhi": "mjz",
"Majhwar": "mmj",
"Mak (China)": "mkg",
"Mak (Nigeria)": "pbl",
"Makaa": "mcp",
"Makah": "myh",
"Makalero": "mjb",
"Makasae": "mkz",
"Makasar": "mak",
"Makassar Malay": "mfp",
"Makayam": "aup",
"Makhuwa": "vmw",
"Makhuwa-Marrevone": "xmc",
"Makhuwa-Meetto": "mgh",
"Makhuwa-Moniga": "mhm",
"Makhuwa-Saka": "xsq",
"Makhuwa-Shirima": "vmk",
"Maklew": "mgf",
"Makolkol": "zmh",
"Makonde": "kde",
"Maku": "xak",
"Maku'a": "lva",
"Makuri Naga": "jmn",
"Makuráp": "mpu",
"Makwe": "ymk",
"Makyan Naga": "umn",
"Mal": "mlf",
"Mal Paharia": "mkb",
"Mala (New Guinea)": "ped",
"Mala (Nigeria)": "ruy",
"Mala Malasar": "ima",
"Malaccan Creole Malay": "ccm",
"Malagasy": "mg",
"Malalamai": "mmt",
"Malalí": "sai-mal",
"Malango": "mln",
"Malankuravan": "mjo",
"Malapandaram": "mjp",
"Malaryan": "mjq",
"Malas": "mkr",
"Malasanga": "mqz",
"Malasar": "ymr",
"Malavedan": "mjr",
"Malawi Lomwe": "lon",
"Malawian Sign Language": "lws",
"Malay": "ms",
"Malayalam": "ml",
"Malayic Dayak": "xdy",
"Malaynon": "mlz",
"Malaysian Sign Language": "xml",
"Malba Birifor": "bfo",
"Male": "mdc",
"Malecite-Passamaquoddy": "pqm",
"Maleng": "pkt",
"Maleu-Kilenge": "mgl",
"Malfaxal": "mlx",
"Malgana": "vml",
"Malgbe": "mxf",
"Mali": "gcc",
"Malibu": "sai-mlb",
"Malila": "mgq",
"Malimba": "mzd",
"Malimpung": "mli",
"Malinaltepec Tlapanec": "tcf",
"Malol": "mbk",
"Maltese": "mt",
"Maltese Sign Language": "mdl",
"Malua Bay": "mll",
"Malvi": "mup",
"Maléku Jaíka": "gut",
"Mam": "mam",
"Mama": "mma",
"Mamaa": "mhf",
"Mamaindé": "wmd",
"Mamanwa": "mmn",
"Mamara": "myk",
"Mamasa": "mqj",
"Mambae": "mgm",
"Mambai": "mcs",
"Mamboru": "mvd",
"Mambwe-Lungu": "mgr",
"Mampruli": "maw",
"Mamuju": "mqx",
"Mamulique": "emm",
"Mamusi": "kdf",
"Mamvu": "mdi",
"Man Met": "mml",
"Manado Malay": "xmm",
"Manam": "mva",
"Manambu": "mle",
"Manangba": "nmm",
"Manangkari": "znk",
"Manao": "awd-man",
"Manat": "pmr",
"Manchu": "mnc",
"Manda (Australia)": "zma",
"Manda (India)": "mha",
"Manda (Tanzania)": "mgs",
"Mandahuaca": "mht",
"Mandaic": "mid",
"Mandailing Batak": "btm",
"Mandalorian": "art-man",
"Mandan": "mhq",
"Mandandanyi": "zmk",
"Mandar": "mdr",
"Mandara": "tbf",
"Mandari": "mqu",
"Mandarin": "cmn",
"Mandeali": "mjl",
"Mander": "mqr",
"Mandingo": "man",
"Mandinka": "mnk",
"Mandjak": "mfv",
"Manem": "jet",
"Mang": "zng",
"Mangala": "mem",
"Mangarayi": "mpc",
"Mangarevan": "mrv",
"Mangas": "zns",
"Mangayat": "myj",
"Mangbetu": "mdj",
"Mangbutu": "mdk",
"Mangerr": "zme",
"Mangga Buang": "mmo",
"Manggarai": "mqy",
"Mangghuer": "mjg-mgr",
"Mango": "mge",
"Mangole": "mqc",
"Mangseng": "mbh",
"Manigri-Kambolé Ede Nago": "xkb",
"Manipa": "mqp",
"Manipuri": "mni",
"Mankanya": "knf",
"Mankiyali": "nlm",
"Manna-Dora": "mju",
"Mannan": "mjv",
"Mano": "mev",
"Manombai": "woo",
"Mansaka": "msk",
"Mansoanka": "msw",
"Manta": "myg",
"Mantsi": "nty",
"Manumanaw Karen": "kxf",
"Manus Koro": "kxr",
"Manusela": "wha",
"Manx": "gv",
"Manya": "mzj",
"Manyawa": "mny",
"Manza": "mzv",
"Mao Naga": "nbi",
"Maonan": "mmd",
"Maore Comorian": "swb",
"Mape": "mlh",
"Mapena": "mnm",
"Mapia": "mpy",
"Mapidian": "mpw",
"Mapos Buang": "bzh",
"Mapoyo": "mcg",
"Mapudungun": "arn",
"Mapun": "sjm",
"Mara": "mec",
"Mara Chin": "mrh",
"Marachi": "lri",
"Maraghei": "vmh",
"Maragus": "mrs",
"Maram Naga": "nma",
"Marama": "lrm",
"Maranao": "mrw",
"Maranungku": "zmr",
"Mararit": "mgb",
"Marathi": "mr",
"Maratino": "sai-mar",
"Marau": "mvr",
"Marawan": "awd-mar",
"Marba": "mpg",
"Marenje": "vmr",
"Marfa": "mvu",
"Margany": "zmc",
"Marghi South": "mfm",
"Margi": "mrt",
"Mari (Austronesian)": "hob",
"Mari (Sepik)": "mbx",
"Maria": "mds",
"Mariaté": "awd-mrt",
"Maricopa": "mrc",
"Maridan": "zmd",
"Maridjabin": "zmj",
"Marik": "dad",
"Marimanindji": "zmm",
"Marind": "mrz",
"Maring": "mbw",
"Maring Naga": "nng",
"Maringarr": "zmt",
"Mariri": "mqi",
"Maritime Sign Language": "nsr",
"Maritsauá": "msp",
"Mariupol Greek": "grk-mar",
"Mariyedi": "zmy",
"Marka": "rkm",
"Markweeta": "enb",
"Marma": "rmz",
"Maroon Spirit Language": "crp-mar",
"Marovo": "mvo",
"Marrgu": "mhg",
"Marriammu": "xru",
"Marrithiyel": "mfr",
"Marrucinian": "umc",
"Marshallese": "mh",
"Marsian": "ims",
"Martha's Vineyard Sign Language": "mre",
"Marti Ke": "zmg",
"Martu Wangka": "mpj",
"Martuthunira": "vma",
"Marwari": "mwr",
"Marúbo": "mzr",
"Masaba": "myx",
"Masadiit Itneg": "tis",
"Masakará": "sai-msk",
"Masalit": "mls",
"Masana": "mcn",
"Masbate Sorsogon": "bks",
"Masbatenyo": "msb",
"Mashco Piro": "cuj",
"Mashi": "mho",
"Masimasi": "ism",
"Masiwang": "bnf",
"Maskelynes": "klv",
"Maslam": "msv",
"Masmaje": "mes",
"Massachusett": "wam",
"Massalat": "mdg",
"Massep": "mvs",
"Matagalpa": "mtn",
"Matal": "mfh",
"Matanawi": "sai-mat",
"Matbat": "xmt",
"Matengo": "mgv",
"Matepi": "mqe",
"Matigsalug Manobo": "mbt",
"Matipuhy": "mzo",
"Matlatzinca": "mat",
"Mato": "met",
"Mator": "mtm",
"Matsés": "mcf",
"Mattole": "mvb",
"Matukar": "mjk",
"Matumbi": "mgw",
"Matya Samo": "stj",
"Matís": "mpq",
"Maung": "mph",
"Mauritian Creole": "mfe",
"Mauritian Sign Language": "lsy",
"Mauwake": "mhl",
"Mav̋ea": "mkv",
"Mawa": "mcw",
"Mawak": "mjj",
"Mawan": "mcz",
"Mawayana": "mzx",
"Mawchi": "mke",
"Mawes": "mgk",
"Maxakalí": "mbl",
"Maxi Gbe": "mxl",
"Maya Samo": "sym",
"Mayaguduna": "xmy",
"Mayangna": "yan",
"Mayawali": "yxa",
"Maybrat": "ayz",
"Mayeka": "myc",
"Mayi-Thakurti": "xyt",
"Maykulan": "mnt",
"Maynas": "sai-mys",
"Mayo": "mfy",
"Mayogo": "mdm",
"Mayoyao Ifugao": "ifu",
"Mazagway": "dkx",
"Mazaltepec Zapotec": "zpy",
"Mazanderani": "mzn",
"Mazatlán Mazatec": "vmz",
"Mazatlán Mixe": "mzl",
"Mba": "mfc",
"Mbabaram": "vmb",
"Mbala": "mdp",
"Mbalanhu": "lnb",
"Mbandja": "zmz",
"Mbangala": "mxg",
"Mbangi": "mgn",
"Mbangwe": "zmn",
"Mbara (Australia)": "mvl",
"Mbara (Chad)": "mpk",
"Mbariman-Gudhinma": "zmv",
"Mbati": "mdn",
"Mbato": "gwa",
"Mbay": "myb",
"Mbe": "mfo",
"Mbe'": "mtk",
"Mbelime": "mql",
"Mbere": "mdt",
"Mbesa": "zms",
"Mbiywom": "aus-mbi",
"Mbo (Cameroon)": "mbo",
"Mbo (Congo)": "zmw",
"Mboi": "moi",
"Mboko": "mdu",
"Mbole": "mdq",
"Mbonga": "xmb",
"Mbongno": "bgu",
"Mbosi": "mdw",
"Mbowe": "mxo",
"Mbre": "mka",
"Mbu'": "muc",
"Mbudum": "xmd",
"Mbugu": "mhd",
"Mbugwe": "mgz",
"Mbuko": "mqb",
"Mbukushu": "mhw",
"Mbula": "mna",
"Mbula-Bwazza": "mbu",
"Mbule": "mlb",
"Mbulungish": "mbv",
"Mbum": "mdd",
"Mbunda": "mck",
"Mbunga": "mgy",
"Mburku": "bbt",
"Mbuun": "zmp",
"Mbwela": "mfu",
"Mbya Guarani": "gun",
"Me'en": "mym",
"Mebu": "mjn",
"Mecayapan Nahuatl": "nhx",
"Medebur": "mjm",
"Medefaidrin": "dmf",
"Media Lengua": "mue",
"Mednyj Aleut": "mud",
"Medumba": "byv",
"Mefele": "mfj",
"Megam": "mef",
"Megleno-Romanian": "ruq",
"Mehek": "nux",
"Mehináku": "mmh",
"Mehri": "gdq",
"Mekeo": "mek",
"Mekmek": "mvk",
"Mekwei": "msf",
"Mekéns": "skf",
"Mel-Khaonh": "hkn",
"Mele-Fila": "mxe",
"Melo": "mfx",
"Melpa": "med",
"Memoni": "mby",
"Mendalam Kayan": "xkd",
"Mendankwe-Nkwen": "mfd",
"Mende (New Guinea)": "sim",
"Mende (Sierra Leone)": "men",
"Mengaka": "xmg",
"Mengen": "mee",
"Mengisa": "leo",
"Menien": "sai-men",
"Menka": "mea",
"Menominee": "mez",
"Mentawai": "mwv",
"Menya": "mcr",
"Meoswar": "mvx",
"Mer": "mnu",
"Meramera": "mxm",
"Merei": "lmb",
"Merey": "meq",
"Meriam": "ulk",
"Meroitic": "xmr",
"Meru": "mer",
"Mesaka": "iyo",
"Mese": "mci",
"Mesme": "zim",
"Mesmes": "mys",
"Mesqan": "mvz",
"Messapic": "cms",
"Meta'": "mgo",
"Metlatónoc Mixtec": "mxv",
"Mewari": "mtr",
"Mewati": "wtm",
"Mexican Sign Language": "mfs",
"Meyah": "mej",
"Mezontla Popoloca": "pbe",
"Mezquital Otomi": "ote",
"Meänkieli": "fit",
"Mfinu": "zmf",
"Mfumte": "nfu",
"Mgbo": "gmz",
"Mi'kmaq": "mic",
"Miami": "mia",
"Mian": "mpt",
"Miani": "pla",
"Micha": "yiq",
"Michif": "crg",
"Michigamea": "cmm",
"Michoacán Mazahua": "mmc",
"Michoacán Nahuatl": "ncl",
"Mid Grand Valley Dani": "dnt",
"Mid-Southern Banda": "bjo",
"Middle Armenian": "axm",
"Middle Assamese": "inc-mas",
"Middle Bengali": "inc-mbn",
"Middle Breton": "xbm",
"Middle Chinese": "ltc",
"Middle Cornish": "cnx",
"Middle Dutch": "dum",
"Middle English": "enm",
"Middle French": "frm",
"Middle Gujarati": "inc-mgu",
"Middle High German": "gmh",
"Middle Irish": "mga",
"Middle Kannada": "dra-mkn",
"Middle Khmer": "xhm",
"Middle Korean": "okm",
"Middle Low German": "gml",
"Middle Median": "xme-mid",
"Middle Mon": "mkh-mmn",
"Middle Mongol": "xng",
"Middle Newar": "nwx",
"Middle Norwegian": "gmq-mno",
"Middle Odia": "inc-mor",
"Middle Persian": "pal",
"Middle Scots": "gmw-msc",
"Middle Vietnamese": "mkh-mvi",
"Middle Watut": "mpl",
"Middle Welsh": "wlm",
"Midob": "mei",
"Migaama": "mmy",
"Migabac": "mpp",
"Miji": "sjl",
"Miju": "mxj",
"Mikasuki": "mik",
"Milang": "tbq-mil",
"Mili": "ymh",
"Millcayac": "sai-mil",
"Miltu": "mlj",
"Miluk": "iml",
"Milyan": "imy",
"Mimi of Decorse": "mis-mmd",
"Mimi of Nachtigal": "mis-mmn",
"Min Nan": "nan",
"Mina": "hna",
"Minaean": "inm",
"Minang": "xrg",
"Minangkabau": "min",
"Minaveha": "mvn",
"Minderico": "drc",
"Mindiri": "mpn",
"Mingang Doso": "mko",
"Mingo": "iro-min",
"Mingrelian": "xmf",
"Minica Huitoto": "hto",
"Minidien": "wii",
"Minjungbal": "xjb",
"Minkin": "xxm",
"Minoan": "omn",
"Minokok": "mqq",
"Minriq": "mnq",
"Mintil": "mzt",
"Mirandese": "mwl",
"Mire": "mvh",
"Mirgan": "zrg",
"Miriti": "mmv",
"Miriwoong": "mep",
"Miriwoong Sign Language": "rsm",
"Mirning": "gmr",
"Mirpur Panjabi": "pmu",
"Misantla Totonac": "tlc",
"Miship": "mjs",
"Misima-Paneati": "mpx",
"Mising": "mrg",
"Miskito": "miq",
"Mitla Zapotec": "zaw",
"Mitlatongo Mixtec": "vmm",
"Mittu": "mwu",
"Mituku": "zmq",
"Miu": "mpo",
"Miwa": "vmi",
"Mixed Great Andamanese": "gac",
"Mixifore": "mfg",
"Mixtepec Mixtec": "mix",
"Mixtepec Zapotec": "zpm",
"Miya": "mkf",
"Miyako": "mvi",
"Miyobe": "soy",
"Mizo": "lus",
"Mlabri": "mra",
"Mlahsö": "lhs",
"Mlap": "kja",
"Mlomp": "mlo",
"Mmaala": "mmu",
"Mmani": "buy",
"Mmen": "bfm",
"Mo": "wkd",
"Mo'da": "gbn",
"Moabite": "obm",
"Moba": "mfq",
"Mobilian": "mod",
"Mobu": "ahm",
"Mocana": "sai-mcn",
"Mochi": "old",
"Mochica": "omc",
"Mocho": "mhc",
"Mocoví": "moc",
"Modang": "mxd",
"Modole": "mqo",
"Moere": "mvq",
"Mofu-Gudur": "mif",
"Mogholi": "mhj",
"Mogum": "mou",
"Mohawk": "moh",
"Mohegan-Pequot": "xpq",
"Moi (Congo)": "mow",
"Moi (Indonesia)": "mxn",
"Moikodi": "mkp",
"Moingi": "mwz",
"Mojave": "mov",
"Moji": "ymi",
"Mok": "mqt",
"Mokati": "wnb",
"Moken": "mwt",
"Mokerang": "mft",
"Mokilese": "mkj",
"Moklen": "mkm",
"Mokole": "mkl",
"Mokpwe": "bri",
"Moksha": "mdf",
"Molale": "mbe",
"Molbog": "pwm",
"Moldova Sign Language": "vsi",
"Molengue": "bxc",
"Molima": "mox",
"Molmo One": "aun",
"Molo": "zmo",
"Molof": "msl",
"Moloko": "mlw",
"Mom Jango": "ver",
"Moma": "myl",
"Momare": "msz",
"Mombo Dogon": "dmb",
"Mombum": "mso",
"Momina": "mmb",
"Momuna": "mqf",
"Mon": "mnw",
"Monastic Sign Language": "mzg",
"Mondropolon": "npn",
"Mondé": "mnd",
"Mongghul": "mjg-mgl",
"Mongo": "lol",
"Mongolian": "mn",
"Mongolian Sign Language": "msr",
"Mongondow": "mog",
"Mongsen Ao": "njo-mng",
"Moni": "mnz",
"Monimbo": "mom",
"Mono (California)": "mnr",
"Mono (Cameroon)": "mru",
"Mono (Congo)": "mnh",
"Monom": "moo",
"Monsang Naga": "nmh",
"Montagnais": "moe",
"Montana Salish": "fla",
"Montol": "mtl",
"Monumbo": "mxk",
"Monzombo": "moj",
"Moo": "gwg",
"Moore": "mos",
"Moose Cree": "crm",
"Mopan Maya": "mop",
"Mor (Austronesian)": "mhz",
"Mor (Papuan)": "moq",
"Moraid": "msg",
"Moran": "tbq-mor",
"Morawa": "mze",
"Morelos Nahuatl": "nhm",
"Morerebi": "xmo",
"Moresada": "msx",
"Mori Atas": "mzq",
"Mori Bawah": "xmz",
"Morigi": "mdb",
"Moriori": "rrm",
"Moro": "mor",
"Moroccan Amazigh": "zgh",
"Moroccan Arabic": "ary",
"Moroccan Sign Language": "xms",
"Morokodo": "mgc",
"Morom": "bdo",
"Moronene": "mqn",
"Morori": "mok",
"Morouas": "mrp",
"Mortlockese": "mrl",
"Moru": "mgd",
"Mosimo": "mqv",
"Moskona": "mtj",
"Mota": "mtt",
"Motembo": "tmv",
"Motu": "meu",
"Mouk-Aria": "mwh",
"Mount Iraya Agta": "atl",
"Mount Iriga Agta": "agz",
"Mountain Koiari": "kpx",
"Mouwase": "jmw",
"Movima": "mzp",
"Moyadan Itneg": "ity",
"Moyon Naga": "nmo",
"Mozambican Sign Language": "mzy",
"Mozarabic": "mxi",
"Mpade": "mpi",
"Mpalitjanh": "xpj",
"Mpi": "mpz",
"Mpiemo": "mcx",
"Mpiin": "bnt-mpi",
"Mpinda": "pnd",
"Mpongmpong": "mgg",
"Mpoto": "mpa",
"Mpotovoro": "mvt",
"Mpuono": "bnt-mpu",
"Mpur": "akc",
"Mro Chin": "cmr",
"Mru": "mro",
"Mser": "kqx",
"Muak Sa-aak": "ukk",
"Mualang": "mtd",
"Mubami": "tsx",
"Mubi": "mub",
"Mucuchí": "sai-muc",
"Muda": "ymd",
"Mudburra": "dmw",
"Mudu Koraga": "vmd",
"Muduapa": "wiv",
"Muduga": "udg",
"Muellama": "sai-mue",
"Mufian": "aoj",
"Muher": "sem-mhr",
"Muinane": "bmr",
"Mukha-Dora": "mmk",
"Mukulu": "moz",
"Mulaha": "mfw",
"Mulam": "mlm",
"Mulao": "giu",
"Mullu Kurumba": "kpb",
"Mullukmulluk": "mpb",
"Muluridyi": "vmu",
"Mum": "kqa",
"Mumuye": "mzm",
"Muna": "mnb",
"Munda": "unx",
"Mundabli": "boe",
"Mundang": "mua",
"Mundani": "mnf",
"Mundari": "unr",
"Mundat": "mmf",
"Mundolinco": "art-mun",
"Mundurukú": "myu",
"Mungaka": "mhk",
"Mungbam": "mij",
"Munggui": "mth",
"Mungkip": "mpv",
"Muniche": "myr",
"Munit": "mtc",
"Munji": "mnj",
"Munsee": "umu",
"Muong": "mtq",
"Mur Pano": "tkv",
"Muratayak": "asx",
"Murik (Malaysia)": "mxr",
"Murik (New Guinea)": "mtf",
"Murkim": "rmh",
"Murle": "mur",
"Murrinh-Patha": "mwf",
"Mursi": "muz",
"Murui Huitoto": "huu",
"Murupi": "mqw",
"Muruwari": "zmu",
"Musan": "mmp",
"Musasa": "smm",
"Musey": "mse",
"Musgu": "mug",
"Musi": "mui",
"Muskum": "mje",
"Musom": "msu",
"Mussau-Emira": "emi",
"Muthuvan": "muv",
"Mutu": "tuc",
"Muya": "mvm",
"Muyang": "muy",
"Muyuw": "myw",
"Muzi": "ymz",
"Muzo": "sai-muz",
"Mvanip": "mcj",
"Mvuba": "mxh",
"Mwaghavul": "sur",
"Mwakai": "mgt",
"Mwali Comorian": "wlc",
"Mwan": "moa",
"Mwani": "wmw",
"Mwatebu": "mwa",
"Mwera": "mwe",
"Mwerlap": "mrm",
"Mwimbi-Muthambi": "mws",
"Mwotlap": "mlv",
"Mycenaean Greek": "gmy",
"Myene": "mye",
"Mysian": "yms",
"Mzieme Naga": "nme",
"Mághdì": "gmd",
"Mòcheno": "mhn",
"Mün Chin": "mwq",
"Mündü": "muh",
"Māori": "mi",
"Mạ": "cma",
"N'Ko": "nqo",
"Na": "nbt",
"Naaba": "nao",
"Naba": "mne",
"Nabak": "naf",
"Nabi": "mty",
"Nachering": "ncd",
"Nadruvian": "ndf",
"Nadëb": "mbj",
"Nafaanra": "nfr",
"Nafi": "srf",
"Nafri": "nxx",
"Naga Pidgin": "nag",
"Nagarchal": "nbg",
"Nage": "nxe",
"Nagtipunan Agta": "phi-nag",
"Nagu": "ngr",
"Nagumi": "ngv",
"Nahali": "nlx",
"Nahari": "nhh",
"Nahavaq": "sns",
"Nahuatl": "nah",
"Nai": "bio",
"Najdi Arabic": "ars",
"Naka'ela": "nae",
"Nakai": "nkj",
"Nakame": "nib",
"Nakanai": "nak",
"Nakara": "nck",
"Nake": "nbk",
"Naki": "mff",
"Nakwi": "nax",
"Nalca": "nlc",
"Nali": "nss",
"Nalik": "nal",
"Nalu": "naj",
"Nalögo": "nlz",
"Nama": "nmx",
"Namakura": "nmk",
"Namat": "nkm",
"Nambikwara": "nab",
"Nambo": "ncm",
"Nambya": "nmq",
"Namia": "nnm",
"Namiae": "nvm",
"Namibian Sign Language": "nbs",
"Namla": "naa",
"Namo": "mxw",
"Namonuito": "nmt",
"Namosi-Naitasiri-Serua": "bwb",
"Namuyi": "nmy",
"Nanai": "gld",
"Nancere": "nnc",
"Nande": "nnb",
"Nandi": "niq",
"Nanerige": "sen",
"Nanga Dama Dogon": "nzz",
"Nankina": "nnk",
"Nanti": "cox",
"Nanticoke": "nnt",
"Nanubae": "afk",
"Naolan": "nai-nao",
"Napu": "npy",
"Nar Phu": "npa",
"Nara": "nrb",
"Narak": "nac",
"Narango": "nrg",
"Narim": "loh",
"Naro": "nhr",
"Narom": "nrm",
"Narragansett": "xnt",
"Narua": "nru",
"Narungga": "nnr",
"Naruo": "ylo",
"Nasal": "nsy",
"Nasarian": "nvh",
"Nasioi": "nas",
"Naskapi": "nsk",
"Nasu": "ywq",
"Natagaimas": "nts",
"Natchez": "ncz",
"Nateni": "ntm",
"Natioro": "nti",
"Natú": "sai-nat",
"Natügu": "ntu",
"Nauete": "nxa",
"Naukanski": "ynk",
"Nauna": "ncn",
"Nauo": "nwo",
"Nauruan": "na",
"Navajo": "nv",
"Navut": "nsw",
"Nawaru": "nwr",
"Nawathinehena": "nwa",
"Nawdm": "nmz",
"Nawuri": "naw",
"Naxi": "nxq",
"Nayi": "noz",
"Naʼvi": "art-nav",
"Ncane": "ncr",
"Nchumbulu": "nlu",
"Nda'nda'": "nnz",
"Ndai": "gke",
"Ndaka": "ndk",
"Ndali": "ndh",
"Ndam": "ndm",
"Ndamba": "ndj",
"Ndambomo": "nxo",
"Ndasa": "nda",
"Ndau": "ndc",
"Nde-Gbite": "ned",
"Nde-Nsele-Nta": "ndd",
"Ndemli": "nml",
"Ndendeule": "dne",
"Ndengereko": "ndg",
"Nding": "eli",
"Ndjébbana": "djj",
"Ndo": "ndp",
"Ndobo": "ndw",
"Ndoe": "nbb",
"Ndogo": "ndz",
"Ndolo": "ndl",
"Ndom": "nqm",
"Ndombe": "ndq",
"Ndonga": "ng",
"Ndoola": "ndr",
"Ndrulo": "dno",
"Nduga": "ndx",
"Ndumu": "nmd",
"Ndunda": "nuh",
"Ndunga": "ndt",
"Ndut": "ndv",
"Ndyuka-Trio Pidgin": "njt",
"Ndzwani Comorian": "wni",
"Neapolitan": "nap",
"Nedebang": "nec",
"Nefamese": "nef",
"Nefusa": "jbn",
"Negerhollands": "dcr",
"Negeri Sembilan Malay": "zmi",
"Negidal": "neg",
"Nehan": "nsn",
"Nek": "nif",
"Nekgini": "nkg",
"Neko": "nej",
"Neku": "nek",
"Neme": "nex",
"Nemi": "nem",
"Nen": "nqn",
"Nend": "anh",
"Nengone": "nen",
"Neo": "neu",
"Nepalese Sign Language": "nsp",
"Nepali": "ne",
"Nete": "net",
"Neve'ei": "vnm",
"Neverver": "lgk",
"New Caledonian Javanese": "jas",
"New River Shasta": "nai-nrs",
"New Zealand Sign Language": "nzs",
"Newar": "new",
"Neyo": "ney",
"Nez Perce": "nez",
"Nga La": "hlt",
"Ngaanyatjarra": "ntj",
"Ngadha": "nxg",
"Ngadjunmaya": "nju",
"Ngadjuri": "jui",
"Ngaiawang": "nwg",
"Ngaing": "nnf",
"Ngaju": "nij",
"Ngala": "nud",
"Ngalakan": "nig",
"Ngalkbun": "ngk",
"Ngalum": "szb",
"Ngam": "nmc",
"Ngamambo": "nbv",
"Ngambay": "sba",
"Ngamini": "nmv",
"Ngamo": "nbh",
"Ngan'gityemerri": "nam",
"Nganakarti": "xnk",
"Nganasan": "nio",
"Ngandi": "nid",
"Ngando (Central African Republic)": "ngd",
"Ngando (Congo)": "nxd",
"Ngandyera": "nne",
"Ngangam": "gng",
"Ngantangarra": "ntg",
"Nganyaywana": "nyx",
"Ngardi": "rxd",
"Ngarigu": "xni",
"Ngarinman": "nbj",
"Ngarinyin": "ung",
"Ngarla": "nrk",
"Ngarluma": "nrl",
"Ngarrindjeri": "nay",
"Ngas": "anc",
"Ngasa": "nsg",
"Ngatik Men's Creole": "ngm",
"Ngawn Chin": "cnw",
"Ngawun": "nxn",
"Ngazidja Comorian": "zdj",
"Ngbaka": "nga",
"Ngbaka Ma'bo": "nbm",
"Ngbaka Manza": "ngg",
"Ngbee": "jgb",
"Ngbinda": "nbd",
"Ngbundu": "nuu",
"Ngelima": "agh",
"Ngemba": "nge",
"Ngen of Djonkro": "gnj",
"Ngendelengo": "nql",
"Ngeq": "ngt",
"Ngete": "nnn",
"Nggem": "nbq",
"Nggwahyi": "ngx",
"Ngie": "ngj",
"Ngiemboon": "nnh",
"Ngile": "jle",
"Ngindo": "nnq",
"Ngiti": "niy",
"Ngiyambaa": "wyb",
"Ngizim": "ngi",
"Ngkoth": "aus-ngk",
"Ngkâlmpw Kanum": "kcd",
"Ngochang": "tbq-ngo",
"Ngom": "nra",
"Ngomba": "jgo",
"Ngombale": "nla",
"Ngombe (Central African Republic)": "nmj",
"Ngombe (Congo)": "ngc",
"Ngong": "nnx",
"Ngongo": "noq",
"Ngoni": "ngo",
"Ngoreme": "ngq",
"Ngoshie": "nsh",
"Ngul": "nlo",
"Ngulu": "ngp",
"Nguluwan": "nuw",
"Ngumbi": "nui",
"Ngunawal": "xul",
"Ngundi": "ndn",
"Ngundu": "nue",
"Ngungwel": "ngz",
"Ngurmbur": "nrx",
"Nguôn": "nuo",
"Ngwaba": "ngw",
"Ngwe": "nwe",
"Ngwo": "ngn",
"Ngäbere": "gym",
"Nhanda": "nha",
"Nheengatu": "yrl",
"Nhirrpi": "hrp",
"Nhuwala": "nhf",
"Nias": "nia",
"Nicaraguan Creole": "bzk",
"Nicaraguan Sign Language": "ncs",
"Nicola": "ath-nic",
"Niellim": "nie",
"Nigeria Mambila": "mzk",
"Nigerian Pidgin": "pcm",
"Nigerian Sign Language": "nsi",
"Nihali": "nll",
"Nii": "nii",
"Niksek": "gbe",
"Nila": "nil",
"Nilamba": "nim",
"Nimadi": "noe",
"Nimanbur": "nmp",
"Nimbari": "nmr",
"Nimboran": "nir",
"Nimi": "nis",
"Nimo": "niw",
"Nimoa": "nmw",
"Ninam": "shb",
"Nindi": "nxi",
"Ningera": "nby",
"Ninggerum": "nxr",
"Ningil": "niz",
"Ninia Yali": "nlk",
"Ninzo": "nin",
"Nipsan": "nps",
"Nisa": "njs",
"Nisenan": "nsz",
"Nisga'a": "ncg",
"Nisi": "yso",
"Niuafo'ou": "num",
"Niuatoputapu": "nkp",
"Niuean": "niu",
"Nivaclé": "cag",
"Nivkh": "niv",
"Niwer Mil": "hrc",
"Niya Prakrit": "pra-niy",
"Njalgulgule": "njl",
"Njebi": "nzb",
"Njen": "njj",
"Njerep": "njr",
"Njyem": "njy",
"Nkami": "nkq",
"Nkangala": "nkn",
"Nkari": "nkz",
"Nkem-Nkum": "isi",
"Nkhumbi": "khu",
"Nkongho": "nkc",
"Nkonya": "nko",
"Nkoroo": "nkx",
"Nkoya": "nka",
"Nkukoli": "nbo",
"Nkutu": "nkw",
"Nnam": "nbp",
"Noakhali": "oak",
"Nobiin": "fia",
"Nobonob": "gaw",
"Nocamán": "nom",
"Nocte": "njb",
"Nogai": "nog",
"Noipä": "npx",
"Noiri": "noi",
"Nokuku": "nkk",
"Nomaande": "lem",
"Nomane": "nof",
"Nomatsiguenga": "not",
"Nomlaki": "nol",
"Nomu": "noh",
"Nong Zhuang": "zhn",
"Nonuya": "noj",
"Nooksack": "nok",
"Noon": "snf",
"Noone": "nhu",
"Nootka": "nuk",
"Nopala Chatino": "cya",
"Noric": "nrc",
"Norman": "nrf",
"Norn": "nrn",
"Norra": "nrr",
"North Ambrym": "mmg",
"North Asmat": "nks",
"North Awyu": "yir",
"North Babar": "bcd",
"North Boma": "boh",
"North Central Mixe": "neq",
"North Efate": "llp",
"North Fali": "fll",
"North Frisian": "frr",
"North Giziga": "gis",
"North Levantine Arabic": "apc",
"North Marquesan": "mrq",
"North Mesopotamian Arabic": "ayp",
"North Mofu": "mfk",
"North Moluccan Malay": "max",
"North Muyu": "kti",
"North Nuaulu": "nni",
"North Picene": "nrp",
"North Slavey": "scs",
"North Tairora": "tbg",
"North Tanna": "tnn",
"North Tukang Besi": "khc",
"North Wahgi": "whg",
"North Watut": "una",
"Northeast Kiwai": "kiw",
"Northeast Maidu": "nmu",
"Northeast Malakula": "upv",
"Northeast Pashayi": "aee",
"Northeastern Dinka": "dip",
"Northeastern Pomo": "pef",
"Northern Alta": "aqn",
"Northern Altai": "atv",
"Northern Amami Ōshima": "ryn",
"Northern Bontoc": "rbk",
"Northern Catanduanes Bikol": "cts",
"Northern Dagara": "dgi",
"Northern East Cree": "crl",
"Northern Emberá": "emp",
"Northern Ghale": "ghh",
"Northern Grebo": "gbo",
"Northern Guiyang Hmong": "huj",
"Northern Haida": "hdn",
"Northern Hindko": "hno",
"Northern Huishui Hmong": "hmi",
"Northern Kalapuya": "nrt",
"Northern Kam": "doc",
"Northern Khanty": "kca-nor",
"Northern Khmer": "kxm",
"Northern Kissi": "kqs",
"Northern Kurdish": "kmr",
"Northern Lorung": "lbr",
"Northern Luri": "lrc",
"Northern Mansi": "mns-nor",
"Northern Mashan Hmong": "hmp",
"Northern Min": "mnp",
"Northern Muji": "ymx",
"Northern Ndebele": "nd",
"Northern Ngbandi": "ngb",
"Northern Nisu": "yiv",
"Northern Nuni": "nuv",
"Northern Oaxaca Nahuatl": "nhy",
"Northern Ohlone": "cst",
"Northern One": "onr",
"Northern Paiute": "pao",
"Northern Pame": "pmq",
"Northern Pinghua": "cnp",
"Northern Pomo": "pej",
"Northern Puebla Nahuatl": "ncj",
"Northern Pumi": "pmi",
"Northern Pwo": "pww",
"Northern Qiandong Miao": "hea",
"Northern Qiang": "cng",
"Northern Rengma Naga": "nnl",
"Northern Roglai": "rog",
"Northern Saharan Berber": "mzb",
"Northern Sami": "se",
"Northern Selkup": "sel-nor",
"Northern Sierra Miwok": "nsq",
"Northern Sotho": "nso",
"Northern Subanen": "stb",
"Northern Tarahumara": "thh",
"Northern Tepehuan": "ntp",
"Northern Thai": "nod",
"Northern Tidung": "ntd",
"Northern Tlaxiaco Mixtec": "xtn",
"Northern Toussian": "tsp",
"Northern Tujia": "tji",
"Northern Tutchone": "ttm",
"Northern Valley Yokuts": "yok-nvy",
"Northern Yukaghir": "ykg",
"Northwest Gbaya": "gya",
"Northwest Maidu": "mjd",
"Northwest Oaxaca Mixtec": "mxa",
"Northwest Pashayi": "glh",
"Northwestern Dinka": "diw",
"Northwestern Fars": "faz",
"Northwestern Ojibwa": "ojb",
"Norwegian": "no",
"Norwegian Bokmål": "nb",
"Norwegian Nynorsk": "nn",
"Norwegian Sign Language": "nsl",
"Notre": "bly",
"Notsi": "ncf",
"Nottoway": "ntw",
"Nottoway-Meherrin": "nwy",
"Novial": "nov",
"Noy": "noy",
"Nsari": "asj",
"Nsenga": "nse",
"Nshi": "nsc",
"Nsong": "soo",
"Nsongo": "nsx",
"Ntcham": "bud",
"Ntomba": "nto",
"Ntra'ngith": "dgt",
"Nubaca": "baf",
"Nubi": "kcn",
"Nuer": "nus",
"Nuguria": "nur",
"Nuk": "noc",
"Nukak Makú": "mbr",
"Nukna": "klt",
"Nukuini": "nuc",
"Nukumanu": "nuq",
"Nukunu": "nnv",
"Nukunul": "xnu",
"Nukuoro": "nkr",
"Numana": "nbr",
"Numanggang": "nop",
"Numbami": "sij",
"Nume": "tgs",
"Numidian": "nxm",
"Numèè": "kdk",
"Nungali": "nug",
"Nunggubuyu": "nuy",
"Nungon": "paa-nun",
"Nungu": "rin",
"Nuosu": "ii",
"Nupbikha": "npb",
"Nupe": "nup",
"Nusa Laut": "nul",
"Nusu": "nuf",
"Nutabe": "cba-nut",
"Nyabwa": "nwb",
"Nyagrong Minyag": "ero-nya",
"Nyah Kur": "cbn",
"Nyaheun": "nev",
"Nyakyusa": "nyy",
"Nyali": "nlj",
"Nyam": "nmi",
"Nyamal": "nly",
"Nyambo": "now",
"Nyamusa-Molo": "nwm",
"Nyamwanga": "mwn",
"Nyamwezi": "nym",
"Nyaneka": "nyk",
"Nyang'i": "nyp",
"Nyanga (Congo)": "nyj",
"Nyanga (Togo)": "ayg",
"Nyanga-li": "nyc",
"Nyangatom": "nnj",
"Nyangbo": "nyb",
"Nyangga": "nny",
"Nyangumarta": "nna",
"Nyankole": "nyn",
"Nyarafolo": "sev",
"Nyaturu": "rim",
"Nyaw": "nyw",
"Nyawaygi": "nyt",
"Nyelâyu": "yly",
"Nyemba": "nba",
"Nyengo": "nye",
"Nyenkha": "neh",
"Nyeu": "nyl",
"Nyigina": "nyh",
"Nyiha": "nih",
"Nyika": "nkt",
"Nyimang": "nyi",
"Nyindrou": "lid",
"Nyindu": "nyg",
"Nyishi": "njz",
"Nyiyaparli": "xny",
"Nyokon": "nvo",
"Nyole (Kenya)": "nyd",
"Nyole (Uganda)": "nuj",
"Nyong": "muo",
"Nyoro": "nyo",
"Nyulnyul": "nyv",
"Nyunga": "nys",
"Nyungwe": "nyu",
"Nzadi": "nzd",
"Nzakambay": "nzy",
"Nzakara": "nzk",
"Nzanyi": "nja",
"Nzima": "nzi",
"Ná-Meo": "neo",
"Nùng": "nut",
"Nüpode Huitoto": "hux",
"Nǀuu": "ngh",
"O'chi'chi'": "xoc",
"O'du": "tyh",
"O'odham": "ood",
"Obanliku": "bzy",
"Obispeño": "obi",
"Oblo": "obl",
"Obo Manobo": "obo",
"Obokuitai": "afz",
"Obolo": "ann",
"Obulom": "obu",
"Ocaina": "oca",
"Occitan": "oc",
"Ocotepec Mixtec": "mie",
"Ocotlán Zapotec": "zac",
"Od": "odk",
"Odia": "or",
"Odiai": "bhf",
"Odoodee": "kkc",
"Odual": "odu",
"Odut": "oda",
"Ofayé": "opy",
"Ofo": "ofo",
"Ogbah": "ogc",
"Ogbia": "ogb",
"Ogbogolo": "ogg",
"Ogbronuagum": "ogu",
"Ogea": "eri",
"Oirata": "oia",
"Ojibwe": "oj",
"Ojitlán Chinantec": "chj",
"Okanagan": "oka",
"Okiek": "oki",
"Okinawan": "ryu",
"Okinoerabu": "okn",
"Oko-Eni-Osayen": "oks",
"Oko-Juwoi": "okj",
"Okobo": "okb",
"Okodia": "okd",
"Okolod": "kqv",
"Okpamheri": "opa",
"Okpe (Northwestern Edo)": "okx",
"Okpe (Southwestern Edo)": "oke",
"Okpela": "atg",
"Oksapmin": "opm",
"Oku": "oku",
"Okwanuchu": "nai-okw",
"Old Anatolian Turkish": "trk-oat",
"Old Armenian": "xcl",
"Old Avar": "oav",
"Old Awadhi": "inc-oaw",
"Old Bengali": "inc-obn",
"Old Breton": "obt",
"Old Burmese": "obr",
"Old Catalan": "roa-oca",
"Old Cham": "ocm",
"Old Chinese": "och",
"Old Church Slavonic": "cu",
"Old Cornish": "oco",
"Old Czech": "zlw-ocs",
"Old Danish": "gmq-oda",
"Old Dutch": "odt",
"Old East Slavic": "orv",
"Old English": "ang",
"Old French": "fro",
"Old Frisian": "ofs",
"Old Galician-Portuguese": "roa-opt",
"Old Georgian": "oge",
"Old Gujarati": "inc-ogu",
"Old Gutnish": "gmq-ogt",
"Old High German": "goh",
"Old Hindi": "inc-ohi",
"Old Hungarian": "ohu",
"Old Irish": "sga",
"Old Japanese": "ojp",
"Old Javanese": "kaw",
"Old Kannada": "dra-okn",
"Old Kentish Sign Language": "okl",
"Old Khmer": "okz",
"Old Komi": "urj-koo",
"Old Korean": "oko",
"Old Leonese": "roa-ole",
"Old Lithuanian": "olt",
"Old Manipuri": "omp",
"Old Marathi": "omr",
"Old Median": "xme-old",
"Old Mon": "omx",
"Old Navarro-Aragonese": "roa-ona",
"Old Norse": "non",
"Old Novgorodian": "zle-ono",
"Old Nubian": "onw",
"Old Occitan": "pro",
"Old Odia": "inc-oor",
"Old Persian": "peo",
"Old Polish": "zlw-opl",
"Old Prussian": "prg",
"Old Punjabi": "inc-opa",
"Old Ruthenian": "zle-ort",
"Old Saxon": "osx",
"Old Slovak": "zlw-osk",
"Old South Arabian": "sem-srb",
"Old Spanish": "osp",
"Old Sundanese": "osn",
"Old Swedish": "gmq-osw",
"Old Tamil": "oty",
"Old Tati": "xme-ott",
"Old Telugu": "dra-ote",
"Old Tibetan": "otb",
"Old Tupi": "tpw",
"Old Turkic": "otk",
"Old Uyghur": "oui",
"Old Welsh": "owl",
"Olekha": "ole",
"Ollari": "gdb",
"Olo": "ong",
"Oloma": "olm",
"Olrat": "olr",
"Olu'bo": "lul",
"Olukumi": "ulb",
"Olulumo-Ikom": "iko",
"Oluta Popoluca": "plo",
"Olutsotso": "lto",
"Omagua": "omg",
"Omaha-Ponca": "oma",
"Omani Arabic": "acx",
"Omba": "omb",
"Ombamba": "mbm",
"Ombo": "oml",
"Ometepec Nahuatl": "nht",
"Omi": "omi",
"Omok": "omk",
"Omotik": "omt",
"Omurano": "omu",
"Oneida": "one",
"Ong": "oog",
"Ongota": "bxe",
"Onin": "oni",
"Onjob": "onj",
"Ono": "ons",
"Onobasulu": "onn",
"Onondaga": "ono",
"Ontong Java": "ojv",
"Oorlams": "oor",
"Opao": "opo",
"Opata": "opt",
"Opuuo": "lgn",
"Opón": "sai-opo",
"Oraon Sadri": "sdr",
"Orejón": "ore",
"Oring": "org",
"Orizaba Nahuatl": "nlv",
"Orléanais": "roa-orl",
"Ormu": "orz",
"Ormuri": "oru",
"Oro": "orx",
"Oro Win": "orw",
"Oroch": "oac",
"Oroha": "ora",
"Orok": "oaa",
"Orokaiva": "okv",
"Oroko": "bdu",
"Orokolo": "oro",
"Oromo": "om",
"Oroqen": "orh",
"Orowe": "bpk",
"Oruma": "orr",
"Orya": "ury",
"Osage": "osa",
"Osamayi": "syx",
"Osatu": "ost",
"Oscan": "osc",
"Osing": "osi",
"Ososo": "oso",
"Ossetian": "os",
"Ot Danum": "otd",
"Otank": "uta",
"Oti": "oti",
"Otomaco": "sai-oto",
"Otoro": "otr",
"Ottawa": "otw",
"Ottoman Turkish": "ota",
"Otuke": "otu",
"Ouma": "oum",
"Oune": "oue",
"Owa": "stn",
"Owenia": "wsr",
"Owiniga": "owi",
"Oy": "oyb",
"Oya'oya": "oyy",
"Oyda": "oyd",
"Ozolotepec Zapotec": "zao",
"Ozumacín Chinantec": "chz",
"Pa": "ppt",
"Pa Di": "pdi",
"Pa'a": "pqa",
"Pa'o Karen": "blk",
"Pa-Hng": "pha",
"Paamese": "pma",
"Paasaal": "sig",
"Pacahuara": "pcp",
"Pacoh": "pac",
"Padoe": "pdo",
"Paelignian": "pgn",
"Paeonian": "ine-pae",
"Pagi": "pgi",
"Pagibete": "pae",
"Pagu": "pgu",
"Pahanan Agta": "apf",
"Pahari-Potwari": "phr",
"Pahi": "lgt",
"Pahlavani": "phv",
"Pai Tavytera": "pta",
"Paicî": "pri",
"Paikoneka": "awd-pai",
"Paipai": "ppi",
"Paite": "pck",
"Paiwan": "pwn",
"Pajapan Nahuatl": "nhp",
"Pajonal Ashéninka": "cjo",
"Pak-Tong": "pkg",
"Pakanha": "pkn",
"Pakistan Sign Language": "pks",
"Paku": "pku",
"Paku Karen": "jkp",
"Pal": "abw",
"Palaic": "plq",
"Palaka": "plr",
"Palantla Chinantec": "cpa",
"Palauan": "pau",
"Palawan Batak": "bya",
"Paleni": "pnl",
"Palenquero": "pln",
"Palewyami Yokuts": "yok-ply",
"Pali": "pi",
"Palikur": "plu",
"Paliyan": "pcf",
"Pallanganmiddang": "pmd",
"Palor": "fap",
"Palta": "sai-pal",
"Palu'e": "ple",
"Paluan": "plz",
"Palula": "phl",
"Palya Bareli": "bpx",
"Pam": "pmn",
"Pambia": "pmb",
"Pamigua": "sai-pam",
"Pamlico": "pmk",
"Pamona": "pmf",
"Pamosu": "hih",
"Pamplona Atta": "att",
"Pana (Central Africa)": "pnz",
"Pana (West Africa)": "pnq",
"Panamanian Sign Language": "lsp",
"Panamint": "par",
"Panare": "pbh",
"Panará": "kre",
"Panasuan": "psn",
"Panawa": "pwb",
"Pancana": "pnp",
"Panchpargania": "tdb",
"Pande": "bkj",
"Pangasinan": "pag",
"Pangseng": "pgs",
"Pangutaran Sama": "slm",
"Pangwa": "pbr",
"Pangwali": "pgg",
"Panim": "pnr",
"Paniya": "pcg",
"Pankararé": "pax",
"Pankararú": "paz",
"Pankhu": "pkh",
"Pannei": "pnc",
"Pannonian Rusyn": "rsk",
"Panobo": "pno",
"Panyi Bai": "bfc",
"Panyjima": "pnw",
"Panzaleo": "sai-pnz",
"Pao": "ppa",
"Papantla Totonac": "top",
"Papapana": "ppn",
"Papar": "dpp",
"Papasena": "pas",
"Papel": "pbo",
"Papi": "ppe",
"Papiamentu": "pap",
"Papora": "ppu",
"Papua New Guinean Sign Language": "pgz",
"Papuan Malay": "pmy",
"Papuma": "ppm",
"Para Naga": "pzn",
"Parachi": "prc",
"Paraguayan Guarani": "gug",
"Paraguayan Sign Language": "pys",
"Parakanã": "pak",
"Paranan": "prf",
"Paranawát": "paf",
"Paratió": "sai-par",
"Paraujano": "pbg",
"Parauk": "prk",
"Parawen": "prw",
"Pardhan": "pch",
"Pardhi": "pcl",
"Pare": "asa",
"Pareci": "pab",
"Paredarerme": "xpd",
"Parenga": "pcj",
"Parkari Koli": "kvx",
"Parthian": "xpr",
"Parya": "paq",
"Pará Gavião": "gvp",
"Pashto": "ps",
"Pasi": "psq",
"Pass Valley Yali": "yac",
"Pasé": "awd-pas",
"Patagón": "sai-ptg",
"Patamona": "pbc",
"Patani": "ptn",
"Pataxó Hã-Ha-Hãe": "pth",
"Patep": "ptp",
"Pathiya": "pty",
"Patpatar": "gfk",
"Pattani": "lae",
"Pattani Malay": "mfa",
"Pattapu": "ptq",
"Patwin": "pwi",
"Paulohi": "plh",
"Paumarí": "pad",
"Paunaka": "pnk",
"Pauri Bareli": "bfb",
"Pauserna": "psm",
"Pawaia": "pwa",
"Pawnee": "paw",
"Payaguá": "sai-pyg",
"Pazeh": "pzh",
"Pe": "pai",
"Pear": "pcb",
"Peba": "sai-peb",
"Pech": "pay",
"Pecheneg": "xpc",
"Peerapper": "xpw",
"Peere": "pfe",
"Pei": "ppq",
"Pekal": "pel",
"Pela": "bxd",
"Pele-Ata": "ata",
"Pemon": "aoc",
"Penang Sign Language": "psg",
"Penchal": "pek",
"Pendau": "ums",
"Pengo": "peg",
"Pennsylvania German": "pdc",
"Penobscot": "aaq",
"Penrhyn": "pnh",
"Pentlatch": "ptw",
"Perai": "wet",
"Peranakan Indonesian": "pea",
"Perema": "wom",
"Perené Ashéninka": "prq",
"Pericú": "nai-per",
"Pero": "pip",
"Persian": "fa",
"Persian Sign Language": "psc",
"Peruvian Sign Language": "prl",
"Petapa Zapotec": "zpe",
"Petats": "pex",
"Petjo": "pey",
"Peñoles Mixtec": "mil",
"Phai": "prt",
"Phake": "phk",
"Phala": "ypa",
"Phana'": "phq",
"Phangduwali": "phw",
"Phende": "pem",
"Philippine Sign Language": "psp",
"Philistine": "mis-phi",
"Phimbi": "phm",
"Phoenician": "phn",
"Phola": "ypg",
"Pholo": "yip",
"Phom": "nph",
"Phong-Kniang": "pnx",
"Phrae Pwo": "kjt",
"Phrygian": "xpg",
"Phu Thai": "pht",
"Phuan": "phu",
"Phudagi": "phd",
"Phuie": "pug",
"Phukha": "phh",
"Phuma": "ypm",
"Phunoi": "pho",
"Phuong": "phg",
"Phupa": "ypp",
"Phupha": "yph",
"Phuthi": "bnt-phu",
"Phuza": "ypz",
"Piamatsina": "ptr",
"Piame": "pin",
"Piapoco": "pio",
"Piaroa": "pid",
"Picard": "pcd",
"Pichinglis": "fpe",
"Pichis Ashéninka": "cpu",
"Pictish": "xpi",
"Picuris": "nai-pic",
"Pidgin Delaware": "dep",
"Pidgin Iha": "ihb",
"Pidgin Onin": "onx",
"Piedmontese": "pms",
"Pijao": "pij",
"Pije": "piz",
"Pijin": "pis",
"Pilagá": "plg",
"Pileni": "piv",
"Pima Bajo": "pia",
"Pimbwe": "piw",
"Pinai-Hagahai": "pnn",
"Pingelapese": "pif",
"Pini": "pii",
"Pinigura": "pnv",
"Pinjarup": "pnj",
"Pinji": "pic",
"Pinotepa Nacional Mixtec": "mio",
"Pintiini": "pti",
"Pintupi-Luritja": "piu",
"Pinyin": "pny",
"Pipil": "ppl",
"Pirahã": "myp",
"Piratapuyo": "pir",
"Pirlatapa": "bxi",
"Piro": "pie",
"Pirriya": "xpa",
"Pisabo": "pig",
"Pisaflores Tepehua": "tpp",
"Piscataway": "psy",
"Pisidian": "xps",
"Pitcairn-Norfolk": "pih",
"Pite Sami": "sje",
"Piti": "pcn",
"Pitjantjatjara": "pjt",
"Pitta-Pitta": "pit",
"Piu": "pix",
"Piya-Kwonci": "piy",
"Plains Apache": "apk",
"Plains Cree": "crk",
"Plains Indian Sign Language": "psd",
"Plains Miwok": "pmw",
"Plapo Krumen": "ktj",
"Plautdietsch": "pdt",
"Playero": "gob",
"Pnar": "pbv",
"Pochuri Naga": "npo",
"Pochutec": "xpo",
"Podoko": "pbi",
"Pogali": "hkh",
"Pogolo": "poy",
"Pohnpeian": "pon",
"Poitevin-Saintongeais": "roa-poi",
"Pokangá": "pok",
"Poke": "pof",
"Pol": "pmm",
"Polabian": "pox",
"Polci": "plj",
"Polish": "pl",
"Polish Sign Language": "pso",
"Polonombauk": "plb",
"Pom": "pmo",
"Ponam": "ncc",
"Pondi": "lnm",
"Pongu": "png",
"Ponosakan": "pns",
"Pontic Greek": "pnt",
"Ponyo": "npg",
"Poqomam": "poc",
"Poqomchi'": "poh",
"Porohanon": "prh",
"Port Sandwich": "psw",
"Port Sorell": "xpl",
"Port Vato": "ptv",
"Portuguese": "pt",
"Portuguese Sign Language": "psr",
"Potawatomi": "pot",
"Potiguára": "pog",
"Poumei Naga": "pmx",
"Pouye": "bye",
"Powari": "pwr",
"Powhatan": "pim",
"Poyanáwa": "pyn",
"Prakrit": "pra",
"Prasuni": "prn",
"Pre-Samnite": "itc-psa",
"Primitive Irish": "pgl",
"Principense": "pre",
"Proto-Abkhaz-Abaza": "cau-abz-pro",
"Proto-Afroasiatic": "afa-pro",
"Proto-Albanian": "sqj-pro",
"Proto-Algic": "aql-pro",
"Proto-Algonquian": "alg-pro",
"Proto-Amuesha-Chamicuro": "awd-amc-pro",
"Proto-Anatolian": "ine-ana-pro",
"Proto-Andian": "cau-and-pro",
"Proto-Apachean": "apa-pro",
"Proto-Arawa": "auf-pro",
"Proto-Arawak": "awd-pro",
"Proto-Armenian": "hyx-pro",
"Proto-Arnhem": "aus-arn-pro",
"Proto-Aroid": "omv-aro-pro",
"Proto-Aslian": "mkh-asl-pro",
"Proto-Atayalic": "map-ata-pro",
"Proto-Athabaskan": "ath-pro",
"Proto-Atlantic-Congo": "alv-pro",
"Proto-Austroasiatic": "aav-pro",
"Proto-Austronesian": "map-pro",
"Proto-Avaro-Andian": "cau-ava-pro",
"Proto-Bahnaric": "mkh-ban-pro",
"Proto-Bai": "sit-bai-pro",
"Proto-Balto-Slavic": "ine-bsl-pro",
"Proto-Bantoid": "nic-bod-pro",
"Proto-Bantu": "bnt-pro",
"Proto-Basque": "euq-pro",
"Proto-Batak": "btk-pro",
"Proto-Be": "qfa-onb-pro",
"Proto-Be-Tai": "qfa-bet-pro",
"Proto-Benue-Congo": "nic-bco-pro",
"Proto-Berber": "ber-pro",
"Proto-Binanderean": "ngf-bin-pro",
"Proto-Bodish": "sit-bdi-pro",
"Proto-Bodo-Garo": "tbq-bdg-pro",
"Proto-Bongo-Bagirmi": "csu-bba-pro",
"Proto-Boran": "sai-bor-pro",
"Proto-Brythonic": "cel-bry-pro",
"Proto-Bua": "alv-bua-pro",
"Proto-Bungku-Tolaki": "poz-btk-pro",
"Proto-Burmish": "tbq-brm-pro",
"Proto-Caddoan": "cdd-pro",
"Proto-Cangin": "alv-cng-pro",
"Proto-Cariban": "sai-car-pro",
"Proto-Celtic": "cel-pro",
"Proto-Central Chadic": "cdc-cbm-pro",
"Proto-Central Dravidian": "dra-cen-pro",
"Proto-Central Jê": "sai-cje-pro",
"Proto-Central Naga": "sit-aao-pro",
"Proto-Central New South Wales": "aus-cww-pro",
"Proto-Central Sudanic": "csu-pro",
"Proto-Central Togo": "alv-gtm-pro",
"Proto-Central-Eastern Malayo-Polynesian": "poz-cet-pro",
"Proto-Cerrado": "sai-cer-pro",
"Proto-Chadic": "cdc-pro",
"Proto-Chamic": "cmc-pro",
"Proto-Chatino": "omq-cha-pro",
"Proto-Chibchan": "cba-pro",
"Proto-Chimakuan": "chi-pro",
"Proto-Chinookan": "nai-ckn-pro",
"Proto-Chukotko-Kamchatkan": "qfa-cka-pro",
"Proto-Chumash": "nai-chu-pro",
"Proto-Circassian": "cau-cir-pro",
"Proto-Cupan": "azc-cup-pro",
"Proto-Cushitic": "cus-pro",
"Proto-Daju": "sdv-daj-pro",
"Proto-Daly": "aus-dal-pro",
"Proto-Dangari": "inc-dng-pro",
"Proto-Dargwa": "cau-drg-pro",
"Proto-Dizoid": "omv-diz-pro",
"Proto-Dravidian": "dra-pro",
"Proto-Eastern Jebel": "sdv-eje-pro",
"Proto-Eastern Malayo-Polynesian": "pqe-pro",
"Proto-Eastern Oti-Volta": "nic-eov-pro",
"Proto-Eastern Polynesian": "poz-pep-pro",
"Proto-Edekiri": "alv-edk-pro",
"Proto-Edoid": "alv-edo-pro",
"Proto-Ersuic": "sit-ers-pro",
"Proto-Eskimo": "esx-esk-pro",
"Proto-Eskimo-Aleut": "esx-pro",
"Proto-Fali": "alv-fli-pro",
"Proto-Finnic": "urj-fin-pro",
"Proto-Gbaya": "gba-pro",
"Proto-Gbe": "alv-gbe-pro",
"Proto-Georgian-Zan": "ccs-gzn-pro",
"Proto-Germanic": "gem-pro",
"Proto-Graeco-Phrygian": "ine-grp-pro",
"Proto-Grassfields": "nic-grf-pro",
"Proto-Great Andamanese": "qfa-adm-pro",
"Proto-Guang": "alv-gng-pro",
"Proto-Gur": "nic-gur-pro",
"Proto-Gurunsi": "nic-gns-pro",
"Proto-Halmahera-Cenderawasih": "poz-hce-pro",
"Proto-Heiban": "alv-hei-pro",
"Proto-Hellenic": "grk-pro",
"Proto-Highland East Cushitic": "cus-hec-pro",
"Proto-Hlai": "qfa-lic-pro",
"Proto-Hmong-Mien": "hmx-pro",
"Proto-Hmongic": "hmn-pro",
"Proto-Hrusish": "sit-hrs-pro",
"Proto-Hurro-Urartian": "qfa-hur-pro",
"Proto-Idomoid": "alv-ido-pro",
"Proto-Igboid": "alv-igb-pro",
"Proto-Ijoid": "ijo-pro",
"Proto-Indo-Aryan": "inc-pro",
"Proto-Indo-European": "ine-pro",
"Proto-Indo-Iranian": "iir-pro",
"Proto-Inuit": "esx-inu-pro",
"Proto-Iranian": "ira-pro",
"Proto-Iroquoian": "iro-pro",
"Proto-Italic": "itc-pro",
"Proto-Iwaidjan": "aus-wdj-pro",
"Proto-Japonic": "jpx-pro",
"Proto-Jukunoid": "nic-jkn-pro",
"Proto-Jê": "sai-jee-pro",
"Proto-Kadu": "qfa-kad-pro",
"Proto-Kalamian": "phi-kal-pro",
"Proto-Kalapuyan": "nai-klp-pro",
"Proto-Kam-Sui": "qfa-kms-pro",
"Proto-Kampa": "awd-kmp-pro",
"Proto-Kamta": "inc-krd-pro",
"Proto-Karen": "kar-pro",
"Proto-Kartvelian": "ccs-pro",
"Proto-Katuic": "mkh-kat-pro",
"Proto-Kham": "sit-kha-pro",
"Proto-Khanty": "kca-pro",
"Proto-Khasian": "aav-khs-pro",
"Proto-Khmeric": "mkh-kmr-pro",
"Proto-Khmuic": "mkh-khm-pro",
"Proto-Kho-Bwa": "sit-khb-pro",
"Proto-Khoe": "khi-kho-pro",
"Proto-Koman": "ssa-kom-pro",
"Proto-Komisenian": "ira-kms-pro",
"Proto-Koreanic": "qfa-kor-pro",
"Proto-Kra": "qfa-kra-pro",
"Proto-Kra-Dai": "qfa-tak-pro",
"Proto-Kru": "kro-pro",
"Proto-Kuki-Chin": "tbq-kuk-pro",
"Proto-Kuliak": "ssa-klk-pro",
"Proto-Kurdish": "ku-pro",
"Proto-Kwa": "alv-kwa-pro",
"Proto-Lalo": "tbq-lal-pro",
"Proto-Lampungic": "poz-lgx-pro",
"Proto-Lezghian": "cau-lzg-pro",
"Proto-Lolo-Burmese": "tbq-lob-pro",
"Proto-Loloish": "tbq-lol-pro",
"Proto-Lower Cross River": "nic-lcr-pro",
"Proto-Luish": "sit-luu-pro",
"Proto-Maidun": "nai-mdu-pro",
"Proto-Malayic": "poz-mly-pro",
"Proto-Malayo-Chamic": "poz-mcm-pro",
"Proto-Malayo-Polynesian": "poz-pro",
"Proto-Malayo-Sumbawan": "poz-msa-pro",
"Proto-Mande": "dmn-pro",
"Proto-Mangbetu": "csu-maa-pro",
"Proto-Mansi": "mns-pro",
"Proto-Mari": "chm-pro",
"Proto-Masa": "cdc-mas-pro",
"Proto-Mayan": "myn-pro",
"Proto-Mazatec": "omq-maz-pro",
"Proto-Medo-Parthian": "ira-mpr-pro",
"Proto-Micronesian": "poz-mic-pro",
"Proto-Mienic": "hmx-mie-pro",
"Proto-Min": "zhx-min-pro",
"Proto-Mixe-Zoque": "nai-miz-pro",
"Proto-Mixtec": "omq-mxt-pro",
"Proto-Mixtecan": "omq-mix-pro",
"Proto-Mon-Khmer": "mkh-pro",
"Proto-Mongolic": "xgn-pro",
"Proto-Monic": "mkh-mnc-pro",
"Proto-Mordvinic": "urj-mdv-pro",
"Proto-Mumuye": "alv-mum-pro",
"Proto-Munda": "mun-pro",
"Proto-Munji-Yidgha": "ira-mny-pro",
"Proto-Muskogean": "nai-mus-pro",
"Proto-Na-Dene": "xnd-pro",
"Proto-Nahuan": "azc-nah-pro",
"Proto-Naish": "sit-nas-pro",
"Proto-Nakh": "cau-nkh-pro",
"Proto-Nawiki": "awd-nwk-pro",
"Proto-Nguni": "bnt-ngu-pro",
"Proto-Nicobarese": "aav-nic-pro",
"Proto-Niger-Congo": "nic-pro",
"Proto-Nilo-Saharan": "ssa-pro",
"Proto-Nilotic": "sdv-nil-pro",
"Proto-Norse": "gmq-pro",
"Proto-North Dravidian": "dra-nor-pro",
"Proto-North Halmahera": "paa-nha-pro",
"Proto-North Iroquoian": "iro-nor-pro",
"Proto-North Sarawak": "poz-swa-pro",
"Proto-Northeast Caucasian": "cau-nec-pro",
"Proto-Northern Jê": "sai-nje-pro",
"Proto-Northern Naga": "sit-kon-pro",
"Proto-Northwest Caucasian": "cau-nwc-pro",
"Proto-Nubian": "nub-pro",
"Proto-Nuclear Polynesian": "poz-pnp-pro",
"Proto-Numic": "azc-num-pro",
"Proto-Nupoid": "alv-nup-pro",
"Proto-Nuristani": "iir-nur-pro",
"Proto-Nyima": "sdv-nyi-pro",
"Proto-Nyulnyulan": "aus-nyu-pro",
"Proto-Oceanic": "poz-oce-pro",
"Proto-Ogoni": "nic-ogo-pro",
"Proto-Omotic": "omv-pro",
"Proto-Ongan": "qfa-ong-pro",
"Proto-Oti-Volta": "nic-ovo-pro",
"Proto-Oto-Manguean": "omq-pro",
"Proto-Oto-Pamean": "omq-otp-pro",
"Proto-Otomi": "oto-otm-pro",
"Proto-Otomian": "oto-pro",
"Proto-Pakanic": "mkh-pkn-pro",
"Proto-Palaungic": "mkh-pal-pro",
"Proto-Pama-Nyungan": "aus-pam-pro",
"Proto-Paresi-Waura": "awd-prw-pro",
"Proto-Pathan": "ira-pat-pro",
"Proto-Pearic": "mkh-pea-pro",
"Proto-Permic": "urj-prm-pro",
"Proto-Philippine": "phi-pro",
"Proto-Plateau": "nic-plt-pro",
"Proto-Plateau Penutian": "nai-plp-pro",
"Proto-Pnar-Khasi-Lyngngam": "aav-pkl-pro",
"Proto-Polynesian": "poz-pol-pro",
"Proto-Pomo": "nai-pom-pro",
"Proto-Puroik": "sit-khp-pro",
"Proto-Quechuan": "qwe-pro",
"Proto-Rukai": "dru-pro",
"Proto-Ryukyuan": "jpx-ryu-pro",
"Proto-Sabaki": "bnt-sab-pro",
"Proto-Saka": "xsc-sak-pro",
"Proto-Saka-Wakhi": "xsc-skw-pro",
"Proto-Salish": "sal-pro",
"Proto-Samic": "smi-pro",
"Proto-Samoyedic": "syd-pro",
"Proto-Sanglechi-Ishkashimi": "ira-sgi-pro",
"Proto-Sara": "csu-sar-pro",
"Proto-Sarmatian": "xsc-sar-pro",
"Proto-Scythian": "xsc-pro",
"Proto-Selkup": "sel-pro",
"Proto-Semitic": "sem-pro",
"Proto-Shughni-Roshani": "ira-shr-pro",
"Proto-Shughni-Yazghulami": "ira-shy-pro",
"Proto-Shughni-Yazghulami-Munji": "ira-sym-pro",
"Proto-Sino-Tibetan": "sit-pro",
"Proto-Siouan": "sio-pro",
"Proto-Siouan-Catawban": "nai-sca-pro",
"Proto-Slavic": "sla-pro",
"Proto-Sogdic": "ira-sgc-pro",
"Proto-Somaloid": "cus-som-pro",
"Proto-Songhay": "son-pro",
"Proto-Sotho-Tswana": "bnt-sts-pro",
"Proto-South Cushitic": "cus-sou-pro",
"Proto-South Dravidian": "dra-sou-pro",
"Proto-South Dravidian I": "dra-sdo-pro",
"Proto-South Dravidian II": "dra-sdt-pro",
"Proto-South Sulawesi": "poz-ssw-pro",
"Proto-Southern Jê": "sai-sje-pro",
"Proto-Southwestern Tai": "tai-swe-pro",
"Proto-Ta-Arawak": "awd-taa-pro",
"Proto-Tai": "tai-pro",
"Proto-Takic": "azc-tak-pro",
"Proto-Taman": "sdv-tmn-pro",
"Proto-Tamangic": "sit-tam-pro",
"Proto-Tangkhulic": "sit-tng-pro",
"Proto-Tani": "sit-tan-pro",
"Proto-Taranoan": "sai-tar-pro",
"Proto-Tatic": "xme-ttc-pro",
"Proto-Tocharian": "ine-toc-pro",
"Proto-Totozoquean": "nai-tot-pro",
"Proto-Trans-New Guinea": "ngf-pro",
"Proto-Triqui": "omq-tri-pro",
"Proto-Tsezian": "cau-tsz-pro",
"Proto-Tsimshianic": "nai-tsi-pro",
"Proto-Tungusic": "tuw-pro",
"Proto-Tupi-Guarani": "tup-gua-pro",
"Proto-Tupian": "tup-pro",
"Proto-Turkic": "trk-pro",
"Proto-Ubangian": "nic-ubg-pro",
"Proto-Ugric": "urj-ugr-pro",
"Proto-Upper Cross River": "nic-ucr-pro",
"Proto-Uralic": "urj-pro",
"Proto-Utian": "nai-utn-pro",
"Proto-Uto-Aztecan": "azc-pro",
"Proto-Vietic": "mkh-vie-pro",
"Proto-Volta-Congo": "nic-vco-pro",
"Proto-Volta-Niger": "alv-von-pro",
"Proto-West Germanic": "gmw-pro",
"Proto-West Semitic": "sem-wes-pro",
"Proto-Western Kho-Bwa": "sit-khw-pro",
"Proto-Western Mande": "dmn-mdw-pro",
"Proto-Witotoan": "sai-wit-pro",
"Proto-Yeniseian": "qfa-yen-pro",
"Proto-Yoruba": "alv-yor-pro",
"Proto-Yoruboid": "alv-yrd-pro",
"Proto-Yukaghir": "qfa-yuk-pro",
"Proto-Yupik": "ypk-pro",
"Proto-Zapotec": "omq-zpc-pro",
"Proto-Zapotecan": "omq-zap-pro",
"Proto-Zaza-Gorani": "ira-zgr-pro",
"Providencia Sign Language": "prz",
"Psikye": "kvj",
"Puare": "pux",
"Pudtol Atta": "atp",
"Puebla Mazatec": "pbm",
"Puelche": "pue",
"Puerto Rican Sign Language": "psl",
"Puimei Naga": "npu",
"Puinave": "pui",
"Puiron": "sit-prn",
"Pukapukan": "pkp",
"Pulabu": "pup",
"Puluwat": "puw",
"Puma": "pum",
"Pumpokol": "xpm",
"Pumé": "yae",
"Punan Aput": "pud",
"Punan Bah-Biau": "pna",
"Punan Batu": "pnm",
"Punan Merah": "puf",
"Punan Merap": "puc",
"Punan Tubu": "puj",
"Punic": "xpu",
"Punjabi": "pa",
"Punu": "puu",
"Puoc": "puo",
"Puquina": "puq",
"Puragi": "pru",
"Purari": "iar",
"Purepecha": "pua",
"Puri": "prr",
"Purik": "prx",
"Purisimeño": "puy",
"Puroik": "suv",
"Puruborá": "pur",
"Puruhá": "sai-prh",
"Purukotó": "sai-pur",
"Purum": "pub",
"Putai": "mfl",
"Putoh": "put",
"Putukwam": "afe",
"Puxian Min": "cpx",
"Puyo-Paekche": "xpp",
"Puyuma": "pyu",
"Pwaamèi": "pme",
"Pwapwâ": "pop",
"Pyapun": "pcw",
"Pye Krumen": "pye",
"Pyemmairre": "xpb",
"Pyen": "pyy",
"Pykobjê": "sai-pyk",
"Pyu (Myanmar)": "pyx",
"Pyu (New Guinea)": "pby",
"Páez": "pbb",
"Pááfang": "pfa",
"Päri": "lkr",
"Pémono": "pev",
"Pévé": "lme",
"Pökoot": "pko",
"Q'anjob'al": "kjb",
"Q'eqchi": "kek",
"Qabiao": "laq",
"Qaqet": "byx",
"Qatabanian": "xqt",
"Qau": "gqu",
"Qila Muji": "ymq",
"Qimant": "ahg",
"Quapaw": "qua",
"Quebec Sign Language": "fcs",
"Quechua": "qu",
"Quenya": "qya",
"Querétaro Otomi": "otq",
"Quetzaltepec Mixe": "pxm",
"Queyu": "qvy",
"Quiavicuzas Zapotec": "zpj",
"Quileute": "qui",
"Quimbaya": "sai-qmb",
"Quinault": "qun",
"Quinigua": "nai-qng",
"Quinqui": "quq",
"Quioquitani-Quierí Zapotec": "ztq",
"Quiotepec Chinantec": "chq",
"Quiripi": "qyp",
"Quitemo": "sai-qtm",
"Rabha": "rah",
"Rabona": "sai-rab",
"Rade": "rad",
"Raetic": "xrr",
"Raga": "lml",
"Rahambuu": "raz",
"Rajah Kabunsuwan Manobo": "mqk",
"Rajbanshi": "rjs",
"Raji": "rji",
"Rajong": "rjg",
"Rajput Garasia": "gra",
"Rakahanga-Manihiki": "rkh",
"Rakhine": "rki",
"Ralte": "ral",
"Rama": "rma",
"Ramandi": "tks",
"Ramanos": "sai-ram",
"Ramoaaina": "rai",
"Ramopa": "kjx",
"Rampi": "lje",
"Rana Tharu": "thr",
"Rang": "rax",
"Rangkas": "rgk",
"Ranglong": "rnl",
"Rao": "rao",
"Rapa": "ray",
"Rapa Nui": "rap",
"Rapoisi": "kyx",
"Rapting": "rpt",
"Rara Bakati'": "lra",
"Rarotongan": "rar",
"Rasawa": "rac",
"Ratagnon": "btn",
"Ratahan": "rth",
"Rathawi": "rtw",
"Rathwi Bareli": "bgd",
"Raute": "rau",
"Ravula": "yea",
"Rawa": "rwo",
"Rawang": "raw",
"Rawat": "jnl",
"Rawo": "rwa",
"Rayón Zoque": "zor",
"Razajerdi": "rat",
"Razihi": "rzh",
"Reang": "ria",
"Red Gelao": "gir",
"Reel": "atu",
"Rejang": "rej",
"Rejang Kayan": "ree",
"Reli": "rei",
"Rema": "bow",
"Rembarunga": "rmb",
"Rembong": "reb",
"Remo": "rem",
"Remontado Agta": "agv",
"Rempi": "rmp",
"Remun": "lkj",
"Rendille": "rel",
"Rengao": "ren",
"Rennellese": "mnv",
"Repanbitip": "rpn",
"Rer Bare": "rer",
"Rerau": "rea",
"Rerep": "pgk",
"Reshe": "res",
"Resígaro": "rgr",
"Retta": "ret",
"Reyesano": "rey",
"Rhine Franconian": "gmw-rfr",
"Riang": "ril",
"Riantana": "ran",
"Ribun": "rir",
"Rigwe": "iri",
"Rikbaktsa": "rkb",
"Rinconada Bikol": "bto",
"Rincón Zapotec": "zar",
"Ringgou": "rgu",
"Ririo": "rri",
"Ritarungo": "rit",
"Riung": "riu",
"Riverain Sango": "snj",
"Rogo": "rod",
"Rohingya": "rhg",
"Roma": "rmm",
"Romagnol": "rgn",
"Romam": "rmx",
"Romani": "rom",
"Romanian": "ro",
"Romanian Sign Language": "rms",
"Romano-Greek": "rge",
"Romano-Serbian": "rsb",
"Romanova": "rmv",
"Romansh": "rm",
"Romblomanon": "rol",
"Rombo": "rof",
"Romkun": "rmk",
"Ron": "cla",
"Ronga": "rng",
"Rongga": "ror",
"Rongmei Naga": "nbu",
"Rongpo": "rnp",
"Ronji": "roe",
"Roon": "rnn",
"Roria": "rga",
"Roro": "rro",
"Rotokas": "roo",
"Rotuman": "rtm",
"Rouran": "mis-rou",
"Roviana": "rug",
"Ruching Palaung": "pce",
"Rudbari": "rdb",
"Rufiji": "rui",
"Ruga": "ruh",
"Rukai": "dru",
"Rukiga": "cgg",
"Ruma": "ruz",
"Rumai Palaung": "rbb",
"Rumu": "klq",
"Runga": "rou",
"Rungtu": "rtc",
"Rungus": "drg",
"Rungwa": "rnw",
"Russenorsk": "crp-rsn",
"Russian": "ru",
"Russian Sign Language": "rsl",
"Rutul": "rut",
"Ruuli": "ruc",
"Ruwund": "rnd",
"Rwa": "rwk",
"Rwanda-Rundi": "rw",
"Rwandan Sign Language": "rsn",
"Réunion Creole French": "rcf",
"S'gaw Karen": "ksw",
"Sa": "sax",
"Sa'a": "apb",
"Sa'ban": "snv",
"Sa'och": "scq",
"Saafi-Saafi": "sav",
"Saam": "raq",
"Saamia": "lsm",
"Saanich": "str",
"Saare": "uss",
"Saaroa": "sxr",
"Saba": "saa",
"Sabaean": "xsa",
"Sabah Bisaya": "bsy",
"Sabah Malay": "msi",
"Sabanê": "sae",
"Sabaot": "spy",
"Sabine": "sbv",
"Sabir": "pml",
"Sabu": "hvn",
"Sabüm": "sbo",
"Sacapulteco": "quv",
"Sadri": "sck",
"Saek": "skb",
"Saep": "spd",
"Safaitic": "sem-saf",
"Safaliba": "saf",
"Safeyoka": "apz",
"Safwa": "sbk",
"Sagala": "sbm",
"Sagalla": "tga",
"Sahaptin": "nai-spt",
"Saho": "ssy",
"Sahu": "saj",
"Saisiyat": "xsy",
"Sajau Basap": "sjb",
"Sakachep": "sch",
"Sakam": "skm",
"Sakao": "sku",
"Sakata": "skt",
"Sake": "sak",
"Sakizaya": "szy",
"Sala": "shq",
"Salampasu": "slx",
"Salar": "slr",
"Salas": "sgu",
"Saleman": "sau",
"Saliba (Colombia)": "slc",
"Saliba (New Guinea)": "sbe",
"Salinan": "sln",
"Salt-Yui": "sll",
"Saluan": "loe",
"Salumá": "slj",
"Salvadoran Lenca": "nai-sln",
"Salvadoran Sign Language": "esn",
"Sam": "snx",
"Sama": "smd",
"Samalian": "sem-sam",
"Samaritan Aramaic": "sam",
"Samaritan Hebrew": "smp",
"Samarokena": "tmj",
"Samatao": "ysd",
"Samba": "smx",
"Sambali": "xsb",
"Sambalpuri": "spv",
"Sambe": "xab",
"Samberigi": "ssx",
"Samburu": "saq",
"Samei": "smh",
"Samo": "smq",
"Samoan": "sm",
"Samoan Plantation Pidgin": "crp-spp",
"Samogitian": "sgs",
"Samosa": "swm",
"Sampang": "rav",
"Samre": "sxm",
"Samtao": "stu",
"Samvedi": "smv",
"San Agustín Mixtepec Zapotec": "ztm",
"San Baltazar Loxicha Zapotec": "zpx",
"San Felipe Otlaltepec Popoloca": "pow",
"San Jerónimo Tecóatl Mazatec": "maa",
"San Juan Atzingo Popoloca": "poe",
"San Juan Colorado Mixtec": "mjc",
"San Juan Guelavía Zapotec": "zab",
"San Juan Quiahije Chatino": "omq-sjq",
"San Juan Teita Mixtec": "xtj",
"San Luís Temalacayuca Popoloca": "pps",
"San Marcos Tlalcoyalco Popoloca": "pls",
"San Martín Itunyoso Triqui": "trq",
"San Miguel Creole French": "scf",
"San Miguel Piedras Mixtec": "xtp",
"San Miguel el Grande Mixtec": "mig",
"San Pablo Güilá Zapotec": "ztu",
"San Pedro Amuzgos Amuzgo": "azg",
"San Pedro Quiatoni Zapotec": "zpf",
"San Vicente Coatlán Zapotec": "zpt",
"Sanapaná": "spn",
"Sanaviron": "sai-san",
"Sandawe": "sad",
"Sanga (Congo)": "sng",
"Sanga (Nigeria)": "xsn",
"Sanggau": "scg",
"Sangil": "snl",
"Sangir": "sxn",
"Sangisari": "sgr",
"Sangkong": "sgk",
"Sanglechi": "sgy",
"Sango": "sg",
"Sangtam Naga": "nsa",
"Sangu (Gabon)": "snq",
"Sangu (Tanzania)": "sbp",
"Sani": "ysn",
"Sanie": "ysy",
"Saniyo-Hiyewe": "sny",
"Sankaran Maninka": "msc",
"Sansi": "ssi",
"Sanskrit": "sa",
"Santa Catarina Albarradas Zapotec": "ztn",
"Santa Inés Ahuatempan Popoloca": "pca",
"Santa Inés Yatzechi Zapotec": "zpn",
"Santa Lucía Monteverde Mixtec": "mdv",
"Santa María La Alta Nahuatl": "nhz",
"Santa María Quiegolani Zapotec": "zpi",
"Santa María Zacatepec Mixtec": "mza",
"Santa Teresa Cora": "cok",
"Santali": "sat",
"Santiago Xanica Zapotec": "zpr",
"Santo Domingo Albarradas Zapotec": "zas",
"Sanumá": "xsu",
"Sanxiang Min": "nan-zsh",
"Sapa": "tys",
"Saparua": "spr",
"Sapará": "sai-sap",
"Sapo": "krn",
"Saponi": "spi",
"Saposa": "sps",
"Sapuan": "spu",
"Sapé": "spc",
"Sar": "mwm",
"Sara": "sre",
"Sara Kaba": "sbz",
"Sara Kaba Deme": "kwg",
"Sara Kaba Náà": "kwv",
"Saraiki": "skr",
"Saramaccan": "srm",
"Sarangani Blaan": "bps",
"Sarangani Manobo": "mbs",
"Sarasira": "zsa",
"Saraveca": "sar",
"Sarawak Malay": "poz-sml",
"Sardinian": "sc",
"Sarikoli": "srh",
"Sarli": "sdf",
"Sartang": "onp",
"Sarua": "swy",
"Sarudu": "sdu",
"Saruga": "sra",
"Sasak": "sas",
"Sasaru": "sxs",
"Sassarese": "sdc",
"Satawalese": "stw",
"Saterland Frisian": "stq",
"Sateré-Mawé": "mav",
"Sathmar Swabian": "gmw-stm",
"Saudi Arabian Sign Language": "sdl",
"Saurashtra": "saz",
"Sauri": "srt",
"Sause": "sao",
"Sausi": "ssj",
"Savi": "sdg",
"Savosavo": "svs",
"Sawai": "szw",
"Saweru": "swr",
"Sawi": "saw",
"Sawila": "swt",
"Sawriya Paharia": "mjt",
"Saxwe Gbe": "sxw",
"Saya": "say",
"Sayula Popoluca": "pos",
"Scanian": "gmq-scy",
"Scots": "sco",
"Scottish Gaelic": "gd",
"Seba": "kdg",
"Sebat Bet Gurage": "sgw",
"Seberuang": "sbx",
"Sebop": "sib",
"Sebuyau": "snb",
"Sechelt": "sec",
"Sechura": "sai-sec",
"Secoya": "sey",
"Sedang": "sed",
"Sedoa": "tvw",
"Seenku": "sos",
"Segai": "sge",
"Segeju": "seg",
"Seget": "sbg",
"Sehwi": "sfw",
"Seimat": "ssg",
"Seit-Kaitetu": "hik",
"Sekani": "sek",
"Sekapan": "skp",
"Sekar": "skz",
"Seke": "skj",
"Sekele": "vaj",
"Seki": "syi",
"Seko Padang": "skx",
"Seko Tengah": "sko",
"Sekpele": "lip",
"Selangor Sign Language": "kgi",
"Selaru": "slu",
"Selayar": "sly",
"Selee": "snw",
"Selepet": "spl",
"Selk'nam": "ona",
"Selonian": "sxl",
"Selungai Murut": "slg",
"Seluwasan": "sws",
"Sema": "nsm",
"Semai": "sea",
"Semandang": "sdm",
"Semaq Beri": "szc",
"Sembakung Murut": "sbr",
"Semelai": "sza",
"Semigallian": "xzm",
"Semimi": "etz",
"Semnam": "ssm",
"Semnani": "smy",
"Sempan": "xse",
"Sena": "seh",
"Senara": "seq",
"Senaya": "syn",
"Sene": "sej",
"Seneca": "see",
"Sengele": "szg",
"Senggi": "snu",
"Sengo": "spk",
"Sengseng": "ssz",
"Senhaja de Srair": "sjs",
"Sensi": "sni",
"Sentani": "set",
"Senthang Chin": "sez",
"Sentinelese": "std",
"Sepa (Indonesia)": "spb",
"Sepa (New Guinea)": "spe",
"Sepen": "spm",
"Sepik Iwam": "iws",
"Sera": "sry",
"Serbo-Croatian": "sh",
"Sere": "swf",
"Serer": "srr",
"Seri": "sei",
"Serili": "sve",
"Seroa": "kqu",
"Serrano": "ser",
"Seru": "szd",
"Serua": "srw",
"Serudung Murut": "srk",
"Serui-Laut": "seu",
"Seta": "stf",
"Setaman": "stm",
"Seti": "sbi",
"Severn Ojibwa": "ojs",
"Sewa Bay": "sew",
"Seychelles Sign Language": "lsw",
"Seychellois Creole": "crs",
"Seze": "sze",
"Sha": "scw",
"Shabak": "sdb",
"Shabo": "sbf",
"Shahmirzadi": "srz",
"Shahrudi": "shm",
"Shall-Zwall": "sha",
"Shama-Sambuga": "sqa",
"Shamang": "xsh",
"Shambala": "ksb",
"Shan": "shn",
"Shanenawa": "swo",
"Shanga": "sho",
"Shangzhai": "jih",
"Shaojiang Min": "sjc",
"Shaozhou Tuhua": "zhx-sht",
"Sharanahua": "mcd",
"Shark Bay": "ssv",
"Sharwa": "swq",
"Shasta": "sht",
"Shatt": "shj",
"Shau": "sqh",
"Shawnee": "sjw",
"She": "shx",
"Shebayo": "awd-she",
"Shehri": "shv",
"Shekkacho": "moy",
"Sheko": "she",
"Shelta": "sth",
"Shendu": "shl",
"Sheni": "scv",
"Sherbro": "bun",
"Sherdukpen": "sdp",
"Sherpa": "xsr",
"Sheshi Kham": "kip",
"Shetland": "scz",
"Shi": "shr",
"Shihhi Arabic": "ssh",
"Shiki": "gua",
"Shilluk": "shk",
"Shina": "scl",
"Shinasha": "bwo",
"Shipibo-Conibo": "shp",
"Shixing": "sxg",
"Sholaga": "sle",
"Shom Peng": "sii",
"Shona": "sn",
"Shoo-Minda-Nye": "bcv",
"Shor": "cjs",
"Shoshone": "shh",
"Shua": "shg",
"Shuar": "jiv",
"Shughni": "sgh",
"Shumashti": "sts",
"Shumcho": "scu",
"Shuswap": "shs",
"Shuwa-Zamani": "ksa",
"Shwai": "shw",
"Shwe Palaung": "pll",
"Sialum": "slw",
"Siamou": "sif",
"Sian": "spg",
"Siane": "snp",
"Siang": "sya",
"Siar-Lak": "sjr",
"Sibe": "nco",
"Siberian Tatar": "sty",
"Sibu Melanau": "sdx",
"Sicanian": "sxc",
"Sicel": "scx",
"Sichuanese": "zhx-sic",
"Sicilian": "scn",
"Sicite": "sep",
"Siculo-Arabic": "sqr",
"Sidamo": "sid",
"Sidetic": "xsd",
"Sie": "erg",
"Sierra Leone Sign Language": "sgx",
"Sierra Negra Nahuatl": "nsu",
"Sierra de Juárez Zapotec": "zaa",
"Sighu": "sxe",
"Sihan": "snr",
"Sika": "ski",
"Sikaiana": "sky",
"Sikaritai": "tty",
"Sikiana": "sik",
"Sikkimese": "sip",
"Sikule": "skh",
"Sila": "slt",
"Silacayoapan Mixtec": "mks",
"Silesian": "szl",
"Silimo": "wul",
"Siliput": "mkc",
"Silopi": "xsp",
"Silt'e": "stv",
"Simaa": "sie",
"Simalungun Batak": "bts",
"Simba": "sbw",
"Simbali": "smg",
"Simbari": "smb",
"Simbo": "sbb",
"Simeku": "smz",
"Simeulue": "smr",
"Simte": "smt",
"Sinacantán": "nai-sin",
"Sinagen": "siu",
"Sinasina": "sst",
"Sinaugoro": "snc",
"Sindarin": "sjn",
"Sindhi": "sd",
"Sindhi Bhil": "sbn",
"Sindihui Mixtec": "xts",
"Singa": "sgm",
"Singapore Sign Language": "sls",
"Singpho": "sgp",
"Sinhalese": "si",
"Sinicahua Mixtec": "xti",
"Sininkere": "skq",
"Sinte Romani": "rmo",
"Sinyar": "sys",
"Sinúfana": "sai-sin",
"Sio": "xsi",
"Siona": "snn",
"Sipakapense": "qum",
"Sira": "swj",
"Siraya": "fos",
"Sirenik": "ysr",
"Siri": "sir",
"Siriano": "sri",
"Sirionó": "srq",
"Sirmauri": "srx",
"Siroi": "ssd",
"Sirva": "sbq",
"Sisaala": "sld",
"Sissano": "sso",
"Situ": "sit-sit",
"Siuslaw": "sis",
"Sivandi": "siy",
"Sivia Sign Language": "lsv",
"Siwai": "siw",
"Siwi": "siz",
"Siwu": "akp",
"Siyin Chin": "csy",
"Skalvian": "svx",
"Ske": "ske",
"Skepi Creole Dutch": "skw",
"Skolt Sami": "sms",
"Skou": "skv",
"Slavomolisano": "svm",
"Slovak": "sk",
"Slovakian Sign Language": "svk",
"Slovene": "sl",
"Slovincian": "zlw-slv",
"Small Flowery Miao": "sfm",
"Smärky Kanum": "kxq",
"So'a": "ssq",
"Sobei": "sob",
"Sochiapam Chinantec": "cso",
"Soga": "xog",
"Sogdian": "sog",
"Sok": "skk",
"Sokna": "swn",
"Soko": "soc",
"Sokoro": "sok",
"Solano": "xso",
"Soli": "sby",
"Solombala English": "crp-slb",
"Solomon Islands Sign Language": "szs",
"Solon": "tuw-sol",
"Solong": "aaw",
"Solos": "sol",
"Som": "smc",
"Somali": "so",
"Somba-Siawari": "bmu",
"Somra": "ntx",
"Somrai": "sor",
"Somray": "smu",
"Somyev": "kgt",
"Sonaga": "ysg",
"Sonde": "shc",
"Songe": "sop",
"Songlai Chin": "csj",
"Songomeno": "soe",
"Songoora": "sod",
"Sonha": "soi",
"Sonia": "siq",
"Soninke": "snk",
"Sonsorolese": "sov",
"Soo": "teu",
"Sop": "urw",
"Soqotri": "sqt",
"Sora": "srb",
"Sori-Harengan": "sbh",
"Sorkhei": "sqo",
"Sorothaptic": "sxo",
"Sorsogon Ayta": "ays",
"Sos Kundi": "sdk",
"Sota Kanum": "krz",
"Sotho": "st",
"Sou": "sqq",
"Sougb": "mnx",
"South African Sign Language": "sfs",
"South Awyu": "aws",
"South Boma": "bnt-sbo",
"South Central Banda": "lnl",
"South Central Dinka": "dib",
"South Efate": "erk",
"South Fali": "fal",
"South Giziga": "giz",
"South Lembata": "lmf",
"South Levantine Arabic": "ajp",
"South Marquesan": "mqm",
"South Muyu": "kts",
"South Nuaulu": "nxl",
"South Picene": "spx",
"South Slavey": "xsl",
"South Tairora": "omw",
"South Tukang Besi": "bhq",
"South Ucayali Ashéninka": "cpy",
"South Watut": "mcy",
"Southeast Ambrym": "tvk",
"Southeast Babar": "vbb",
"Southeast Ijo": "ijs",
"Southeast Pashayi": "psi",
"Southeast Tasmanian": "xpf",
"Southeastern Dinka": "dks",
"Southeastern Ixtlán Zapotec": "zpd",
"Southeastern Kolami": "nit",
"Southeastern Nochixtlán Mixtec": "mxy",
"Southeastern Pomo": "pom",
"Southeastern Puebla Nahuatl": "npl",
"Southeastern Tarahumara": "tcu",
"Southeastern Tepehuan": "stp",
"Southern Alta": "agy",
"Southern Altai": "alt",
"Southern Amami Ōshima": "ams",
"Southern Bai": "bfs",
"Southern Birifor": "biv",
"Southern Bobo": "bwq",
"Southern Bontoc": "obk",
"Southern Carrier": "caf",
"Southern Catanduanes Bikol": "bln",
"Southern Dagaare": "dga",
"Southern East Cree": "crj",
"Southern Ghale": "ghe",
"Southern Grebo": "grj",
"Southern Guiyang Hmong": "hmy",
"Southern Haida": "hax",
"Southern Hindko": "hnd",
"Southern Kalapuya": "sxk",
"Southern Kalinga": "ksc",
"Southern Kam": "kmc",
"Southern Khanty": "kca-sou",
"Southern Kissi": "kss",
"Southern Kiwai": "kjd",
"Southern Kurdish": "sdh",
"Southern Lolopo": "ysp",
"Southern Lorung": "lrr",
"Southern Luri": "luz",
"Southern Ma'di": "snm",
"Southern Mansi": "mns-sou",
"Southern Mashan Hmong": "hma",
"Southern Mnong": "mnn",
"Southern Muji": "ymc",
"Southern Ndebele": "nr",
"Southern Ngbandi": "nbw",
"Southern Nicobarese": "nik",
"Southern Nisu": "nsd",
"Southern Nuni": "nnw",
"Southern Ohlone": "css",
"Southern One": "osu",
"Southern Pame": "pmz",
"Southern Pinghua": "csp",
"Southern Pomo": "peq",
"Southern Puebla Mixtec": "mit",
"Southern Pumi": "pmj",
"Southern Qiandong Miao": "hms",
"Southern Qiang": "qxs",
"Southern Rengma Naga": "nre",
"Southern Rincon Zapotec": "zsr",
"Southern Roglai": "rgs",
"Southern Sama": "ssb",
"Southern Sami": "sma",
"Southern Samo": "sbd",
"Southern Selkup": "sel-sou",
"Southern Sierra Miwok": "skd",
"Southern Thai": "sou",
"Southern Tidung": "itd",
"Southern Tiwa": "tix",
"Southern Toussian": "wib",
"Southern Tujia": "tjs",
"Southern Tutchone": "tce",
"Southern Valley Yokuts": "yok-svy",
"Southern Yukaghir": "yux",
"Southwest Gbaya": "gso",
"Southwest Palawano": "plv",
"Southwest Pashayi": "psh",
"Southwest Tanna": "nwi",
"Southwestern Bontoc": "vbk",
"Southwestern Dinka": "dik",
"Southwestern Fars": "fay",
"Southwestern Guiyang Hmong": "hmg",
"Southwestern Huishui Hmong": "hmh",
"Southwestern Nisu": "nsv",
"Southwestern Tarahumara": "twr",
"Southwestern Tepehuan": "tla",
"Southwestern Tlaxiaco Mixtec": "meh",
"Sowa": "sww",
"Sowanda": "sow",
"Soyaltepec Mazatec": "vmp",
"Soyaltepec Mixtec": "vmq",
"Spanish": "es",
"Spanish Sign Language": "ssp",
"Spiti Bhoti": "spt",
"Spokane": "spo",
"Squamish": "squ",
"Sranan Tongo": "srn",
"Sri Lankan Creole Malay": "sci",
"Sri Lankan Sign Language": "sqs",
"Stau": "ero-tau",
"Stod Bhoti": "sbu",
"Stoney": "sto",
"Suabo": "szp",
"Suau": "swp",
"Suba": "sxb",
"Suba-Simbiti": "ssc",
"Subi": "xsj",
"Subiya": "sbs",
"Subtiaba": "sut",
"Sudanese Arabic": "apd",
"Sudest": "tgo",
"Sudovian": "xsv",
"Suena": "sue",
"Suga": "sgi",
"Suganga": "sug",
"Sugut Dusun": "kzs",
"Sui": "swi",
"Suki": "sui",
"Suku": "sub",
"Sukuma": "suk",
"Sukur": "syk",
"Sukurum": "zsu",
"Sula": "szn",
"Sulka": "sua",
"Sulod": "srg",
"Suma": "sqm",
"Sumariup": "siv",
"Sumau": "six",
"Sumbawa": "smw",
"Sumbwa": "suw",
"Sumerian": "sux",
"Sumtu Chin": "csv",
"Sunam": "ssk",
"Sundanese": "su",
"Sungwadaga": "mwo",
"Sungwadia": "mrb",
"Sunum": "ymn",
"Sunwar": "suz",
"Suoy": "syo",
"Supyire": "spp",
"Sur": "tdl",
"Surbakhal": "sbj",
"Suri": "suq",
"Surigaonon": "sgd",
"Surjapuri": "sjp",
"Sursurunga": "sgz",
"Suruahá": "swx",
"Surubu": "sde",
"Suruí": "sru",
"Suruí Do Pará": "mdz",
"Susquehannock": "sqn",
"Susu": "sus",
"Susuami": "ssu",
"Suundi": "sdj",
"Suwawa": "swu",
"Suyá": "suy",
"Svan": "sva",
"Swabian": "swg",
"Swahili": "sw",
"Swampy Cree": "csw",
"Swazi": "ss",
"Swedish": "sv",
"Swedish Sign Language": "swl",
"Swiss-French Sign Language": "ssr",
"Swiss-German Sign Language": "sgg",
"Swiss-Italian Sign Language": "slf",
"Swo": "sox",
"Syenara": "shz",
"Sylheti": "syl",
"Sácata": "sai-sac",
"São Paulo Kaingáng": "zkp",
"Sãotomense": "cri",
"Sîshëë": "sih",
"Sô": "sss",
"T'en": "tct",
"Taabwa": "tap",
"Taba": "mky",
"Tabaa Zapotec": "zat",
"Tabancale": "sai-tab",
"Tabaru": "tby",
"Tabasaran": "tab",
"Tabasco Nahuatl": "nhc",
"Tabasco Zoque": "zoq",
"Tabla": "tnm",
"Tabo": "knv",
"Tabriak": "tzx",
"Tacahua Mixtec": "xtt",
"Tacana": "tna",
"Tachawit": "shy",
"Tadaksahak": "dsq",
"Tadyawan": "tdy",
"Tae'": "rob",
"Tafi": "tcd",
"Tafreshi": "xme-taf",
"Tagabawa": "bgs",
"Tagakaulu Kalagan": "klg",
"Tagal Murut": "mvv",
"Tagalog": "tl",
"Tagbu": "tbm",
"Tagdal": "tda",
"Tagish": "tgx",
"Tagoi": "tag",
"Tagwana": "tgw",
"Tahitian": "ty",
"Tahltan": "tht",
"Tai": "taw",
"Tai Daeng": "tyr",
"Tai Dam": "blt",
"Tai Do": "tyj",
"Tai Dón": "twh",
"Tai Hang Tong": "thc",
"Tai Hongjin": "tiz",
"Tai Laing": "tjl",
"Tai Loi": "tlq",
"Tai Long": "thi",
"Tai Nüa": "tdd",
"Tai Pao": "tpo",
"Tai Thanh": "tmm",
"Tai Ya": "cuu",
"Taiap": "gpn",
"Taikat": "aos",
"Taimyr Pidgin Russian": "crp-tpr",
"Tainae": "ago",
"Tairuma": "uar",
"Taishanese": "zhx-tai",
"Taita": "dav",
"Taivoan": "tvx",
"Taiwan Sign Language": "tss",
"Taje": "pee",
"Tajik": "tg",
"Tajiki Arabic": "abh",
"Tajio": "tdj",
"Tajuasohn": "tja",
"Takelma": "tkm",
"Takia": "tbc",
"Takua": "tkz",
"Takuu": "nho",
"Takwane": "tke",
"Tal": "tal",
"Tala": "tak",
"Talaud": "tld",
"Taliabu": "tlv",
"Talieng": "tdf",
"Talinga-Bwisi": "tlj",
"Talise": "tlr",
"Tallán": "sai-tal",
"Talodi": "tlo",
"Taloki": "tlk",
"Talondo'": "tln",
"Talossan": "tzl",
"Talu": "yta",
"Talysh": "tly",
"Tama (Chad)": "tma",
"Tama (Colombia)": "ten",
"Tamagario": "tcg",
"Tamambo": "mla",
"Taman (Indonesia)": "tmn",
"Taman (Myanmar)": "tcl",
"Tamanaku": "tmz",
"Tamazola Mixtec": "vmx",
"Tambas": "tdk",
"Tambora": "xxt",
"Tambotalo": "tls",
"Tami": "tmy",
"Tamil": "ta",
"Tamki": "tax",
"Tamnim Citak": "tml",
"Tampias Lobu": "low",
"Tampuan": "tpu",
"Tampulma": "tpm",
"Tanacross": "tcb",
"Tanahmerah": "tcm",
"Tanapag": "tpv",
"Tanchangya": "tnv",
"Tandaganon": "tgn",
"Tandia": "tni",
"Tanema": "tnx",
"Tangale": "tan",
"Tangam": "sit-tgm",
"Tanggu": "tgu",
"Tangkhul Naga": "nmf",
"Tangko": "tkx",
"Tangoa": "tgp",
"Tangsa": "nst",
"Tanguat": "tbs",
"Tangut": "txg",
"Tangwang": "mis-tnw",
"Tanimbili": "tbe",
"Tanimuca-Retuarã": "tnc",
"Tanjijili": "uji",
"Tanudan Kalinga": "kml",
"Tanzanian Sign Language": "tza",
"Taos": "twf",
"Tapachultec": "nai-tap",
"Taparita": "sai-tpr",
"Tapayuna": "sai-tap",
"Tapei": "afp",
"Tapieté": "tpj",
"Tapirapé": "taf",
"Tar Gula": "kcm",
"Tara Baka": "bdh",
"Tarairiú": "sai-trr",
"Tarantino": "roa-tar",
"Tarao": "tro",
"Taraon": "mhu",
"Tareng": "tgr",
"Tariana": "tae",
"Tarifit": "rif",
"Tarjumo": "txj",
"Tarok": "yer",
"Taroko": "trv",
"Tarpia": "tpf",
"Tartessian": "txr",
"Taruma": "tdm",
"Tasawaq": "twq",
"Tashelhit": "shi",
"Tasmate": "tmt",
"Tat": "ttt",
"Tataltepec Chatino": "cta",
"Tatana": "txx",
"Tatar": "tt",
"Tataviam": "azc-tat",
"Tatuyo": "tav",
"Tauade": "ttd",
"Taulil": "tuh",
"Taungyo": "tco",
"Taupota": "tpa",
"Tause": "tad",
"Taushiro": "trr",
"Tausug": "tsg",
"Tauya": "tya",
"Taveta": "tvs",
"Tavoyan": "tvn",
"Tavringer Romani": "rmu",
"Tawala": "tbo",
"Tawandê": "xtw",
"Tawang Monpa": "twm",
"Tawasa": "nai-taw",
"Taworta": "tbp",
"Tawoyan": "twy",
"Tawr Chin": "tcp",
"Tay Khang": "tnu",
"Taymanitic": "sem-tay",
"Tayo": "cks",
"Taíno": "tnq",
"Tboli": "tbl",
"Tchitchege": "tck",
"Tchumbuli": "bqa",
"Te'un": "tve",
"Teanu": "tkw",
"Tebul Sign Language": "tsy",
"Tebul Ure Dogon": "dtu",
"Tecpatlán Totonac": "tcw",
"Tedaga": "tuq",
"Tedim Chin": "ctd",
"Tee": "tkq",
"Tefaro": "tfo",
"Tegali": "ras",
"Tehit": "kps",
"Tehuelche": "teh",
"Teiwa": "twe",
"Tejalapan Zapotec": "ztt",
"Teke-Fuumu": "ifm",
"Teke-Kukuya": "kkw",
"Teke-Laali": "lli",
"Teke-Tege": "teg",
"Teke-Tsaayi": "tyi",
"Teke-Tyee": "tyx",
"Tektiteko": "ttc",
"Tela-Masbuar": "tvm",
"Telefol": "tlf",
"Telugu": "te",
"Teluti": "tlt",
"Tem": "kdh",
"Temascaltepec Nahuatl": "nhv",
"Tembé": "tqb",
"Teme": "tdo",
"Temein": "teq",
"Temi": "soz",
"Temiar": "tea",
"Temne": "tem",
"Temoaya Otomi": "ott",
"Temoq": "tmo",
"Tempasuk Dusun": "tdu",
"Ten'edn": "tnz",
"Tenango Otomi": "otn",
"Tene Kan Dogon": "dtk",
"Tenggarong Kutai Malay": "vkt",
"Tengger": "tes",
"Tenharim": "pah",
"Tenino": "tqn",
"Tenis": "tns",
"Tennet": "tex",
"Teochew": "nan-tws",
"Teojomulco Chatino": "omq-teo",
"Teop": "tio",
"Teor": "tev",
"Tepecano": "tep",
"Tepetotutla Chinantec": "cnt",
"Tepeuxila Cuicatec": "cux",
"Tepinapa Chinantec": "cte",
"Tepo Krumen": "ted",
"Teposcolula Mixtec": "omq-tel",
"Tequistlatec": "nai-teq",
"Ter Sami": "sjt",
"Tera": "ttr",
"Terebu": "trb",
"Terei": "buo",
"Terengganu Malay": "poz-ter",
"Tereno": "ter",
"Teressa": "tef",
"Tereweng": "twg",
"Teribe": "tfr",
"Terik": "tec",
"Termanu": "twu",
"Ternate": "tft",
"Ternateño": "tmg",
"Tese": "keg",
"Teshenawa": "twc",
"Tetela": "tll",
"Tetelcingo Nahuatl": "nhg",
"Tetete": "teb",
"Tetserret": "tez",
"Tetum": "tet",
"Tetun Dili": "tdt",
"Teushen": "sai-teu",
"Teutila Cuicatec": "cut",
"Tewa": "tew",
"Texcatepec Otomi": "otx",
"Texistepec Popoluca": "poq",
"Texmelucan Zapotec": "zpz",
"Tezoatlán Mixtec": "mxb",
"Tha": "thy",
"Thachanadan": "thn",
"Thado Chin": "tcz",
"Thai": "th",
"Thai Mon": "mnw-tha",
"Thai Sign Language": "tsq",
"Thai Song": "soa",
"Thaiphum Chin": "cth",
"Thakali": "ths",
"Thamudic": "sem-tha",
"Thangal Naga": "nki",
"Thangmi": "thf",
"Thao": "ssf",
"Tharaka": "thk",
"Tharrgari": "dhr",
"Thavung": "thm",
"Thawa": "xtv",
"Tho": "tou",
"Thompson": "thp",
"Thopho": "ytp",
"Thracian": "txh",
"Thu Lao": "tyl",
"Thulung": "tdh",
"Thurawal": "tbh",
"Thuri": "thu",
"Tiagba": "ahi",
"Tiale": "mnl",
"Tiang": "tbj",
"Tibea": "ngy",
"Tibetan": "bo",
"Tibetan Sign Language": "lsn",
"Ticuna": "tca",
"Tidaá Mixtec": "mtx",
"Tidore": "tvo",
"Tiemacèwè Bozo": "boo",
"Tiene": "tii",
"Tifal": "tif",
"Tigak": "tgc",
"Tigon Mbembe": "nza",
"Tigre": "tig",
"Tigrinya": "ti",
"Tii": "txq",
"Tijaltepec Mixtec": "xtl",
"Tikar": "tik",
"Tikopia": "tkp",
"Tilapa Otomi": "otl",
"Tillamook": "til",
"Tilquiapan Zapotec": "zts",
"Tilung": "tij",
"Tima": "tms",
"Timbe": "tim",
"Timor Pidgin": "tvy",
"Timote": "sai-tim",
"Timucua": "tjm",
"Timugon Murut": "tih",
"Tinani": "lbf",
"Tindi": "tin",
"Tingui-Boto": "tgv",
"Tinigua": "tit",
"Tinoc Kallahan": "tne",
"Tinputz": "tpz",
"Tinrin": "cir",
"Tipai": "nai-tip",
"Tippera": "tpe",
"Tira": "tic",
"Tirahi": "tra",
"Tiranige Diga Dogon": "tde",
"Tirax": "mme",
"Tiruray": "tiy",
"Tita": "tdq",
"Titan": "ttv",
"Tiv": "tiv",
"Tiwa": "lax",
"Tiwi": "tiw",
"Tiéfo": "tiq",
"Tiéyaxo Bozo": "boz",
"Tjurruru": "tju",
"Tlachichilco Tepehua": "tpt",
"Tlacoapa Me'phaa": "tpl",
"Tlacoatzintepec Chinantec": "ctl",
"Tlacolulita Zapotec": "zpk",
"Tlahuica": "ocu",
"Tlahuitoltepec Mixe": "mxp",
"Tlamacazapa Nahuatl": "nuz",
"Tlazoyaltepec Mixtec": "mqh",
"Tlingit": "tli",
"To": "toz",
"To'abaita": "mlu",
"Toaripi": "tqo",
"Toba": "tob",
"Toba Batak": "bbc",
"Toba-Maskoy": "tmf",
"Tobagonian Creole English": "tgh",
"Tobanga": "tng",
"Tobati": "tti",
"Tobelo": "tlb",
"Tobian": "tox",
"Tobilung": "tgb",
"Tobo": "tbv",
"Tocantins Asurini": "asu",
"Tocharian A": "xto",
"Tocharian B": "txb",
"Tocho": "taz",
"Toda": "tcx",
"Todrah": "tdr",
"Tofa": "kim",
"Tofanma": "tlg",
"Tofin Gbe": "tfi",
"Togbo-Vara Banda": "tor",
"Togoyo": "tgy",
"Tojolabal": "toj",
"Tok Pisin": "tpi",
"Toka-Leya": "dov",
"Tokano": "zuh",
"Tokelauan": "tkl",
"Toki Pona": "tok",
"Tokunoshima": "tkn",
"Tol": "jic",
"Tolai": "ksd",
"Tolaki": "lbw",
"Tolomako": "tlm",
"Tolowa": "tol",
"Toloza": "ytl",
"Toma": "tod",
"Tomadino": "tdi",
"Tombelala": "ttp",
"Tombonuo": "txa",
"Tombulu": "tom",
"Tomini": "txm",
"Tommeginne": "xpv",
"Tommo So": "dto",
"Tomo Kan Dogon": "dtm",
"Tomoip": "tqp",
"Tondano": "tdn",
"Tonga (Malawi)": "tog",
"Tonga (Mozambique)": "toh",
"Tonga (Zambia)": "toi",
"Tongan": "to",
"Tongwe": "tny",
"Tonjon": "tjn",
"Tonkawa": "tqw",
"Tonsawang": "tnw",
"Tonsea": "txs",
"Tontemboan": "tnt",
"Toogee": "xpx",
"Tooro": "ttj",
"Topoiyo": "toy",
"Toposa": "toq",
"Toraja-Sa'dan": "sda",
"Toram": "trj",
"Torau": "ttu",
"Toro": "tdv",
"Toro So Dogon": "dts",
"Toro Tegu Dogon": "dtt",
"Toromono": "tno",
"Torona": "tqr",
"Torres Strait Creole": "tcs",
"Torricelli": "tei",
"Torwali": "trw",
"Torá": "trz",
"Tosu": "sit-tos",
"Totela": "ttl",
"Toto": "txo",
"Totoli": "txe",
"Totomachapan Zapotec": "zph",
"Totontepec Mixe": "mto",
"Totoro": "ttk",
"Touo": "tqu",
"Toura": "neb",
"Towei": "ttn",
"Translingual": "mul",
"Transylvanian Saxon": "gmw-tsx",
"Traveller Danish": "rmd",
"Traveller Norwegian": "rmg",
"Traveller Scottish": "trl",
"Tregami": "trm",
"Tremembé": "tme",
"Trieng": "stg",
"Trimuris": "tip",
"Tring": "tgq",
"Tringgus": "trx",
"Trinidad and Tobago Sign Language": "lst",
"Trinidadian Creole English": "trf",
"Trinitario": "trn",
"Trió": "tri",
"Truká": "tka",
"Trumai": "tpy",
"Ts'ün-Lao": "tsl",
"Tsaangi": "tsa",
"Tsafiki": "cof",
"Tsakhur": "tkr",
"Tsakonian": "tsd",
"Tsakwambo": "kvz",
"Tsamai": "tsb",
"Tsat": "huq",
"Tsetsaut": "txc",
"Tsez": "ddo",
"Tshangla": "tsj",
"Tshobdun": "sit-tsh",
"Tshwa": "hio",
"Tsikimba": "kdl",
"Tsimané": "cas",
"Tsimshian": "tsi",
"Tsishingini": "tsw",
"Tso": "ldp",
"Tsogo": "tsv",
"Tsonga": "ts",
"Tsotsitaal": "fly",
"Tsou": "tsu",
"Tsucuba": "cbq",
"Tsum": "ttz",
"Tsuut'ina": "srs",
"Tsuvadi": "tvd",
"Tsuvan": "tsh",
"Tswa": "tsc",
"Tswana": "tn",
"Tswapong": "two",
"Tuamotuan": "pmt",
"Tuareg": "tmh",
"Tubar": "tbu",
"Tucano": "tuo",
"Tugen": "tuy",
"Tugun": "tzn",
"Tugutil": "tuj",
"Tuki": "bag",
"Tukpa": "tpq",
"Tukudede": "tkd",
"Tukumanféd": "tkf",
"Tula": "tul",
"Tule-Kaweah Yokuts": "yok-tky",
"Tulehu": "tlu",
"Tulishi": "tey",
"Tulu": "tcy",
"Tulu-Bohuai": "rak",
"Tulua": "aus-tul",
"Tuma-Irumu": "iou",
"Tumak": "tmc",
"Tumbuka": "tum",
"Tumi": "kku",
"Tumleo": "tmq",
"Tumshuqese": "xtq",
"Tumtum": "tbr",
"Tumulung Sisaala": "sil",
"Tundra Enets": "enh",
"Tundra Nenets": "yrk-tun",
"Tunen": "tvu",
"Tungag": "lcm",
"Tunggare": "trt",
"Tunia": "tug",
"Tunica": "tun",
"Tunisian Arabic": "aeb",
"Tunisian Berber": "sds",
"Tunisian Sign Language": "tse",
"Tunjung": "tjg",
"Tunni": "tqq",
"Tunumiisut": "esx-tut",
"Tunzu": "dza",
"Tuoba": "mis-tuo",
"Tuotomb": "ttf",
"Tuparí": "tpr",
"Tupinambá": "tpn",
"Tupinikin": "tpk",
"Tupuri": "tui",
"Turaka": "trh",
"Turdetanian": "mis-tdt",
"Turdulian": "mis-tdl",
"Turi": "trd",
"Turiwára": "twt",
"Turka": "tuz",
"Turkana": "tuv",
"Turkish": "tr",
"Turkish Sign Language": "tsm",
"Turkmen": "tk",
"Turks and Caicos Creole English": "tch",
"Turoyo": "tru",
"Turumsa": "tqm",
"Turung": "try",
"Tuscarora": "tus",
"Tutelo": "tta",
"Tutong": "ttg",
"Tutsa Naga": "tvt",
"Tutuba": "tmi",
"Tututepec Mixtec": "mtu",
"Tututni": "tuu",
"Tuvaluan": "tvl",
"Tuvan": "tyv",
"Tuwali Ifugao": "ifk",
"Tuwari": "tww",
"Tuwuli": "bov",
"Tuxináwa": "tux",
"Tuxá": "tud",
"Tuyuca": "tue",
"Tuyuhun": "mis-tuh",
"Twana": "twa",
"Twendi": "twn",
"Tyap": "kcg",
"Tyaraity": "woa",
"Tyerrernotepanner": "xph",
"Tz'utujil": "tzj",
"Tzeltal": "tzh",
"Tzotzil": "tzo",
"Tày": "tyz",
"Tày Tac": "tyt",
"Tây Bồi": "tas",
"Téén": "lor",
"Tübatulabal": "tub",
"U": "uuu",
"Uab Meto": "aoz",
"Uamué": "uam",
"Uare": "ksj",
"Ubaghara": "byc",
"Ubang": "uba",
"Ubi": "ubi",
"Ubir": "ubr",
"Ubykh": "uby",
"Ucayali-Yurúa Ashéninka": "cpb",
"Uda": "uda",
"Udi": "udi",
"Udihe": "ude",
"Udmurt": "udm",
"Uduk": "udu",
"Ufim": "ufi",
"Ugandan Sign Language": "ugn",
"Ugaritic": "uga",
"Ughele": "uge",
"Uhami": "uha",
"Uisai": "uis",
"Ujir": "udj",
"Ukaan": "kcf",
"Ukhwejo": "ukh",
"Ukit": "umi",
"Ukpe-Bayobiri": "ukp",
"Ukpet-Ehom": "akd",
"Ukrainian": "uk",
"Ukrainian Sign Language": "ukl",
"Ukue": "uku",
"Ukuriguma": "ukg",
"Ukwa": "ukq",
"Ukwuani-Aboh-Ndoni": "ukw",
"Ulau-Suain": "svb",
"Ulch": "ulc",
"Uldeme": "udl",
"Ulithian": "uli",
"Ullatan": "ull",
"Ulumanda'": "ulm",
"Ulwa (New Guinea)": "yla",
"Ulwa (Nicaragua)": "ulw",
"Uma": "ppk",
"Uma' Lasan": "xky",
"Uma' Lung": "ulu",
"Umanakaina": "gdn",
"Umatilla": "uma",
"Umbindhamu": "umd",
"Umbrian": "xum",
"Umbu-Ungu": "ubu",
"Umbugarla": "umr",
"Umbundu": "umb",
"Umbuygamu": "umg",
"Ume Sami": "sju",
"Umeda": "upi",
"Umiida": "xud",
"Umiray Dumaget Agta": "due",
"Umon": "umm",
"Umotína": "umo",
"Umpila": "ump",
"Una": "mtg",
"Unami": "unm",
"Unde Kaili": "unz",
"Undetermined": "und",
"Uneapa": "bbn",
"Uneme": "une",
"Unggaranggu": "xun",
"Unggumi": "xgu",
"Uni": "uni",
"Unserdeutsch": "uln",
"Unua": "onu",
"Unubahe": "unu",
"Uokha": "uok",
"Upper Chehalis": "cjh",
"Upper Grand Valley Dani": "dna",
"Upper Kinabatangan": "dmg",
"Upper Kuskokwim": "kuu",
"Upper Mandobo": "aax",
"Upper Necaxa Totonac": "tku",
"Upper Sorbian": "hsb",
"Upper Ta'oih": "tth",
"Upper Tanana": "tau",
"Upper Taromi": "tov",
"Upper Umpqua": "xup",
"Ura (New Guinea)": "uro",
"Ura (Vanuatu)": "uur",
"Uradhi": "urf",
"Urak Lawoi'": "urk",
"Urali": "url",
"Urapmin": "urm",
"Urarina": "ura",
"Urartian": "xur",
"Urat": "urt",
"Urdu": "ur",
"Urhobo": "urh",
"Uri": "uvh",
"Urigina": "urg",
"Urim": "uri",
"Urimo": "urx",
"Urningangg": "urc",
"Uru": "ure",
"Uru-Eu-Wau-Wau": "urz",
"Uru-Pa-In": "urp",
"Uruangnirin": "urn",
"Uruava": "urv",
"Urubú-Kaapor": "urb",
"Uruguayan Sign Language": "ugy",
"Urum": "uum",
"Urumi": "uru",
"Usaghade": "usk",
"Usan": "wnu",
"Usarufa": "usa",
"Ushojo": "ush",
"Usila Chinantec": "cuc",
"Uspanteco": "usp",
"Usui": "usi",
"Utarmbung": "omo",
"Ute": "ute",
"Utu": "utu",
"Uvbie": "evh",
"Uwinymil": "aus-uwi",
"Uya": "usu",
"Uyajitaya": "duk",
"Uyghur": "ug",
"Uzbek": "uz",
"Uzbeki Arabic": "auz",
"Uzekwe": "eze",
"Vaagri Booli": "vaa",
"Vaghri": "vgr",
"Vaghua": "tva",
"Vagla": "vag",
"Vai": "vai",
"Vaiphei": "vap",
"Vale": "vae",
"Valencian Sign Language": "vsv",
"Valle Nacional Chinantec": "cvn",
"Valley Maidu": "vmv",
"Valman": "van",
"Valpei": "vlp",
"Vamale": "mkt",
"Vame": "mlr",
"Vandalic": "xvn",
"Vangunu": "mpr",
"Vanimo": "vam",
"Vanji": "ira-wnj",
"Vanuma": "vau",
"Vao": "vao",
"Varhadi": "vah",
"Varisi": "vrs",
"Varli": "vav",
"Vasavi": "vas",
"Vayu": "vay",
"Veddah": "ved",
"Vehes": "val",
"Vemgo-Mabas": "vem",
"Venda": "ve",
"Venetan": "vec",
"Venetic": "xve",
"Venezuelan Sign Language": "vsl",
"Ventureño": "veo",
"Veps": "vep",
"Vera'a": "vra",
"Vestinian": "xvs",
"Vidunda": "vid",
"Viemo": "vig",
"Vietnamese": "vi",
"Vilamovian": "wym",
"Vilela": "vil",
"Vili": "vif",
"Vincentian Creole English": "svc",
"Vinitiri": "vmg",
"Virgin Islands Creole": "vic",
"Vishavan": "vis",
"Viti": "vit",
"Vitou": "vto",
"Viya": "gev",
"Vlax Romani": "rmy",
"Volapük": "vo",
"Volga German": "gmw-vog",
"Volscian": "xvo",
"Vono": "kch",
"Voro": "vor",
"Votic": "vot",
"Vumbu": "vum",
"Vunapu": "vnp",
"Vunjo": "vun",
"Vurës": "msn",
"Vute": "vut",
"Võro": "vro",
"Wa": "wbm",
"Wa'ema": "wag",
"Waama": "wwa",
"Waamwang": "wmn",
"Wab": "wab",
"Wabo": "wbb",
"Waboda": "kmx",
"Waci Gbe": "wci",
"Wadaginam": "wdg",
"Waddar": "wbq",
"Wadi Wadi": "xwd",
"Wadiyara Koli": "kxp",
"Wadjabangayi": "wdy",
"Wadjiginy": "wdj",
"Wadjigu": "wdu",
"Wae Rana": "wrx",
"Waffa": "waj",
"Wagawaga": "wgb",
"Wagaya": "wga",
"Wagdi": "wbr",
"Wageman": "waq",
"Wagi": "fad",
"Wahau Kayan": "whu",
"Wahau Kenyah": "whk",
"Wahgi": "wgi",
"Waigali": "wbk",
"Waigeo": "wgo",
"Waikuri": "nai-wai",
"Wailaki": "wlk",
"Wailapa": "wlr",
"Waima'a": "wmh",
"Waimaha": "bao",
"Waimiri-Atroari": "atr",
"Wainumá": "awd-wai",
"Waioli": "wli",
"Waitaká": "sai-wai",
"Waiwai": "waw",
"Waja": "wja",
"Wajarri": "wbv",
"Wajuk": "xwj",
"Waka": "wav",
"Wakawaka": "wkw",
"Wakhi": "wbl",
"Wakoná": "waf",
"Wala": "lgl",
"Walak": "wlw",
"Walangama": "nlw",
"Wali (Ghana)": "wlx",
"Wali (Sudan)": "wll",
"Waling": "wly",
"Walio": "wla",
"Walla Walla": "waa",
"Wallisian": "wls",
"Walloon": "wa",
"Walmajarri": "wmt",
"Wam": "wmo",
"Wamas": "wmc",
"Wambaya": "wmb",
"Wambon": "wms",
"Wambule": "wme",
"Wamey": "cou",
"Wamin": "wmi",
"Wampar": "lbq",
"Wampur": "waz",
"Wan": "wan",
"Wanap": "wnp",
"Wancho": "nnp",
"Wanda": "wbh",
"Wandala": "mfi",
"Wandamen": "wad",
"Wandarang": "wnd",
"Wandji": "wdd",
"Waneci": "wne",
"Wanga": "lwg",
"Wanggamala": "wnm",
"Wangganguru": "wgg",
"Wanggom": "wng",
"Wangkayutyuru": "wky",
"Wangkumara": "xwk",
"Wanham": "sai-wnm",
"Wanji": "wbi",
"Wanman": "wbt",
"Wannu": "jub",
"Wano": "wno",
"Wantoat": "wnc",
"Wanukaka": "wnk",
"Wanyi": "wny",
"Wané": "hwa",
"Wapan": "juk",
"Wapishana": "wap",
"Wappo": "wao",
"War-Jaintia": "aml",
"Wara": "wbf",
"Warao": "wba",
"Warapu": "wra",
"Waray Sorsogon": "srv",
"Waray-Waray": "war",
"Wardaman": "wrr",
"Wardandi": "wxw",
"Warekena": "gae",
"Warembori": "wsa",
"Wari'": "pav",
"Waris": "wrs",
"Waritai": "wbe",
"Wariyangga": "wri",
"Warji": "wji",
"Warkay-Bipim": "bgv",
"Warlmanpa": "wrl",
"Warlpiri": "wbp",
"Warluwara": "wrb",
"Warnang": "wrn",
"Waropen": "wrp",
"Warray": "wrz",
"Warrgamay": "wgy",
"Warrwa": "wwr",
"Waru": "wru",
"Warumungu": "wrm",
"Waruna": "wrv",
"Warungu": "wrg",
"Warwar Feni": "hrw",
"Wasco-Wishram": "wac",
"Wasembo": "gsp",
"Washo": "was",
"Waskia": "wsk",
"Wastek": "hus",
"Wasu": "wsu",
"Watakataui": "wtk",
"Watam": "wax",
"Wathaurong": "wth",
"Watiwa": "wtf",
"Watubela": "wah",
"Waube": "kop",
"Wauja": "wau",
"Wauyai": "wuy",
"Wawa": "www",
"Wawonii": "wow",
"Waxiang": "wxa",
"Wayampi": "oym",
"Wayana": "way",
"Wayanad Chetti": "ctt",
"Wayoró": "wyr",
"Wayumara": "sai-way",
"Wayuu": "guc",
"Wedau": "wed",
"Weh": "weh",
"Welaung": "weu",
"Weliki": "klh",
"Welsh": "cy",
"Welsh Romani": "rmw",
"Wemale": "weo",
"Wemba-Wemba": "xww",
"Weme Gbe": "wem",
"Wendat": "wdt",
"Weri": "wer",
"Wersing": "kvw",
"West Ambae": "nnd",
"West Central Banda": "bbp",
"West Circassian": "ady",
"West Coast Bajau": "bdr",
"West Damar": "drn",
"West Flemish": "vls",
"West Frisian": "fy",
"West Greenlandic Pidgin": "crp-gep",
"West Lembata": "lmj",
"West Makian": "mqs",
"West Masela": "mss",
"West Miraya Bikol": "fbl",
"West Tarangan": "txn",
"West Uvean": "uve",
"West-Central Limba": "lia",
"Western Apache": "apw",
"Western Arrernte": "are",
"Western Bolivian Guarani": "gnw",
"Western Bru": "brv",
"Western Bukidnon Manobo": "mbb",
"Western Cham": "cja",
"Western Dani": "dnw",
"Western Durango Nahuatl": "azn",
"Western Fijian": "wyy",
"Western Highland Chatino": "ctp",
"Western Huasteca Nahuatl": "nhw",
"Western Jicaque": "nai-wji",
"Western Juxtlahuaca Mixtec": "jmx",
"Western Karaboro": "kza",
"Western Katu": "kuf",
"Western Kayah": "kyu",
"Western Keres": "kjq",
"Western Krahn": "krw",
"Western Lalu": "ywl",
"Western Lawa": "lcp",
"Western Magar": "mrd",
"Western Maninkakan": "mlq",
"Western Mari": "mrj",
"Western Mashan Hmong": "hmw",
"Western Meohang": "raf",
"Western Muria": "mut",
"Western Neo-Aramaic": "amw",
"Western Ojibwa": "ojw",
"Western Parbate Kham": "kjl",
"Western Penan": "pne",
"Western Pwo": "pwo",
"Western Sisaala": "ssl",
"Western Subanon": "suc",
"Western Tamang": "tdg",
"Western Tawbuid": "twb",
"Western Totonac": "tqt",
"Western Tunebo": "tnb",
"Western Xiangxi Miao": "mmr",
"Western Xwla Gbe": "xwl",
"Western Yugur": "ybe",
"Wewaw": "wea",
"Weyewa": "wew",
"Weyto": "woy",
"White Gelao": "giw",
"White Hmong": "mww",
"White Lachi": "lwh",
"Whitesands": "tnp",
"Wiarumus": "tua",
"Wichita": "wic",
"Wichí Lhamtés Güisnay": "mzh",
"Wichí Lhamtés Nocten": "mtp",
"Wichí Lhamtés Vejoz": "wlv",
"Wik-Epa": "wie",
"Wik-Iiyanh": "wij",
"Wik-Keyangan": "wif",
"Wik-Me'anha": "wih",
"Wik-Mungkan": "wim",
"Wik-Ngathana": "wig",
"Wikalkan": "wik",
"Wikngenchera": "wua",
"Wilawila": "wil",
"Winnebago": "win",
"Wintu": "wnw",
"Winyé": "kst",
"Wipi": "gdr",
"Wiradjuri": "wrh",
"Wiraféd": "wir",
"Wirangu": "wgu",
"Wiru": "wiu",
"Wirö": "wpc",
"Wiwa": "mbp",
"Wiyot": "wiy",
"Wobé": "wob",
"Woccon": "xwc",
"Wogamusin": "wog",
"Wogeo": "woc",
"Woi": "wbw",
"Woiwurrung": "wyi",
"Wojenaka": "jod",
"Wolane": "wle",
"Wolani": "wod",
"Wolaytta": "wal",
"Woleaian": "woe",
"Wolio": "wlo",
"Wolof": "wo",
"Womo": "wmx",
"Wong-gie": "aus-won",
"Wongo": "won",
"Woods Cree": "cwd",
"Woria": "wor",
"Worimi": "kda",
"Worodougou": "jud",
"Worora": "wro",
"Wotapuri-Katarqalai": "wsv",
"Wotu": "wtw",
"Woun Meu": "noa",
"Written Oirat": "xwo",
"Wu": "wuu",
"Wudu": "wud",
"Wuhuan": "mis-wuh",
"Wulguru": "aus-wul",
"Wuliwuli": "wlu",
"Wulna": "wux",
"Wumboko": "bqm",
"Wumbvu": "wum",
"Wumeng": "ywu",
"Wunai Bunu": "bwn",
"Wunambal": "wub",
"Wurrugu": "wur",
"Wusa": "yig",
"Wushi": "bse",
"Wusi": "wsi",
"Wutung": "wut",
"Wutunhua": "wuh",
"Wuvulu-Aua": "wuv",
"Wyandot": "wya",
"Wára": "tci",
"Wãpha": "juw",
"Wè Southern": "gxx",
"Wè Western": "wec",
"Xadani Zapotec": "zax",
"Xakriabá": "xkr",
"Xamtanga": "xan",
"Xanaguía Zapotec": "ztg",
"Xavante": "xav",
"Xerénte": "xer",
"Xetá": "xet",
"Xhosa": "xh",
"Xianbei": "mis-xbi",
"Xiang": "hsn",
"Xibe": "sjo",
"Xicotepec de Juárez Totonac": "too",
"Xinca": "xin",
"Xingú Asuriní": "asn",
"Xiongnu": "mis-xnu",
"Xipaya": "xiy",
"Xiri": "xii",
"Xiriâna": "xir",
"Xishanba Lalo": "ywt",
"Xocó": "sai-xoc",
"Xokleng": "xok",
"Xukurú": "xoo",
"Xwela Gbe": "xwe",
"Xârâcùù": "ane",
"Xârâgurè": "axx",
"Yaa": "iyx",
"Yaaku": "muu",
"Yabarana": "yar",
"Yabaâna": "ybn",
"Yaben": "ybm",
"Yabong": "ybo",
"Yabula Yabula": "yxy",
"Yace": "ekr",
"Yaeyama": "rys",
"Yafi": "wfg",
"Yagara": "yxg",
"Yagaria": "ygr",
"Yaghnobi": "yai",
"Yagomi": "ygm",
"Yagua": "yad",
"Yagwoia": "ygw",
"Yahadian": "ner",
"Yahang": "rhp",
"Yahuna": "ynu",
"Yaka": "yaf",
"Yakaikeke": "ykk",
"Yakan": "yka",
"Yakima": "yak",
"Yakkha": "ybh",
"Yakoma": "yky",
"Yakut": "sah",
"Yala": "yba",
"Yalahatan": "jal",
"Yalakalore": "xyl",
"Yalarnnga": "ylr",
"Yale": "nce",
"Yaleba": "ylb",
"Yalunka": "yal",
"Yalálag Zapotec": "zpu",
"Yamap": "ymp",
"Yamba": "yam",
"Yamben": "ynb",
"Yambes": "ymb",
"Yambeta": "yat",
"Yamdena": "jmd",
"Yameo": "yme",
"Yami": "tao",
"Yaminahua": "yaa",
"Yamongeri": "ymg",
"Yamphu": "ybi",
"Yan-nhangu": "jay",
"Yana": "ynn",
"Yanda": "yda",
"Yanda Dogon": "dym",
"Yandjibara": "xyb",
"Yandruwandha": "ynd",
"Yanesha'": "ame",
"Yangben": "yav",
"Yangkaal": "aus-ynk",
"Yangkam": "bsx",
"Yangman": "jng",
"Yango": "yng",
"Yangulam": "ynl",
"Yangum Dey": "yde",
"Yangum Gel": "ygl",
"Yangum Mon": "ymo",
"Yankunytjatjara": "kdd",
"Yanomam": "wca",
"Yanomamö": "guu",
"Yansi": "yns",
"Yanyuwa": "jao",
"Yao (Africa)": "yao",
"Yao (South America)": "sai-yao",
"Yaosakor Asmat": "asy",
"Yaouré": "yre",
"Yapese": "yap",
"Yaqay": "jaq",
"Yaqui": "yaq",
"Yarawata": "yrw",
"Yareba": "yrb",
"Yareni Zapotec": "zae",
"Yarli": "yxl",
"Yarluyandi": "yry",
"Yarumá": "sai-yar",
"Yarí": "yri",
"Yasa": "yko",
"Yatay": "yty",
"Yatee Zapotec": "zty",
"Yatzachi Zapotec": "zav",
"Yau (Finisterre)": "yuw",
"Yau (Torricelli)": "yyu",
"Yaur": "jau",
"Yautepec Zapotec": "zpb",
"Yavitero": "yvt",
"Yawa": "yva",
"Yawalapití": "yaw",
"Yawanawa": "ywn",
"Yawarawarga": "yww",
"Yaweyuha": "yby",
"Yawijibaya": "jbw",
"Yawiyo": "ybx",
"Yawuru": "ywr",
"Yaygir": "xya",
"Yazghulami": "yah",
"Ye'kwana": "mch",
"Yei": "jei",
"Yekhee": "ets",
"Yekora": "ykr",
"Yele": "yle",
"Yelmek": "jel",
"Yelogu": "ylg",
"Yemaek": "hmk",
"Yemba": "ybb",
"Yemeni Arabic": "ayn",
"Yemsa": "jnj",
"Yendang": "yen",
"Yeni": "yei",
"Yenish": "yec",
"Yerakai": "yra",
"Yeretuar": "gop",
"Yeri": "yev",
"Yerong": "yrn",
"Yerukula": "yeu",
"Yeskwa": "yes",
"Yessan-Mayo": "yss",
"Yetfa": "yet",
"Yevanic": "yej",
"Yeyi": "yey",
"Yiddish": "yi",
"Yidgha": "ydg",
"Yidiny": "yii",
"Yil": "yll",
"Yilan Creole": "ycr",
"Yimas": "yee",
"Yimchungru Naga": "yim",
"Yinbaw Karen": "kvu",
"Yinchia": "yin",
"Yindjibarndi": "yij",
"Yindjilandji": "yil",
"Yine": "pib",
"Yinggarda": "yia",
"Yinhawangka": "ywg",
"Yiningayi": "ygi",
"Yintale Karen": "kvy",
"Yinwum": "yxm",
"Yir-Yoront": "yiy",
"Yirandali": "ljw",
"Yis": "yis",
"Yitha Yitha": "xth",
"Yoba": "yob",
"Yocoboué Dida": "gud",
"Yogad": "yog",
"Yoidik": "ydk",
"Yoke": "yki",
"Yola": "yol",
"Yolmo": "scp",
"Yolngu Sign Language": "ygs",
"Yoloxochitl Mixtec": "xty",
"Yom": "pil",
"Yombe": "yom",
"Yonaguni": "yoi",
"Yong": "yno",
"Yongkom": "yon",
"Yopno": "yut",
"Yora": "mts",
"Yoron": "yox",
"Yorta Yorta": "xyy",
"Yoruba": "yo",
"Yosondúa Mixtec": "mpm",
"Youle Jino": "jiu",
"Younuo Bunu": "buh",
"Yout Wam": "ytw",
"Yoy": "yoy",
"Yuanga": "nua",
"Yucatec Maya": "yua",
"Yucatec Maya Sign Language": "msd",
"Yuchi": "yuc",
"Yucuañe Mixtec": "mvg",
"Yucuna": "ycn",
"Yug": "yug",
"Yugambal": "yub",
"Yugoslavian Sign Language": "ysl",
"Yugul": "ygu",
"Yuhup": "yab",
"Yuki": "yuk",
"Yukpa": "yup",
"Yukuben": "ybl",
"Yulu": "yul",
"Yuma": "yum",
"Yumana": "awd-yum",
"Yup'ik": "esu",
"Yupiltepeque": "nai-yup",
"Yupua": "sai-yup",
"Yuqui": "yuq",
"Yuracare": "yuz",
"Yuri": "sai-yri",
"Yurok": "yur",
"Yuru": "ljx",
"Yurumanguí": "sai-yur",
"Yurutí": "yui",
"Yutanduchi Mixtec": "mab",
"Yuwana": "yau",
"Yuyu": "yxu",
"Yámana": "yag",
"Zaachila Zapotec": "ztx",
"Zabana": "kji",
"Zacatepec Chatino": "ctz",
"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl": "nhi",
"Zaghawa": "zag",
"Zaiwa": "atb",
"Zakhring": "zkr",
"Zambian Sign Language": "zsl",
"Zan Gula": "zna",
"Zanaki": "zak",
"Zande": "zne",
"Zangskari": "zau",
"Zangwal": "zah",
"Zaniza Zapotec": "zpw",
"Zapotec": "zap",
"Zaramo": "zaj",
"Zari": "zaz",
"Zarma": "dje",
"Zauzou": "zal",
"Zay": "zwa",
"Zayein Karen": "kxk",
"Zayse-Zergulla": "zay",
"Zazaki": "zza",
"Zazao": "jaj",
"Zbu": "sit-zbu",
"Zealandic": "zea",
"Zeem": "zua",
"Zemba": "dhm",
"Zeme Naga": "nzm",
"Zenag": "zeg",
"Zenaga": "zen",
"Zenzontepec Chatino": "czn",
"Zhaba": "zhb",
"Zhang-Zhung": "xzh",
"Zhenan Min": "nan-zhe",
"Zhire": "zhi",
"Zhoa": "zhw",
"Zhuang": "za",
"Zhár": "jjr",
"Zia": "zia",
"Zialo": "zil",
"Zigula": "ziw",
"Zimakani": "zik",
"Zimba": "zmb",
"Zimbabwe Sign Language": "zib",
"Zinza": "zin",
"Zipser German": "gmw-zps",
"Zirenkel": "zrn",
"Ziriya": "zir",
"Zizilivakan": "ziz",
"Zo'é": "pto",
"Zokhuo": "yzk",
"Zoogocho Zapotec": "zpq",
"Zotung Chin": "czt",
"Zou": "zom",
"Zulgo-Gemzek": "gnd",
"Zulu": "zu",
"Zumaya": "zuy",
"Zumbun": "jmb",
"Zuni": "zun",
"Zuojiang Zhuang": "zzj",
"Zuwara": "ber-zuw",
"Zyphe": "zyp",
"Záparo": "zro",
"Àhàn": "ahn",
"Áncá": "acb",
"Äiwoo": "nfl",
"Äynu": "aib",
"Ömie": "aom",
"Önge": "oon",
"ǀXam": "xam",
"ǁAni": "hnh",
"ǁGana": "gnk",
"ǁXegwi": "xeg",
"ǂHoan": "huc",
"ǃKung": "khi-kun",
"ǃXóõ": "nmn",
"Ỹaroamë": "yro"
}
r4idez20bhfbi5cchpu8fqj9pk53291
Mòideal:title/isTitle
828
16833
86371
2026-07-23T01:47:04Z
Altronic
4137
Copy from English Wiktionary
86371
Scribunto
text/plain
local table_get_metamethod_module = "Module:table/getMetamethod"
local error = error
local rawequal = rawequal
local type = type
local function get_metamethod(...)
get_metamethod = require(table_get_metamethod_module)
return get_metamethod(...)
end
local title_eq, title_lt
local function get_title_mm()
local success, eq, lt = get_metamethod(mw.title.getCurrentTitle(), "__eq", "__lt")
if not success then
error("Failed to fetch current title") -- this should never happen
end
title_eq, title_lt, get_title_mm = eq, lt, nil
return eq
end
--[==[
Returns {true} if the input is a title object, or {false} if not.]==]
return function(obj)
if not (obj and type(obj) == "table") then
return false
end
local success, eq, lt = get_metamethod(obj, "__eq", "__lt")
-- There's no foolproof method for checking for a title object, but the
-- __eq and __lt metamethods should always be the same. Also discount titles
-- that only have fragments (returned by mw.title.new() and
-- mw.title.makeTitle() if the input starts with "#"), since they cannot
-- represent a valid page, and are broken in various ways (e.g. attempting
-- to access certain keys results in an error); see [[phab:T240678]].
return success and eq ~= nil and lt ~= nil and
rawequal(eq, (title_eq or get_title_mm())) and
rawequal(lt, title_lt) and
obj.prefixedText ~= ""
end
j1ejjc7c8trmnla3tstyr2or7aay9ft
Mòideal:data/magic words
828
16834
86373
2026-07-23T01:56:14Z
Altronic
4137
Copy from English Wiktionary
86373
Scribunto
text/plain
local next = next
local date_and_time = "mw:Help:Magic words#Date and time"
local escaped_characters = "mw:Help:Magic words#Escaped characters"
local formatting = "mw:Help:Magic words#Formatting"
local labeled_section_transclusion = "mw:Extension:Labeled Section Transclusion"
local liquidthreads = "mw:Extension:LiquidThreads"
local localization_functions = "mw:Help:Magic words#Localization functions"
local localization_variables = "mw:Help:Magic words#Localization variables"
local miscellaneous = "mw:Help:Magic words#Miscellaneous"
local namespaces = "mw:Help:Magic words#Namespaces"
local namespaces_2 = "mw:Help:Magic words#Namespaces 2"
local noexternallanglinks = "mw:Wikibase/Installation/Advanced configuration#noexternallanglinks"
local page_names = "mw:Help:Magic words#Page names"
local parser_functions_ext = "mw:Help:Extension:ParserFunctions##" -- ## is not a typo
local statistics = "mw:Help:Magic words#Statistics"
local substitution = "mw:Manual:Substitution"
local technical_metadata = "mw:Help:Magic words#Technical metadata"
local technical_metadata_of_another_page = "mw:Help:Magic words#Technical metadata of another page"
local transclusion_modifiers = "mw:Help:Magic words#Transclusion modifiers"
local url_data = "mw:Help:Magic words#URL data"
local data = {}
for k, v in next, {
["!"] = {
parser_variable = escaped_characters,
case_sensitive = false
},
["#BABEL"] = {
parser_function = "mw:Extension:Babel#Usage",
case_sensitive = false
},
["#bcp47"] = { -- Case-sensitive lowercase.
parser_function = localization_functions,
parser_variable = localization_functions, -- Not a typo.
case_sensitive = true
},
["#CATEGORYTREE"] = {
parser_function = "mw:Extension:CategoryTree#The {{#categorytree}} parser function",
case_sensitive = false
},
["#COMMASEPARATEDLIST"] = {
parser_function = formatting,
case_sensitive = false
},
["#dir"] = { -- Case-sensitive lowercase.
parser_function = localization_functions,
parser_variable = localization_functions, -- Not a typo.
case_sensitive = true
},
["#EXPR"] = {
parser_function = parser_functions_ext .. "expr",
case_sensitive = false
},
["#FORMAL"] = {
parser_function = localization_functions,
case_sensitive = true
},
["#FORMATDATE"] = {
aliases = {"#DATEFORMAT"},
parser_function = formatting,
case_sensitive = false
},
["#IF"] = {
parser_function = parser_functions_ext .. "if",
case_sensitive = false
},
["#IFEQ"] = {
parser_function = parser_functions_ext .. "ifeq",
case_sensitive = false
},
["#IFERROR"] = {
parser_function = parser_functions_ext .. "iferror",
case_sensitive = false
},
["#IFEXIST"] = {
parser_function = parser_functions_ext .. "ifexist",
case_sensitive = false
},
["#IFEXPR"] = {
parser_function = parser_functions_ext .. "ifexpr",
case_sensitive = false
},
["#interlanguagelink"] = { -- Case-sensitive lowercase.
parser_function = miscellaneous,
case_sensitive = true
},
["#interwikilink"] = { -- Case-sensitive lowercase.
parser_function = miscellaneous,
case_sensitive = true
},
["#INVOKE"] = {
parser_function = "mw:Extension:Scribunto#Usage",
case_sensitive = false
},
["#LANGUAGE"] = {
parser_function = localization_functions,
parser_variable = localization_functions, -- Not a typo.
case_sensitive = false
},
["#LQTPAGELIMIT"] = {
parser_function = liquidthreads,
case_sensitive = false
},
["#LST"] = {
aliases = {"#SECTION"},
parser_function = labeled_section_transclusion,
case_sensitive = false
},
["#LSTH"] = {
aliases = {"#SECTION-H"},
parser_function = labeled_section_transclusion,
case_sensitive = false
},
["#LSTX"] = {
aliases = {"#SECTION-X"},
parser_function = labeled_section_transclusion,
case_sensitive = false
},
["#PROPERTY"] = {
parser_function = "m:Wikidata/Notes/Inclusion syntax",
case_sensitive = false
},
["#REL2ABS"] = {
parser_function = parser_functions_ext .. "rel2abs",
case_sensitive = false
},
["#SPECIAL"] = {
parser_function = miscellaneous,
case_sensitive = false
},
["#SPECIALE"] = {
parser_function = miscellaneous,
case_sensitive = false
},
["#STATEMENTS"] = {
parser_function = "d:WD:How to use data on Wikimedia projects#Parser function",
case_sensitive = false
},
["#SWITCH"] = {
parser_function = parser_functions_ext .. "switch",
case_sensitive = false
},
["#TAG"] = {
parser_function = miscellaneous,
case_sensitive = false
},
["#TARGET"] = {
parser_function = "mw:Extension:MassMessage#Parser function delivery lists",
case_sensitive = false
},
["#TIME"] = {
parser_function = parser_functions_ext .. "time",
case_sensitive = false
},
["#timef"] = { -- Case-sensitive lowercase.
parser_function = parser_functions_ext,
case_sensitive = true
},
["#timefl"] = { -- Case-sensitive lowercase.
parser_function = parser_functions_ext,
case_sensitive = true
},
["#TIMEL"] = {
parser_function = parser_functions_ext .. "timel",
case_sensitive = false
},
["#TITLEPARTS"] = {
parser_function = parser_functions_ext .. "titleparts",
case_sensitive = false
},
["#USELIQUIDTHREADS"] = {
parser_function = liquidthreads,
case_sensitive = false
},
["="] = {
parser_variable = escaped_characters,
case_sensitive = false
},
["ANCHORENCODE"] = {
parser_function = url_data,
case_sensitive = false
},
["ARTICLEPATH"] = {
parser_variable = technical_metadata,
case_sensitive = false
},
["BASEPAGENAME"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["BASEPAGENAMEE"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["BIDI"] = {
parser_function = formatting,
case_sensitive = false
},
["CANONICALURL"] = {
parser_function = url_data,
case_sensitive = false
},
["CANONICALURLE"] = {
parser_function = url_data,
case_sensitive = false
},
["CASCADINGSOURCES"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["CONTENTLANGUAGE"] = {
aliases = {"CONTENTLANG"},
parser_variable = technical_metadata,
case_sensitive = true
},
["CURRENTDAY"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTDAY2"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTDAYNAME"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTDOW"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTHOUR"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTMONTH"] = {
aliases = {"CURRENTMONTH2"},
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTMONTH1"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTMONTHABBREV"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTMONTHNAME"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTMONTHNAMEGEN"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTTIME"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTTIMESTAMP"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTVERSION"] = {
parser_variable = technical_metadata,
case_sensitive = true
},
["CURRENTWEEK"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["CURRENTYEAR"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["DEFAULTSORT"] = {
aliases = {"DEFAULTCATEGORYSORT", "DEFAULTSORTKEY"},
parser_function = technical_metadata,
case_sensitive = true
},
["DIRECTIONMARK"] = {
aliases = {"DIRMARK"},
parser_variable = technical_metadata,
case_sensitive = true
},
["DISPLAYTITLE"] = {
parser_function = technical_metadata,
case_sensitive = true
},
["FILEPATH"] = {
parser_function = url_data,
case_sensitive = false
},
["FORMATNUM"] = {
parser_function = formatting,
case_sensitive = false
},
["FULLPAGENAME"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["FULLPAGENAMEE"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["FULLURL"] = {
parser_function = url_data,
case_sensitive = false
},
["FULLURLE"] = {
parser_function = url_data,
case_sensitive = false
},
["GENDER"] = {
parser_function = localization_functions,
case_sensitive = false
},
["GRAMMAR"] = {
parser_function = localization_functions,
case_sensitive = false
},
["INT"] = {
parser_function = localization_functions,
case_sensitive = false
},
["LC"] = {
parser_function = formatting,
case_sensitive = false
},
["LCFIRST"] = {
parser_function = formatting,
case_sensitive = false
},
["LOCALDAY"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALDAY2"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALDAYNAME"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALDOW"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALHOUR"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALMONTH"] = {
aliases = {"LOCALMONTH2"},
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALMONTH1"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALMONTHABBREV"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALMONTHNAME"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALMONTHNAMEGEN"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALTIME"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALTIMESTAMP"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALURL"] = {
parser_function = url_data,
case_sensitive = false
},
["LOCALURLE"] = {
parser_function = url_data,
case_sensitive = false
},
["LOCALWEEK"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["LOCALYEAR"] = {
parser_variable = date_and_time,
case_sensitive = true
},
["MSG"] = {
transclusion_modifier = transclusion_modifiers,
priority = 2,
case_sensitive = false
},
["MSGNW"] = {
transclusion_modifier = transclusion_modifiers,
priority = 2,
case_sensitive = false
},
["NAMESPACE"] = {
parser_function = namespaces,
parser_variable = namespaces,
case_sensitive = true
},
["NAMESPACEE"] = {
parser_function = namespaces,
parser_variable = namespaces,
case_sensitive = true
},
["NAMESPACENUMBER"] = {
parser_function = namespaces,
parser_variable = namespaces,
case_sensitive = true
},
["NOEXTERNALLANGLINKS"] = {
parser_function = noexternallanglinks,
parser_variable = noexternallanglinks,
case_sensitive = false
},
["NS"] = {
parser_function = namespaces_2,
case_sensitive = false
},
["NSE"] = {
parser_function = namespaces_2,
case_sensitive = false
},
["NUMBERINGROUP"] = {
aliases = {"NUMINGROUP"},
parser_function = statistics,
case_sensitive = true
},
["NUMBEROFACTIVEUSERS"] = {
parser_function = statistics,
parser_variable = statistics,
case_sensitive = true
},
["NUMBEROFADMINS"] = {
parser_function = statistics,
parser_variable = statistics,
case_sensitive = true
},
["NUMBEROFARTICLES"] = {
parser_function = statistics,
parser_variable = statistics,
case_sensitive = true
},
["NUMBEROFEDITS"] = {
parser_function = statistics,
parser_variable = statistics,
case_sensitive = true
},
["NUMBEROFFILES"] = {
parser_function = statistics,
parser_variable = statistics,
case_sensitive = true
},
["NUMBEROFPAGES"] = {
parser_function = statistics,
parser_variable = statistics,
case_sensitive = true
},
["NUMBEROFUSERS"] = {
parser_function = statistics,
parser_variable = statistics,
case_sensitive = true
},
["PADLEFT"] = {
parser_function = formatting,
case_sensitive = false
},
["PADRIGHT"] = {
parser_function = formatting,
case_sensitive = false
},
["PAGEID"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = false
},
["PAGELANGUAGE"] = {
parser_variable = technical_metadata,
case_sensitive = true
},
["PAGENAME"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["PAGENAMEE"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["PAGESINCATEGORY"] = {
aliases = {"PAGESINCAT"},
parser_function = statistics,
case_sensitive = true
},
["PAGESIZE"] = {
parser_function = technical_metadata_of_another_page,
case_sensitive = true
},
["PLURAL"] = {
parser_function = localization_functions,
case_sensitive = false
},
["PROTECTIONEXPIRY"] = {
parser_function = {
technical_metadata,
technical_metadata_of_another_page
},
case_sensitive = true
},
["PROTECTIONLEVEL"] = {
parser_function = {
technical_metadata,
technical_metadata_of_another_page
},
case_sensitive = true
},
["RAW"] = {
transclusion_modifier = transclusion_modifiers,
priority = 3,
case_sensitive = false
},
["REVISIONDAY"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["REVISIONDAY2"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["REVISIONID"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["REVISIONMONTH"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["REVISIONMONTH1"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["REVISIONSIZE"] = {
parser_variable = technical_metadata,
case_sensitive = true
},
["REVISIONTIMESTAMP"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["REVISIONUSER"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["REVISIONYEAR"] = {
parser_function = technical_metadata_of_another_page,
parser_variable = technical_metadata,
case_sensitive = true
},
["ROOTPAGENAME"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["ROOTPAGENAMEE"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["SAFESUBST"] = {
transclusion_modifier = substitution,
priority = 1,
case_sensitive = false
},
["SCRIPTPATH"] = {
parser_variable = technical_metadata,
case_sensitive = false
},
["SERVER"] = {
parser_variable = technical_metadata,
case_sensitive = false
},
["SERVERNAME"] = {
parser_variable = technical_metadata,
case_sensitive = false
},
["SITENAME"] = {
parser_variable = technical_metadata,
case_sensitive = true
},
["STYLEPATH"] = {
parser_variable = technical_metadata,
case_sensitive = false
},
["SUBJECTPAGENAME"] = {
aliases = {"ARTICLEPAGENAME"},
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["SUBJECTPAGENAMEE"] = {
aliases = {"ARTICLEPAGENAMEE"},
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["SUBJECTSPACE"] = {
aliases = {"ARTICLESPACE"},
parser_function = namespaces,
parser_variable = namespaces,
case_sensitive = true
},
["SUBJECTSPACEE"] = {
aliases = {"ARTICLESPACEE"},
parser_function = namespaces,
parser_variable = namespaces,
case_sensitive = true
},
["SUBPAGENAME"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["SUBPAGENAMEE"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["SUBST"] = {
transclusion_modifier = substitution,
priority = 1,
case_sensitive = false
},
["TALKPAGENAME"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["TALKPAGENAMEE"] = {
parser_function = page_names,
parser_variable = page_names,
case_sensitive = true
},
["TALKSPACE"] = {
parser_function = namespaces,
parser_variable = namespaces,
case_sensitive = true
},
["TALKSPACEE"] = {
parser_function = namespaces,
parser_variable = namespaces,
case_sensitive = true
},
["UC"] = {
parser_function = formatting,
case_sensitive = false
},
["UCFIRST"] = {
parser_function = formatting,
case_sensitive = false
},
["URLENCODE"] = {
parser_function = url_data,
case_sensitive = false
},
["USERLANGUAGE"] = {
parser_variable = localization_variables,
case_sensitive = true
},
} do
data[k] = v
if not v.name then
v.name = k
end
local aliases = v.aliases
if aliases then
for i = 1, #aliases do
data[aliases[i]] = v
end
v.aliases = nil
end
end
return data
jkwpl1ihlf560owi79olg91zvhvb1xy
Mòideal:maintenance category
828
16835
86374
2026-07-23T01:57:38Z
Altronic
4137
Copy from English Wiktionary
86374
Scribunto
text/plain
local export = {}
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
local utilities_module = "Module:utilities"
local new_title = mw.title.new
local uses_hidden_category -- Defined below.
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function is_sandbox(...)
is_sandbox = require(pages_module).is_sandbox
return is_sandbox(...)
end
local function is_testcase_page(...)
is_testcase_page = require(pages_module).is_testcase_page
return is_testcase_page(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local current_title
local function get_current_title()
current_title, get_current_title = mw.title.getCurrentTitle(), nil
return current_title
end
function export.uses_hidden_category(title)
local namespace = title.namespace
-- Thread: and Summary: pages are named "Thread:PAGE" or "Summary:PAGE",
-- where PAGE is the page they relate to. How we treat them therefore
-- depends on what that page is.
while namespace == 90 or namespace == 92 do
title = new_title(title.text)
namespace = title.namespace
end
-- User: and all talk namespaces, as well as all sandboxes and testcase pages (including their documentation pages).
return (
namespace == 2 or
title.isTalkPage or
is_sandbox(title, "include documentation") or
is_testcase_page(title, "include documentation")
) and true or false
end
uses_hidden_category = export.uses_hidden_category
function export.get_category(name, cat)
if uses_hidden_category(current_title or get_current_title()) then
name = name .. "/hidden"
end
return cat and format_categories(name, nil, "-", nil, true) or name
end
function export.template(frame)
local args = process_params(frame:getParent().args, {
[1] = {required = true, default = ""},
["cat"] = {type = "boolean", default = false}
})
return export.get_category(args[1], args.cat)
end
return export
0k9xe0i9582irnmc4uhevzdi2o9uso3
Mòideal:language-like
828
16836
86375
2026-07-23T01:58:52Z
Altronic
4137
Copy from English Wiktionary
86375
Scribunto
text/plain
local export = {}
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
-- In a locally installed Docker container containing Wiktionary, Wikibase is typically not installed because it's
-- a real pain to get working properly. In such a case, `mw.wikibase` returns nil. We now have checks in the code
-- below so it does reasonable things in the absence of Wikibase.
local wikibase = mw.wikibase
local category_name_has_suffix -- defined as export.categoryNameHasSuffix below
local get_entity = wikibase and wikibase.getEntity or nil
local get_entity_id_for_title = wikibase and wikibase.getEntityIdForTitle or nil
local gsub = string.gsub
local ipairs = ipairs
local match = string.match
local select = select
local sitelink = wikibase and wikibase.sitelink or nil
local type = type
local umatch = mw.ustring.match
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function case_insensitive_pattern(...)
case_insensitive_pattern = require(string_utilities_module).case_insensitive_pattern
return case_insensitive_pattern(...)
end
local function table_flatten(...)
table_flatten = require(table_module).flatten
return table_flatten(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local content_lang
local function get_content_lang()
content_lang, get_content_lang = mw.getContentLanguage(), nil
return content_lang
end
-- Implementation of getAliases() for languages, etymology languages,
-- families, scripts and writing systems.
function export.getAliases(self)
local aliases = self._aliases
if aliases == nil then
aliases = (self._data or self).aliases or {}
self._aliases = aliases
end
return aliases
end
-- Implementation of getVarieties() for languages, etymology languages,
-- families, scripts and writing systems. If `flatten` is passed in,
-- flatten down to a list of strings; otherwise, keep the structure.
function export.getVarieties(self, flatten)
local varieties = self._varieties
if varieties == nil then
varieties = (self._data or self).varieties or {}
self._varieties = varieties
end
if not flatten then
return varieties
end
local flattened_varieties = self._flattened_varieties
if flattened_varieties == nil then
flattened_varieties = table_flatten(varieties)
self._flattened_varieties = flattened_varieties
end
return flattened_varieties
end
-- Implementation of getOtherNames() for languages, etymology languages,
-- families, scripts and writing systems.
function export.getOtherNames(self)
local other_names = self._other_names
if other_names == nil then
other_names = (self._data or self).other_names or {}
self._other_names = other_names
end
return other_names
end
-- Implementation of getAllNames() for languages, etymology languages,
-- families, scripts and writing systems. If `notCanonical` is set,
-- the canonical name will be excluded.
function export.getAllNames(self)
local all_names = self._allNames
if all_names == nil then
all_names = table_flatten{
self:getCanonicalName(),
self:getAliases(),
self:getVarieties(),
self:getOtherNames(),
}
self._allNames = all_names
end
return all_names
end
function export.hasType(self, ...)
local n = select("#", ...)
if n == 0 then
error("Must specify at least one type.")
end
local types = self:getTypes()
if not types[...] then
return false
elseif n == 1 then
return true
end
local args = {...}
for i = 2, n do
if not types[args[i]] then
return false
end
end
return true
end
-- Implementation of template-callable getByCode() function for languages,
-- etymology languages, families and scripts. `item` is the language,
-- family or script in question; `args` is the arguments passed in by the
-- module invocation; `extra_processing`, if specified, is a function of
-- one argument (the requested property) and should return the value to
-- be returned to the caller, or nil if the property isn't recognized.
-- `extra_processing` is called after special-cased properties are handled
-- and before general-purpose processing code that works for all string
-- properties.
function export.templateGetByCode(args, extra_processing)
-- The item that the caller wanted to look up.
local item, itemname, list = args[1], args[2]
if itemname == "getAllNames" then
list = item:getAllNames()
elseif itemname == "getOtherNames" then
list = item:getOtherNames()
elseif itemname == "getAliases" then
list = item:getAliases()
elseif itemname == "getVarieties" then
list = item:getVarieties(true)
end
if list then
local index = args[3]; if index == "" then index = nil end
index = tonumber(index or error("Numeric index of the desired item in the list (parameter 3) has not been specified."))
return list[index] or ""
end
if itemname == "getFamily" and item.getFamily then
return item:getFamily():getCode()
end
if extra_processing then
local retval = extra_processing(itemname)
if retval then
return retval
end
end
if item[itemname] then
local ret = item[itemname](item)
if type(ret) == "string" then
return ret
end
error("The function \"" .. itemname .. "\" did not return a string value.")
end
error("Requested invalid item name \"" .. itemname .. "\".")
end
-- Implementation of getCommonsCategory() for languages, etymology languages,
-- families, scripts and writing systems.
function export.getWikidataItem(self)
local item = self._WikidataItem
if item == nil then
item = (self._data or self)[2]
-- If the value is nil, it's cached as false.
item = item ~= nil and (type(item) == "number" and "Q" .. item or item) or false
self._WikidataItem = item
end
return item or nil
end
do
local function get_wiki_article(self, project)
local article
-- If the project is enwiki, check the language data.
if project == "enwiki" then
article = (self._data or self).wikipedia_article
if article then
return article
end
end
-- Otherwise, check the Wikidata item for a sitelink.
local item = self:getWikidataItem()
article = item and sitelink and sitelink(item, project) or false
if article then
return article
end
-- If there's still no article, try the parent (if any).
local get_parent = self.getParent
if get_parent then
local parent = get_parent(self)
if parent then
return get_wiki_article(parent, project)
end
end
return false
end
-- Implementation of getWikipediaArticle() for languages, etymology languages,
-- families, scripts and writing systems.
function export.getWikipediaArticle(self, noCategoryFallback, project)
if project == nil then
project = "enwiki"
end
local article
if project == "enwiki" then
article = self._wikipedia_article
if article == nil then
article = get_wiki_article(self, project)
self._wikipedia_article = article
end
else
-- If the project isn't enwiki, default to no category fallback, but
-- this can be overridden by specifying the value `false`.
if noCategoryFallback == nil then
noCategoryFallback = true
end
local non_en_wikipedia_articles = self._non_en_wikipedia_articles
if non_en_wikipedia_articles == nil then
non_en_wikipedia_articles = {}
self._non_en_wikipedia_articles = non_en_wikipedia_articles
else
article = non_en_wikipedia_articles[project]
end
if article == nil then
article = get_wiki_article(self, project)
non_en_wikipedia_articles[project] = article
end
end
if article or noCategoryFallback then
return article or nil
end
return (gsub(self:getCategoryName(), "Creole language", "Creole"))
end
end
do
local function get_commons_cat_claim(item)
if item then
local entity = get_entity and get_entity(item) or nil
if entity then
-- P373 is the "Commons category" property.
local claim = entity:getBestStatements("P373")[1]
return claim and ("Category:" .. claim.mainsnak.datavalue.value) or nil
end
end
end
local function get_commons_cat_sitelink(item)
if item then
local commons_sitelink = sitelink and sitelink(item, "commonswiki") or nil
-- Reject any sitelinks that aren't categories.
return commons_sitelink and match(commons_sitelink, "^Category:") and commons_sitelink or nil
end
end
local function get_commons_cat(self)
-- Checks are in decreasing order of likelihood for a useful match.
-- Get the Commons Category claim from the object's item.
local lang_item = self:getWikidataItem()
local category = get_commons_cat_claim(lang_item)
if category then
return category
end
-- Otherwise, try the object's category's item.
local langcat_item = get_entity_id_for_title and get_entity_id_for_title("Category:" .. self:getCategoryName()) or nil
category = get_commons_cat_claim(langcat_item)
if category then
return category
end
-- If there's no P373 claim, there might be a sitelink on the
-- object's category's item.
category = get_commons_cat_sitelink(langcat_item)
if category then
return category
end
-- Otherwise, try for a sitelink on the object's own item.
category = get_commons_cat_sitelink(lang_item)
if category then
return category
end
-- If there's still no category, try the parent (if any).
local get_parent = self.getParent
if get_parent then
local parent = get_parent(self)
if parent then
return get_commons_cat(parent)
end
end
return false
end
-- Implementation of getCommonsCategory() for languages, etymology
-- languages, families, scripts and writing systems.
function export.getCommonsCategory(self)
local category
category = self._commons_category
-- Nil values cached as false.
if category ~= nil then
return category or nil
end
category = get_commons_cat(self)
self._commons_category = category
return category or nil
end
end
function export.categoryNameHasSuffix(name, suffixes)
for _, suffix in ipairs(suffixes) do
if umatch(name, "%f[%w]" .. case_insensitive_pattern(suffix, "^.") .. "$") then
return false
end
end
return true
end
category_name_has_suffix = export.categoryNameHasSuffix
function export.categoryNameToCode(name, suffix, data, suffixes)
local truncated = match(name, "(.*)" .. suffix .. "$")
if truncated and category_name_has_suffix(truncated, suffixes) then
local code = data[truncated] or data[(content_lang or get_content_lang()):lcfirst(truncated)]
if code ~= nil then
return code
end
end
if not category_name_has_suffix(name, suffixes) then
return data[name] or data[(content_lang or get_content_lang()):lcfirst(name)]
end
return nil
end
return export
a3jnrcv48h961dt8eg59fpggk4e1nkk
shoh
0
16837
86376
2026-07-23T02:02:09Z
Altronic
4137
add very basic page
86376
wikitext
text/x-wiki
{{=gv=}}
==Riochdair==
# [[seo]]
f6kxwxiciht9fqycx6lrljy03603fsj
Mòideal:palindromes
828
16838
86377
2026-07-23T02:58:16Z
Altronic
4137
Copy from English Wiktionary
86377
Scribunto
text/plain
local export = {}
local data = mw.loadData("Module:palindromes/data")
local function ignoreCharacters(term, lang, sc, langdata)
term = mw.ustring.lower(term)
term = mw.ustring.gsub(term, "[ ,%.%?!%%%-'\"]", "")
-- Language-specific substitutions
-- Ignore entire scripts (e.g. romaji in Japanese)
if langdata.ignore then
sc_name = sc and sc:getCode() or lang:findBestScript(term):getCode()
for _, script in ipairs(langdata.ignore) do
if script == sc_name then
return ""
end
end
end
for i, from in ipairs(langdata.from or {}) do
term = mw.ustring.gsub(term, from, langdata.to[i] or "")
end
return term
end
function export.is_palindrome(term, lang, sc)
local langdata = data[lang:getCode()] or data[lang:getFullCode()] or {}
-- Affixes aren't palindromes
if mw.ustring.find(term, "^%-") or mw.ustring.find(term, "%-$") then
return false
end
-- Remove punctuation and casing
term = ignoreCharacters(term, lang, sc, langdata)
local len = mw.ustring.len(term)
if langdata.allow_repeated_char then
-- Ignore single-character terms
if len < 2 then
return false
end
else
-- Ignore terms that consist of just one character repeated
-- This also excludes terms consisting of fewer than 3 characters
if term == mw.ustring.rep(mw.ustring.sub(term, 1, 1), len) then
return false
end
end
local charlist = {}
for c in mw.ustring.gmatch(term, ".") do
table.insert(charlist, c)
end
for i = 1, math.floor(len / 2) do
if charlist[i] ~= charlist[len - i + 1] then
return false
end
end
return true
end
return export
ms2gvz5ktlkntyfgy8vn9mt955uxqdg
Mòideal:palindromes/data
828
16839
86378
2026-07-23T02:58:44Z
Altronic
4137
Copy from English Wiktionary
86378
Scribunto
text/plain
local data = {
["ar"] = {
allow_repeated_char = true,
from = {
"[أإآ]",
"ؤ",
"[ئى]",
"ة",
"ء",
},
to = {
"ا",
"و",
"ي",
"ه",
},
},
["arc"] = {
allow_repeated_char = true,
from = {
"ם",
"ן",
"ך",
"ף",
"ץ",
"ﭏ",
"װ",
"ױ",
"ײ",
"[״׳־]",
},
to = {
"מ",
"נ",
"כ",
"פ",
"צ",
"אל",
"וו",
"וי",
"יי",
}
},
["axm"] = {
from = {"ու"},
to = {"ŭ"},
},
["ca"] = {
from = {"à", "[èé]", "[íï]", "[òó]", "[úü]", "ç", "l·l"},
to = {"a", "e", "i", "o", "u", "c", "ll"},
},
["cmn"] = {ignore = {"Latn"}},
["cs"] = {
from = {"á", "é", "í", "ó", "[úů]", "ý", "ch"},
to = {"a", "e", "i", "o", "u", "y", "χ"},
},
["de"] = {
from = {"ä", "ö", "ü", "[ßẞ]"},
to = {"a", "o", "u", "ss"},
},
["el"] = {
from = {
"[ᾳάᾴὰᾲᾶᾷἀᾀἄᾄἂᾂἆᾆἁᾁἅᾅἃᾃἇᾇᾱᾰἈᾈἌᾌἊᾊἎᾎἉᾉἍᾍἋᾋἏᾏᾹᾸ]", --uppercase characters are included due to this bug: https://bugs.php.net/bug.php?id=69267
"[έὲἐἔἒἑἕἓἘἜἚἙἝἛ]",
"[ῃήῄὴῂῆῇἠᾐἤᾔἢᾒἦᾖἡᾑἥᾕἣᾓἧᾗἨᾘἬᾜἪᾚἮᾞἩᾙἭᾝἫᾛἯᾟ]",
"[ίὶῖἰἴἲἶἱἵἳἷϊΐῒῗῑῐἸἼἺἾἹἽἻἿῙῘ]",
"[όὸὀὄὂὁὅὃὈὌὊὉὍὋ]",
"[ύὺῦὐὔὒὖὑὕὓὗϋΰῢῧῡῠὙὝὛὟῩῨ]",
"[ῳώῴὼῲῶῷὠᾠὤᾤὢᾢὦᾦὡᾡὥᾥὣᾣὧᾧὨᾨὬᾬὪᾪὮᾮὩᾩὭᾭὫᾫὯᾯ]",
"[ῥῤῬ]",
"[ς]",
"[́͂]"
},
to = {
"α",
"ε",
"η",
"ι",
"ο",
"υ",
"ω",
"ρ",
"σ"
},
},
["en"] = {
from = {"[äàáâåā]", "[ëèéêē]", "[ïìíîī]", "[öòóôō]", "[üùúûū]", "æ" , "œ" , "[çč]", "ñ", "'"},
to = {"a", "e", "i", "o", "u", "ae", "oe", "c", "n"},
},
["fr"] = {
from = {"[áàâä]", "[éèêë]", "[íìîï]", "[óòôö]", "[úùûü]", "[ýỳŷÿ]", "ç", "æ", "œ", "'"},
to = {"a", "e", "i", "o", "u", "y", "c", "ae", "oe"},
},
["fy"] = {
from = {"[áàâä]", "[éèêë]", "[íìîï]", "[óòôö]", "[úùûü]", "[ýỳŷÿ]", "æ", "'"},
to = {"a", "e", "i", "o", "u", "y", "ae"},
},
["grc"] = {
from = {
"[ᾳάᾴὰᾲᾶᾷἀᾀἄᾄἂᾂἆᾆἁᾁἅᾅἃᾃἇᾇᾱᾰἈᾈἌᾌἊᾊἎᾎἉᾉἍᾍἋᾋἏᾏᾹᾸ]", --uppercase characters are included due to this bug: https://bugs.php.net/bug.php?id=69267
"[έὲἐἔἒἑἕἓἘἜἚἙἝἛ]",
"[ῃήῄὴῂῆῇἠᾐἤᾔἢᾒἦᾖἡᾑἥᾕἣᾓἧᾗἨᾘἬᾜἪᾚἮᾞἩᾙἭᾝἫᾛἯᾟ]",
"[ίὶῖἰἴἲἶἱἵἳἷϊΐῒῗῑῐἸἼἺἾἹἽἻἿῙῘ]",
"[όὸὀὄὂὁὅὃὈὌὊὉὍὋ]",
"[ύὺῦὐὔὒὖὑὕὓὗϋΰῢῧῡῠὙὝὛὟῩῨ]",
"[ῳώῴὼῲῶῷὠᾠὤᾤὢᾢὦᾦὡᾡὥᾥὣᾣὧᾧὨᾨὬᾬὪᾪὮᾮὩᾩὭᾭὫᾫὯᾯ]",
"[ῥῤῬ]",
"[ς]",
"[́͂]"
},
to = {
"α",
"ε",
"η",
"ι",
"ο",
"υ",
"ω",
"ρ",
"σ"
}
},
["he"] = {
allow_repeated_char = true,
from = {
"ם",
"ן",
"ך",
"ף",
"ץ",
"ﭏ",
"װ",
"ױ",
"ײ",
"[״׳־]",
},
to = {
"מ",
"נ",
"כ",
"פ",
"צ",
"אל",
"וו",
"וי",
"יי",
}
},
["hu"] = {
from = {"í", "ó", "ú", "ő", "ű", "ccs", "cs", "ggy", "gy", "lly", "ly", "nny", "ny", "ssz", "sz", "tty", "ty", "zzs", "zs", "ddzs", "dzs"},
to = {"i", "o", "u", "ö", "ü", "čč", "č", "ǰǰ", "ǰ", "ľľ", "ľ", "ňň", "ň", "šš", "š", "ťť", "ť", "žž", "ž", "ddž", "dž"},
},
["hy"] = {
from = {"ու", "եւ"},
to = {"ŭ", "և"},
},
["ja"] = {
allow_repeated_char = true,
from = {'が', 'ぎ', 'ぐ', 'げ', 'ご', 'ざ', 'じ', 'ず', 'ぜ', 'ぞ', 'だ', 'ぢ', 'づ', 'で', 'ど', 'ば', 'び', 'ぶ', 'べ', 'ぼ', 'ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ', 'ゔ'},
to = {'か', 'き', 'く', 'け', 'こ', 'さ', 'し', 'す', 'せ', 'そ', 'た', 'ち', 'つ', 'て', 'と', 'は', 'ひ', 'ふ', 'へ', 'ほ', 'は', 'ひ', 'ふ', 'へ', 'ほ', 'う'},
ignore = {"Latn"},
},
["la"] = {
from = {"v", "j"},
to = {"u", "i"}
},
["nl"] = {
from = {"[áàä]", "[éèë]", "[íìï]", "[óòö]", "[úùü]"},
to = {"a", "e", "i", "o", "u"},
},
["pl"] = {
from = {"ć", "ę", "ł", "ń", "ó", "ś", "[źż]"},
to = {"c", "e", "l", "n", "o", "s", "z"},
},
["ru"] = {
from = {"ё"},
to = {"е"},
},
["xcl"] = {
from = {"ու"},
to = {"ŭ"},
},
["yi"] = {
allow_repeated_char = true,
from = {
"ם",
"ן",
"ך",
"ף",
"ץ",
"ﭏ",
"װ",
"ױ",
"ײ",
"[״׳־]",
"[ִַָּֿׁׂ]",
},
to = {
"מ",
"נ",
"כ",
"פ",
"צ",
"אל",
"וו",
"וי",
"יי",
}
},
["zh"] = {
ignore = {"Latn"},
},
}
return data
lnfzz4yt7hlswzgb8pzp3idlrgkcnyk
seo
0
16840
86380
2026-07-23T03:44:49Z
Altronic
4137
Chaidh duilleag le "==Gaeilge== ===Riochdair=== {{head|ga|riochdair}} # [[seo]] #: {{ux|ga|Seo mo theach.|Seo mo thaigh.|inline=1}} ===Nòtaichean ùsaide=== Thathar a' cleachdadh mar [[cinntiche]] leis ''{{l|ga|an}}'': :: {{ux|ga|An bhfuil tú ag iarraidh an leabhar seo a fháil ar iasacht?|A bheil thu ag iarraidh an leabhar seo a ghabhail air iasad?}} Chan urrainn dhen bhriathar seo sèimheachadh." a chruthachadh
86380
wikitext
text/x-wiki
==Gaeilge==
===Riochdair===
{{head|ga|riochdair}}
# [[seo]]
#: {{ux|ga|Seo mo theach.|Seo mo thaigh.|inline=1}}
===Nòtaichean ùsaide===
Thathar a' cleachdadh mar [[cinntiche]] leis ''{{l|ga|an}}'':
:: {{ux|ga|An bhfuil tú ag iarraidh an leabhar seo a fháil ar iasacht?|A bheil thu ag iarraidh an leabhar seo a ghabhail air iasad?}}
Chan urrainn dhen bhriathar seo sèimheachadh.
05kxtb0ptpz2hwbijvcq3ctgl7uzlv6
Teamplaid:link
10
16841
86381
2026-07-23T03:46:29Z
Altronic
4137
Copy from English Wiktionary
86381
wikitext
text/x-wiki
<includeonly><onlyinclude>{{safesubst:<noinclude/>#invoke:links/templates|l_term_t}}</onlyinclude></includeonly><!--
-->{{l|gd|term}}{{documentation}}
nt5ywgyo2jj9ira3tww3mjutb73bc3g
Teamplaid:l
10
16842
86383
2026-07-23T03:55:21Z
Altronic
4137
Chaidh an duilleag ath-stiùireadh gu [[Teamplaid:link]]
86383
wikitext
text/x-wiki
#REDIRECT [[Template:link]]
i18g4v2u4rxi3a5x5fltb2h6228rmi4
Teamplaid:ja-noun
10
16843
86385
2026-07-23T04:12:33Z
Altronic
4137
Copy from English Wiktionary
86385
wikitext
text/x-wiki
<includeonly>{{#invoke:Jpan-headword|show|ja|nouns}}</includeonly><noinclude>{{documentation}}</noinclude>
cvjbvr63ccu6srrk3xzpphtrebm91o2
Mòideal:Jpan-headword
828
16844
86386
2026-07-23T04:22:03Z
Altronic
4137
Copy from English Wiktionary
86386
Scribunto
text/plain
local m_ja = require("Module:ja")
local m_ja_ruby = require("Module:ja-ruby")
local m_str_utils = require("Module:string utilities")
local byteoffset = mw.ustring.byteoffset
local concat = table.concat
local gsplit = m_str_utils.gsplit
local insert = table.insert
local kana_to_romaji = require("Module:Hrkt-translit").tr
local max_index = require("Module:table").maxIndex
local moraify = m_ja.moraify
local remove = table.remove
local ugmatch = mw.ustring.gmatch
local ugsub = m_str_utils.gsub
local ulen = m_str_utils.len
local ulower = m_str_utils.lower
local umatch = mw.ustring.match
local usub = m_str_utils.sub
local export = {}
local pos_functions = {}
local range = mw.loadData('Module:ja/data/range')
local Jpan = require("Module:scripts").getByCode("Jpan")
local function remove_links(text)
return (text:gsub("%[%[[^|%]]-|", "")
:gsub("%[%[", "")
:gsub("%]%]", ""))
end
local function assign_kana_to_kanji(head, kana, pagename, template_name)
-- TODO: uses deprecated module
local m_tu = require'Module:template utilities'
local kanji_pos = {[0] = {nil, 0}}
local head_nolink = {}
local link_border = 0
local function insert_kanji_pos(substr)
insert(head_nolink, substr)
for p1, w1 in ugmatch(substr, '()([々' .. range.kanji .. '])') do
p1 = byteoffset(substr, p1) + link_border
insert(kanji_pos, {p1, p1 + w1:len() - 1})
end
end
for p1, p2, w1 in m_tu.gfind_bracket(head, {['%[%['] = ']]'}) do
insert_kanji_pos(head:sub(link_border + 1, p1 - 1))
local p_pipe = w1:find'|' or 2
link_border = p1 + p_pipe - 1
insert_kanji_pos(w1:sub(p_pipe + 1, -3))
link_border = p2
end
insert_kanji_pos(head:sub(link_border + 1))
head_nolink = concat(head_nolink)
local pagetext = mw.title.new(pagename):getContent()
if not pagetext then return head, kana end
local non_kanji = {}
local last_kanji = 1
for p1 in ugmatch(head_nolink, '[々' .. range.kanji .. ']()') do
insert(non_kanji, usub(head_nolink, last_kanji, p1 - 2))
last_kanji = p1
end
insert(non_kanji, usub(head_nolink, last_kanji))
for kanjitab in pagetext:gmatch('(){{%s*' .. template_name) do
kanjitab = select(3, m_tu.find_bracket(pagetext, m_tu.brackets_temp, kanjitab))
if not kanjitab then error('ill-formed [[t:' .. template_name:gsub('%%', '') .. ']] syntax') end
kanjitab = m_tu.parse_temp(kanjitab)
local readings = {}
local readings_len = {}
for i = 1, max_index(kanjitab.args) do
local r_i = kanjitab.args[i] or ''
local r_o = kanjitab.args['o' .. i] or ''
if kanjitab.args['k' .. i] then
readings[i] = kanjitab.args['k' .. i] .. r_o
readings_len[i] = tonumber(r_i:match'^%s*%D*(%d*)%s*$') or 1
else
local r_kana, r_len = r_i:match'^%s*(%D*)(%d*)%s*$'
readings[i] = r_kana .. r_o
readings_len[i] = tonumber(r_len) or 1
end
end
local kana_decom = {}
local reading_id = 1
local reading_len = 1
for i = 1, #non_kanji - 1 do
if reading_len <= 1 then
reading_len = readings_len[reading_id] or 1
insert(kana_decom, non_kanji[i])
insert(kana_decom, readings[reading_id])
reading_id = reading_id + 1
else
reading_len = reading_len - 1
end
end
insert(kana_decom, non_kanji[#non_kanji])
local function strip_nonkana(str, repl)
return ugsub(str, '[^' .. range.kana .. ']+', repl) or nil
end
local xeno_reading = {strip_nonkana(kana, ''):match('^' .. strip_nonkana(concat(kana_decom), '(.-)') .. '$')}
if #xeno_reading > 0 then
local head_decom = {}
reading_id = 1
reading_len = 1
for i = 1, #non_kanji - 1 do
if reading_len <= 1 then
reading_len = readings_len[reading_id] or 1
insert(head_decom, head:sub(kanji_pos[i - 1][2] + 1, kanji_pos[i][1] - 1))
insert(head_decom, head:sub(kanji_pos[i][1], kanji_pos[i + reading_len - 1][2]))
reading_id = reading_id + 1
else
reading_len = reading_len - 1
end
end
insert(head_decom, head:sub(kanji_pos[#non_kanji - 1][2] + 1))
if #head_decom ~= #kana_decom then error('number of parameters in [[t:' .. template_name:gsub('%%', '') .. ']] is incorrect') end
local n_xeno_reading = 0
for i = 1, #kana_decom, 2 do
kana_decom[i] = ugsub(kana_decom[i], '[^' .. range.kana .. ']+', function()
n_xeno_reading = n_xeno_reading + 1
if xeno_reading[n_xeno_reading] == '' then return nil
else return xeno_reading[n_xeno_reading] end
end)
end
return concat(head_decom, '%'), concat(kana_decom, '%')
end
end
return head, kana
end
local en_grades = {
"first grade", "second grade", "third grade",
"fourth grade", "fifth grade", "sixth grade",
"secondary school", "jinmeiyō", "hyōgai",
}
local aliases = {
['transitive']='tr', ['trans']='tr',
['intransitive']='in', ['intrans']='in', ['intr']='in',
['godan']='1', ['ichidan']='2', ['irregular']='irr'
}
local adverbs_optional_tag = 'optionally '
local adverbs_optional_aliases = {
['to']='と', ['と']='と', ['ト']='と',
['ni']='に', ['に']='に', ['ニ']='に',
}
local adverbs_optional_links = {
['と']='[[と#Japanese:_adverbs|と]]',
['に']='[[に]]',
}
local function formatting_adjustments(rom, kana, pos_category)
-- hyphens for prefixes, suffixes, and counters (classifiers)
if pos_category == "prefixes" then
rom = rom:gsub('%-?$', '-')
elseif pos_category == "suffixes" or pos_category == "suffix forms" or pos_category == "counters" or pos_category == "classifiers" then
rom = rom:gsub('^%-?', '-')
elseif pos_category == "proper nouns" and not kana:match'%^' then -- automatic caps for proper nouns, if not already specified
rom = ugsub(ugsub(rom, '%f[^%s%c%p]%l', string.uupper), "%w'%u", ulower) -- no caps after medial apostrophes
end
return rom
end
local function kana_to_romaji_with_pos_format(kana, data, args)
if data.headword.pos_category == "combining forms" or data.headword.pos_category == "punctuation marks" or data.headword.pos_category == "iteration marks" then
return "-"
end
local rom = remove_links(kana_to_romaji(kana, data.lang_code))
-- make adjustments for -u verbs and -i adjectives
if args['infl'] == '1' or args['infl'] == '1s' or args['infl'] == 'godan' then
rom = rom:gsub('ō$', 'ou'):gsub('ū$', 'uu')
elseif args['infl'] == 'i' or args['infl'] == 'is' or args['infl'] == 'い' then
rom = rom:gsub('ī$', 'ii')
end
return formatting_adjustments(rom, kana, data.headword.pos_category)
end
local function iterate_rare_chars(text)
local ch, i
return function()
repeat
ch, i = umatch(text, "([" .. range.kana .. range.kana_graph .. "!-/:-@%[\\-`×△○◎。-〠〶〷〻-〽・·゠=~][゙゚]*)()", i)
until not (ch and umatch(ch, "^[ぁ-ちっつて-ろんァ-チッツテ-ロンヲ-゚]$"))
return ch
end
end
local function historical_kana(data, hist_kana, modern_kana)
-- Disallow historical kana for kana and morae, as there's no one-to-one correspondence.
local pos = data.headword.pos_category
if pos == "syllables" or pos == "kana" or pos == "morae" then
error(("Cannot specify historical kana for %s."):format(pos))
end
local hist_kana_no_formatting = hist_kana:gsub("[%^%-%. %%]+", "")
local rare_chars, lang_name, hc = {}, data.lang_name, data.headword.categories
for ch in iterate_rare_chars(hist_kana_no_formatting) do
if not (modern_kana and modern_kana:find(ch)) then
rare_chars[ch] = true
end
end
for _, mora in ipairs(moraify((ugsub(hist_kana_no_formatting, "[^" .. range.kana .. "]+", " ")))) do
if not (mora:gsub(" +", ""):match("^.?[\128-\191]*$") or (modern_kana and modern_kana:find(mora))) then
rare_chars[mora] = true
end
end
for ch in pairs(rare_chars) do
insert(hc, lang_name .. " terms historically spelled with " .. ch)
end
insert(data.info_hist, require("Module:ja-link").link({
lang = data.headword.lang,
lemma = hist_kana,
tr = formatting_adjustments(
remove_links(kana_to_romaji(hist_kana, data.lang_code, nil, {hist = true})),
hist_kana,
pos
),
}, {
face = "head",
disableSelfLink = true,
}))
end
local function detect_pagename_kana(data, digraphs)
local pagename = data.pagename
-- Exclude "&" and "@", which are part of %p (e.g. リズム&ブルース).
local function remove_kana(m)
return m:match("[&@]") or ""
end
if ugsub(pagename, '[%p%s%c' .. range.hiragana .. (digraphs and "ゟ" or "") .. ']', remove_kana) == "" then
return 'hira'
elseif ugsub(pagename, '[%p%s%c' .. range.katakana .. (digraphs and "ヿ" or "") .. ']', remove_kana) == "" then
return 'kata'
elseif ugsub(pagename, '[%p%s%c' .. range.kana .. (digraphs and "ゟヿ" or "") .. ']', remove_kana) == "" then
return 'both'
end
end
-- go through args and build inflections by finding whatever kanas were given to us
local function format_headword(args, data)
local pagename, kanas, lang_name = data.pagename, data.kanas, data.lang_name
data.pagename_kana = detect_pagename_kana(data)
if args[1][1] and not args[1][1]:match'[\128-\255]' then
-- filter out POS designations
remove(args[1], 1)
end
local linked_translit = data.headword.lang:link_tr(Jpan)
local suru_ending, rom_suru_ending
if data.headword.pos_category == "suru verbs" then
suru_ending = "[[する]]"
rom_suru_ending = linked_translit and " [[suru]]" or " suru"
else
suru_ending, rom_suru_ending = "", ""
end
if data.pagename_kana then -- pure-kana-title entry
if #args.head > 0 or args.head.default then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
-- {{ja-xxx}} vs {{ja-xxx|こ.うし}} vs {{ja-xxx|コウシ}} in [[こうし]]
if not args[1][1] then
args[1][1] = pagename
elseif remove_links(args[1][1]:gsub("[%^%-%. %%]+", "")) ~= pagename then
insert(args[1], 1, pagename)
end
for i, k in ipairs(args[1]) do
insert(data.headword.heads, {
term = k:gsub("[%^%-%. %%]+", "") .. suru_ending,
tr = '-',
l = args.label[i] and {args.label[i]} or nil,
})
end
for i = 1, math.max(args.rom.maxindex, 1) do
local rom = args.rom[i] or args.rom.default or kana_to_romaji_with_pos_format(args[1][1], data, args)
if not data.headword.heads[i] then
data.headword.heads[i] = {term = data.headword.heads[i-1].term}
end
if rom == "-" then
data.headword.heads[i].tr = "-"
elseif linked_translit then
data.headword.heads[i].tr = "[[" .. rom .. "]]" .. rom_suru_ending
else
data.headword.heads[i].tr = rom .. rom_suru_ending
end
if not data.inflection_base.form then
data.inflection_base.form = remove_links(args[i][1]:gsub("[%^%-%. %%]+", "")) .. suru_ending
data.inflection_base.romaji = rom .. rom_suru_ending
end
end
kanas[1] = pagename
if args.hist[1] then
historical_kana(data, args.hist[1], args[1][1])
end
else -- non-pure-kana-title entry
if #args[1] == 0 and not (data.headword.pos_category == "punctuation marks" or data.headword.pos_category == "iteration marks" or data.headword.pos_category == "symbols") then
error("Kana form is required.")
end
if args.head.default == pagename then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
local rom_repetition_final = {}
for i, k in ipairs(args[1]) do
local rom_auto = kana_to_romaji_with_pos_format(k, data, args)
local head = args.head[i] or args.head.default or pagename
if args.head[i] == pagename then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
local head_for_ruby, kana_for_ruby
if ulen(head) > 1 and head:match'%%' == nil and k:match'%%' == nil then
head_for_ruby, kana_for_ruby = assign_kana_to_kanji(head, k, pagename, data.lang_code .. '%-kanjitab')
else
head_for_ruby, kana_for_ruby = head, k
end
local format_table = m_ja_ruby.parse_text(head_for_ruby, kana_for_ruby, {
try = 'force',
try_force_limit = 10000,
})
local kana_bare = remove_links(k:gsub("[%^%-%. %%]+", ""))
local rom = args.rom[i] or args.rom.default or rom_auto
head = {
term = m_ja_ruby.to_wiki(format_table, {
break_link = true,
}):gsub('<rt>(..-)</rt>', "<rt>[[" .. kana_bare .."|%1]]</rt>") .. suru_ending,
l = args.label[i] and {args.label[i]} or nil,
}
if rom == "-" or rom_repetition_final[rom] then
head.tr = "-"
elseif linked_translit then
head.tr = "[[" .. rom .. "]]" .. rom_suru_ending
else
head.tr = rom .. rom_suru_ending
end
insert(data.headword.heads, head)
rom_repetition_final[rom] = true
insert(kanas, kana_bare)
if args.hist[i] then
historical_kana(data, args.hist[i], k)
end
if not data.inflection_base.form then
data.inflection_base.form = remove_links(m_ja_ruby.to_markup(format_table)) .. suru_ending
data.inflection_base.romaji = rom .. rom_suru_ending
end
end
local first_reading, multiple = kanas[1]
if not first_reading then
return
end
first_reading = ulower(kana_to_romaji(first_reading, data.lang_code)):gsub("%%", "")
for i = 2, #kanas do
if ulower(kana_to_romaji(kanas[i], data.lang_code)):gsub("%%", "") ~= first_reading then
multiple = true
break
end
end
if not multiple then
local lang_code = data.lang_code
local content = mw.title.getCurrentTitle():getContent()
local loc1, loc2 = content:find("%f[^%z%s]==%s*" .. lang_name:gsub("%-", "%%%-") .. "%s*==()")
loc2 = content:find("%f[^%z%s]==[^\n=]+==", loc2)
if loc1 then
content = content:sub(loc1, loc2)
for template in require("Module:template parser").find_templates(content) do
local name, reading = template:get_name()
if (
name == lang_code .. "-head" or
name == lang_code .. "-pos"
) then
reading = template:get_arguments()[2]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
elseif (
name == lang_code .. "-noun" or
name == lang_code .. "-verb" or
name == lang_code .. "-adj" or
name == lang_code .. "-phrase" or
name == lang_code .. "-verb form" or
name == lang_code .. "-verb-suru"
) then
reading = template:get_arguments()[1]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
elseif name == lang_code .. "-see" then
reading = template:get_arguments()[1]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
-- if umatch(reading, "[^" .. range.kana .. "]") then
-- TODO: check linked page
-- end
end
if reading and ulower(kana_to_romaji(reading, lang_code)):gsub("%%", "") ~= first_reading then
multiple = true
end
end
end
end
if multiple then
insert(data.headword.categories, lang_name .. " terms with multiple readings")
end
end
end
local function add_transitivity(data, tr)
local categories, lang_name = data.headword.categories, data.lang_name
tr = aliases[tr] or tr
if tr == "tr" then
insert(data.info_mid, 'transitive')
insert(categories, lang_name .. " transitive verbs")
elseif tr == "in" then
insert(data.info_mid, 'intransitive')
insert(categories, lang_name .. " intransitive verbs")
elseif tr == "both" then
insert(data.info_mid, 'transitive or intransitive')
insert(categories, lang_name .. " transitive verbs")
insert(categories, lang_name .. " intransitive verbs")
else
insert(categories, lang_name .. " verbs without transitivity")
end
end
local function get_final(lemma, data)
return kana_to_romaji(remove(moraify(m_ja_ruby.to_ruby(m_ja_ruby.parse_markup(lemma)))), data.lang_code)
end
local function add_language_fragment(t, lang_name)
for k, v in ipairs(t) do
t[k] = v:gsub("%[%[([^]#]*)%]%]", function (s)
return "[[" .. s .. "#" .. lang_name .. "|" .. s .. "]]"
end)
end
end
local function add_inflections(data, inflection_type, cat_suffix)
local lang_name = data.lang_name
local lemma = data.inflection_base.form
local romaji = data.inflection_base.romaji
inflection_type = aliases[inflection_type] or inflection_type
local function replace_suffix(lemma_from, lemma_to, romaji_from, romaji_to)
-- e.g. 持って来る, lemma = "[持](も)って来(く)る"
-- lemma_from = "くる", lemma_to = {"き","きた"}
add_language_fragment(lemma_to, lang_name)
add_language_fragment(romaji_to, lang_name)
local result = {}
local pattern_from, n_from = lemma_from:gsub('.[\128-\191]*', function(c)
return '[' .. c .. m_ja.hira_to_kata(c) .. ']([^' .. range.kana .. ']*)'
end)
pattern_from = pattern_from .. '$'
-- "[くク]([^kana range]*)[るル]([^kana range]*)$"
for i_lemma_to, s_lemma_to in ipairs(lemma_to) do
local n_to = 0
local pattern_to = s_lemma_to:gsub('.[\128-\191]*', function(c)
if n_to < n_from then
n_to = n_to + 1
return c .. "%" .. n_to
else
return c
end
end)
for i = n_to + 1, n_from do
pattern_to = pattern_to .. "%" .. i
end
-- "き%1%2", "き%1た%2"
local lemma_inflected, success = ugsub(lemma, pattern_from, pattern_to)
if success == 0 then
return
end
local romaji_inflected
romaji_inflected, success = romaji:gsub(romaji_from .. "$", romaji_to[i_lemma_to])
if success == 0 then
romaji_inflected, success = romaji:gsub("%[%[" .. romaji_from .. "%]%]$", "[[" .. romaji_to[i_lemma_to] .. "]]")
if success == 0 then
return
end
end
insert(result, {lemma = lemma_inflected, romaji = romaji_inflected})
end
return result -- {{lemma="[持](も)って来(き)",romaji="motteki"},{lemma="[持](も)って来(き)た",romaji="mottekita"}}
end
local function insert_form(label, ...)
-- label = "stem" or "past" etc.
-- ... = {lemma=...,romaji=...},{lemma=...,romaji=...}
local labeled_forms = {label = label}
for _, v in ipairs{...} do
local table_form = m_ja_ruby.parse_markup(v.lemma)
local form_term = m_ja_ruby.to_wiki(table_form)
if not form_term:find'%[%[.+%]%]' then
form_term = '[[' .. m_ja_ruby.to_text(table_form) .. '#' .. lang_name .. '|' .. form_term .. ']]'
end
insert(labeled_forms, {
term = form_term,
tr = v.romaji,
})
end
insert(data.headword.inflections, labeled_forms)
end
local inflected_forms
if data.lang_code == 'ja' then
if inflection_type == '1' or inflection_type == '1s' then
insert(data.info_mid, '<abbr title="godan (group 1) conjugation">godan</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " godan " .. cat_suffix)
local romaji = data.inflection_base.romaji
if cat_suffix == "verbs" then
local final = get_final(lemma, data)
insert(data.headword.categories, lang_name .. " godan " .. cat_suffix .. " ending with -" .. final)
if final == "ru" then
if umatch(romaji, "[iIīĪ]ru$") then
insert(data.headword.categories, lang_name .. " godan " .. cat_suffix .. " ending with -iru")
elseif umatch(romaji, "[eEēĒ]ru$") then
insert(data.headword.categories, lang_name .. " godan " .. cat_suffix .. " ending with -eru")
end
end
end
end
if inflection_type == '1' then
inflected_forms =
replace_suffix('く', {'き', 'いた'}, 'ku', {'ki', 'ita'}) or
replace_suffix('ぐ', {'ぎ', 'いだ'}, 'gu', {'gi', 'ida'}) or
replace_suffix('す', {'し', 'した'}, 'su', {'shi', 'shita'}) or
replace_suffix('つ', {'ち', 'った'}, 'tsu', {'chi', 'tta'}) or
replace_suffix('ぬ', {'に', 'んだ'}, 'nu', {'ni', 'nda'}) or
replace_suffix('ぶ', {'び', 'んだ'}, 'bu', {'bi', 'nda'}) or
replace_suffix('む', {'み', 'んだ'}, 'mu', {'mi', 'nda'}) or
replace_suffix('る', {'り', 'った'}, 'ru', {'ri', 'tta'}) or
replace_suffix('う', {'い', 'った'}, 'u', {'i', 'tta'})
if inflected_forms then
insert_form('stem', inflected_forms[1])
insert_form('past', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
else
inflected_forms =
replace_suffix('る', {'り', 'った', 'い'}, 'ru', {'ri', 'tta', 'i'}) or --くださる
replace_suffix('いく', {'いき', 'いった'}, 'iku', {'iki', 'itta'}) or --行く
replace_suffix('う', {'い', 'うた'}, 'ou', {'oi', 'ōta'}) --問う
if inflected_forms then
insert_form('stem', inflected_forms[1], inflected_forms[3])
insert_form('past', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
end
elseif inflection_type == '2' then
insert(data.info_mid, '<abbr title="ichidan (group 2) conjugation">ichidan</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " ichidan " .. cat_suffix)
local romaji = data.inflection_base.romaji
if umatch(romaji, "[iIīĪ]ru$") then
insert(data.headword.categories, lang_name .. " kami ichidan " .. cat_suffix)
elseif umatch(romaji, "[eEēĒ]ru$") then
insert(data.headword.categories, lang_name .. " shimo ichidan " .. cat_suffix)
else
insert(data.headword.categories, lang_name .. " irregular " .. cat_suffix)
end
end
inflected_forms = replace_suffix('る', {'', 'た'}, 'ru', {'', 'ta'})
if inflected_forms then
insert_form('stem', inflected_forms[1])
insert_form('past', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'suru' then
insert(data.info_mid, '<abbr title="suru (group 3) conjugation">suru</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " suru " .. cat_suffix)
end
inflected_forms =
replace_suffix('する', {'し', 'した'}, 'suru', {'shi', 'shita'}) or
replace_suffix('ずる', {'じ', 'じた'}, 'zuru', {'ji', 'jita'})
if inflected_forms then
insert_form('stem', inflected_forms[1])
insert_form('past', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'kuru' then
insert(data.info_mid, '<abbr title="kuru (group 3) conjugation">kuru</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " kuru " .. cat_suffix)
end
inflected_forms = replace_suffix('くる', {'き', 'きた'}, 'kuru', {'ki', 'kita'})
if inflected_forms then
insert_form('stem', inflected_forms[1])
insert_form('past', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'i' or inflection_type == 'い' then
insert(data.info_mid, '<abbr title="-i (type I) inflection">-i</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " い-i " .. cat_suffix)
end
inflected_forms = replace_suffix('い', {'く'}, 'i', {'ku'})
if inflected_forms then
insert_form('adverbial', inflected_forms[1])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'is' then
insert(data.info_mid, '<abbr title="-i (type I) inflection">-i</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " い-i " .. cat_suffix)
end
inflected_forms = replace_suffix('いい', {'よく'}, 'ii', {'yoku'})
if inflected_forms then
insert_form('adverbial', inflected_forms[1])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'na' or inflection_type == 'な' then
insert(data.info_mid, '<abbr title="-na (type II) inflection">-na</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " な-na " .. cat_suffix)
end
inflected_forms = replace_suffix('', {'[[な]]', '[[に]]'}, '', {' [[na]]', ' [[ni]]'})
insert_form('adnominal', inflected_forms[1])
insert_form('adverbial', inflected_forms[2])
elseif inflection_type == "yo" then
insert(data.info_mid, '<abbr title="yodan conjugation (classical)"><sup><small>†</small></sup>yodan</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " yodan " .. cat_suffix)
insert(data.headword.categories, lang_name .. " yodan " .. cat_suffix .. " ending with -" .. get_final(lemma, data))
end
elseif inflection_type == "kami ni" then
insert(data.info_mid, '<abbr title="kami nidan conjugation (classical)"><sup><small>†</small></sup>nidan</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " nidan " .. cat_suffix)
insert(data.headword.categories, lang_name .. " kami nidan " .. cat_suffix)
end
elseif inflection_type == "shimo ni" then
insert(data.info_mid, '<abbr title="shimo nidan conjugation (classical)"><sup><small>†</small></sup>nidan</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " nidan " .. cat_suffix)
insert(data.headword.categories, lang_name .. " shimo nidan " .. cat_suffix)
end
elseif inflection_type == "rahen" then
insert(data.info_mid, '<abbr title="r-special conjugation (classical)"><sup><small>†</small></sup>-ri</abbr>')
elseif inflection_type == "sahen" then
insert(data.info_mid, '<abbr title="s-special conjugation (classical)"><sup><small>†</small></sup>-se</abbr>')
elseif inflection_type == "kahen" then
insert(data.info_mid, '<abbr title="k-special conjugation (classical)"><sup><small>†</small></sup>-ko</abbr>')
elseif inflection_type == "nahen" then
insert(data.info_mid, '<abbr title="n-special conjugation (classical)"><sup><small>†</small></sup>-n</abbr>')
elseif inflection_type == "nari" or inflection_type == "なり" then
insert(data.info_mid, '<abbr title="-nari inflection (classical)"><sup><small>†</small></sup>-nari</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " なり-nari " .. cat_suffix)
end
elseif inflection_type == 'tari' or inflection_type == 'たり' then
insert(data.info_mid, '<abbr title="-tari inflection (classical)"><sup><small>†</small></sup>-tari</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " たり-tari " .. cat_suffix)
end
inflected_forms = replace_suffix('', {'[[とした]]', '[[たる]]', '[[と]]', '[[として]]'}, '', {' [[to shita]]', ' [[taru]]', ' [[to]]', ' [[to shite]]'})
insert_form('adnominal', inflected_forms[1], inflected_forms[2])
insert_form('adverbial', inflected_forms[3], inflected_forms[4])
elseif inflection_type == "ku" or inflection_type == "く" then
insert(data.info_mid, '<abbr title="-ku inflection (classical)"><sup><small>†</small></sup>-ku</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " く-ku " .. cat_suffix)
end
elseif inflection_type == "shiku" or inflection_type == "しく" then
insert(data.info_mid, '<abbr title="-shiku inflection (classical)"><sup><small>†</small></sup>-shiku</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " しく-shiku " .. cat_suffix)
end
elseif inflection_type == "ka" or inflection_type == "か" then
insert(data.info_mid, '<abbr title="-ka inflection (dialectal)"><sup><small>†</small></sup>-ka</abbr>')
if cat_suffix then
insert(data.headword.categories, lang_name .. " か-ka " .. cat_suffix)
end
elseif inflection_type and inflection_type:len() > adverbs_optional_tag:len() and inflection_type:sub(1, adverbs_optional_tag:len()) == adverbs_optional_tag then
local adverbs_optional_list = inflection_type:sub(adverbs_optional_tag:len() + 1)
for option in gsplit(adverbs_optional_list, ':') do
local normalized_option = adverbs_optional_aliases[option]
if not normalized_option then
error('unrecognized adverb opt= argument: "' .. option .. '"')
end
local normalized_option_romaji = kana_to_romaji(normalized_option, data.lang_code)
local normalized_option_link = adverbs_optional_links[normalized_option]
inflected_forms = replace_suffix('', {normalized_option_link}, '', {' [[' .. normalized_option_romaji .. ']]'})
insert_form('optionally as', inflected_forms[1])
if cat_suffix then
insert(data.headword.categories, lang_name .. " " .. cat_suffix .. " optionally taking " .. normalized_option .. "-" .. normalized_option_romaji)
end
end
elseif inflection_type == 'irr' then
insert(data.info_mid, 'irregular')
if cat_suffix then
insert(data.headword.categories, lang_name .. " irregular " .. cat_suffix)
end
elseif inflection_type == '-' or inflection_type == 'un' then
insert(data.info_mid, 'uninflectable')
end
--elseif data.lang_code == 'ryu' then ...
end
end
local function add_categories(data)
local lang_name = data.lang_name
local pagename = data.pagename
local tc = data.headword.categories
-- adds category [langname] terms spelled with jōyō kanji or [langname] terms spelled with non-jōyō kanji
-- (if it contains any kanji)
local number_of_kanji = 0
for c in ugmatch(pagename, "[" .. range.kanji .. "々〻]") do
number_of_kanji = number_of_kanji + 1
if c ~= "々" and c ~= "〻" then -- Not a kanji for the purposes of categorisation.
insert(tc, ("%s terms spelled with %s kanji"):format(lang_name, en_grades[m_ja.kanji_grade(c)]))
end
end
-- categorize by number of kanji
if number_of_kanji ~= 0 then
insert(tc, ("%s terms with %s kanji"):format(lang_name, number_of_kanji))
-- single-kanji terms
if ulen(pagename) == 1 then
insert(tc, lang_name .. " terms spelled with " .. pagename)
insert(tc, lang_name .. " single-kanji terms")
end
end
-- categorize by the script of the pagename or specific characters contained in it
-- if pagename is hiragana or katakana
if detect_pagename_kana(data, true) == 'hira' then insert(tc, lang_name .. " hiragana") end
if detect_pagename_kana(data, true) == 'kata' then insert(data.katakana_category, lang_name .. " katakana") end
local p, n = ugsub(pagename, '[' .. range.kana .. range.kanji .. range.ideograph .. range.kana_graph .. range.punctuation .. ']+', '')
if p ~= '' and n > 0 then insert(tc, lang_name .. " terms written in multiple scripts") end
local pos = data.headword.pos_category
local rare_chars = {}
for ch in iterate_rare_chars(pagename) do
rare_chars[ch] = true
end
-- Categorise yōon, but exclude kana and mora entries, since they can't be spelled with themselves.
-- FIXME: allow kana categories for morae.
if not (pos == "syllables" or pos == "kana" or pos == "morae") then
for _, mora in ipairs(moraify((ugsub(pagename, "[^" .. range.kana .. "]+", " ")))) do
if not mora:gsub(" +", ""):match("^.?[\128-\191]*$") then
rare_chars[mora] = true
end
end
end
for ch in pairs(rare_chars) do
insert(tc, lang_name .. " terms spelled with " .. ch)
end
if (
pos ~= "proverbs" and
pos ~= "phrases" and
umatch(ugsub(pagename, "[" .. range.katakana .. "]+", ""), "[" .. range.hiragana .. "]") and
umatch(ugsub(pagename, "[" .. range.hiragana .. "]+", ""), "[" .. range.katakana .. "]")
) then
insert(tc, lang_name .. " terms spelled with mixed kana")
end
end
pos_functions["verbs"] = function(args, data)
add_transitivity(data, args["tr"])
add_inflections(data, args["infl"], 'verbs')
end
pos_functions["suffixes"] = function(args, data)
add_inflections(data, args["infl"])
end
pos_functions["auxiliary verbs"] = function(args, data)
insert(data.headword.categories, data.lang_name .. " auxiliary verbs")
add_inflections(data, args["infl"])
data.headword.pos_category = "verbs"
end
pos_functions["suru verbs"] = function(args, data)
add_transitivity(data, args["tr"])
add_inflections(data, 'suru', 'verbs')
data.headword.pos_category = "verbs"
end
pos_functions["adjectives"] = function(args, data)
add_inflections(data, args["infl"], 'adjectives')
end
pos_functions["nouns"] = function(args, data)
-- the counter (classifier) parameter, only relevant for nouns
local counter = args["count"] or ""
if counter == "-" then
insert(data.headword.inflections, {label = "uncountable"})
elseif counter ~= "" then
insert(data.headword.inflections, {label = "counter", counter})
end
end
pos_functions["adverbs"] = function(args, data)
local opt = args["opt"]
if opt then
opt = adverbs_optional_tag .. opt
end
add_inflections(data, opt, 'adverbs')
end
--[==[
Generate categories by pagename, also optionally by POS
Also for use in soft redirect pages ([[Module:ja-see]]).
Sortkey is not provided.
data = {
pagename = ..., -- (required)
lang = ..., -- (required) language object
categories = {}, -- (required) receive categories
katakana_category = {}, -- (required) receive katakana-sorted categories
pos = ..., "noun", "verb", etc. no POS categories if not given
}
]==]
function export.cat(data)
data.lang_name = data.lang:getCanonicalName()
data.pagename_kana = detect_pagename_kana(data)
if data.pos then
local pos = data.pos:gsub('x$', 'xe') .. 's'
insert(data.categories, data.lang_name .. ' ' .. pos)
insert(data.categories, data.lang_name .. ' ' .. require'Module:headword'.pos_lemma_or_nonlemma(pos, true) .. 's')
end
data.headword = {categories = data.categories}
add_categories(data)
end
--[==[
The main entry point.
This is the only function that can be invoked from a template.
]==]
function export.show(frame)
local poscat = frame.args[2] or frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
local alias_of_hist = {alias_of = 'hist', list = false}
local alias_of_infl = {alias_of = "infl"}
local list = {list = true}
local list_allow_holes_separate_no_index = {list = true, allow_holes = true, separate_no_index = true}
local params = {
[1] = list,
['rom'] = list_allow_holes_separate_no_index,
['head'] = list_allow_holes_separate_no_index,
['label'] = {list = true, allow_holes = true},
['hist'] = list, ['hhira'] = alias_of_hist, ['hkata'] = alias_of_hist,
['tr'] = true,
['infl'] = true, ['type'] = alias_of_infl, ['decl'] = alias_of_infl,
['opt'] = true,
['count'] = true,
['sort'] = true,
['pagename'] = true,
}
-- For backwards compatibility with uses of {{ja-syllable}} with the script parameter.
if poscat == "syllables" then
params["sc"] = true
end
local args = require('Module:parameters').process(frame:getParent().args, params)
local data = {
headword = {
pos_category = poscat,
categories = {},
heads = {},
no_redundant_head_cat = true,
inflections = {},
genders = {'m'}, -- placeholder
nogendercat = true,
},
--custom info
pagename = args.pagename or mw.loadData("Module:headword/data").pagename,
pagename_kana = nil, -- "hira" "kata" "both", nil
lang_code = frame.args[1],
lang_name = nil, -- "Japanese", "Okinawan" ...
katakana_category = {},
info_mid = {}, -- "godan", "intransitive" ...
info_hist = {}, -- historical kana
inflection_base = {}, -- base of inflections
kanas = {}, -- kana id
}
data.headword.lang = require("Module:languages").getByCode(data.lang_code)
data.lang_name = data.headword.lang:getCanonicalName()
-- sort out all the kanas and do the romanization business
format_headword(args, data)
-- add certain inflections and categories for adjectives, verbs, nouns, or adverbs
if pos_functions[poscat] then
pos_functions[poscat](args, data)
end
-- categories
add_categories(data)
local sort_base = args.sort or data.kanas[1] or data.pagename
data.headword.sort_key = data.headword.lang:makeSortKey(sort_base)
local katakana_category = #data.katakana_category > 0 and
require("Module:utilities").format_categories(
data.katakana_category,
data.headword.lang,
nil,
sort_base,
nil,
require("Module:scripts").getByCode("Kana")
) or ""
-- output
local i_kanas = 0
return katakana_category .. require('Module:headword').full_headword(data.headword):gsub('<span class="gender">.-</span>', function()
return (#data.info_hist > 0 and '<sup>←' .. concat(data.info_hist, ' or ') .. '<sup>[[w:Historical kana orthography|?]]</sup></sup>' or '') .. ('<i>' .. concat(data.info_mid, ' ') .. '</i>')
end):gsub('<strong .->.-</strong>', function(m0)
i_kanas = i_kanas + 1
if data.kanas[i_kanas] then
return m0
end
end)
end
return export
cviumb071k5jnxgh9zqy1n7gu4mjv2p
Mòideal:ja
828
16845
86387
2026-07-23T04:22:58Z
Altronic
4137
Copy from English Wiktionary
86387
Scribunto
text/plain
local m_str_utils = require("Module:string utilities")
local export = {}
local codepoint = m_str_utils.codepoint
local concat = table.concat
local find = string.find
local get_by_code = require("Module:languages").getByCode
local insert = table.insert
local load_data = mw.loadData
local toNFC = mw.ustring.toNFC
local toNFD = mw.ustring.toNFD
local u = m_str_utils.char
local ugsub = m_str_utils.gsub
local ulen = m_str_utils.len
local ulower = m_str_utils.lower
local umatch = mw.ustring.match
local usub = m_str_utils.sub
-- note that arrays loaded by mw.loadData cannot be directly used by gsub
local pagename -- generated when needed, to avoid an infinite loop with [[Module:Jpan-sortkey]]
local namespace = mw.title.getCurrentTitle().nsText
local data = load_data("Module:ja/data")
local long_vowels_hira = data.long_vowels_hira
local long_vowels_kata = data.long_vowels_kata
local voice_marks = data.voice_marks
local range = load_data("Module:ja/data/range")
local r_hiragana = range.hiragana
local r_vowels = range.vowels
local r_kana_combining_characters = range.kana_combining_characters
local function change_codepoint(added_value)
return function(char)
return u(codepoint(char) + added_value)
end
end
function export.hira_to_kata(text)
if type(text) == "table" then
text = text.args[1]
end
text = ugsub(toNFD(text), "[ぁ-ゖゝゞ]", change_codepoint(96))
text = ugsub(text, "[𛅐-𛅒]", change_codepoint(20))
text = ugsub(text, "[𛀁𛀆𛄟𛄲]", data.hira_to_kata)
return toNFC(text)
end
function export.kata_to_hira(text)
if type(text) == "table" then
text = text.args[1]
end
text = ugsub(toNFD(text), "[ァ-ヶヽヾ]", change_codepoint(-96))
text = ugsub(text, "[𛅤-𛅦]", change_codepoint(-20))
text = ugsub(text, "[𛀀𛄠-𛄢𛅕]", data.kata_to_hira)
return toNFC(text)
end
-- removes spaces and hyphens from input
-- intended to be used when checking manual romaji to allow the
-- insertion of spaces or hyphens in manual romaji without appearing "wrong"
function export.rm_spaces_hyphens(f)
local text = type(f) == "table" and f.args[1] or f
return (text:gsub("[ '%-.^]+", "")
:gsub(" ", ""))
end
do
local function handle_macron(ch)
return ch == "o" and "ou" or ch .. ch
end
function export.romaji_to_kata(f)
local text = type(f) == "table" and f.args[1] or f
text = ulower(toNFD(text))
text = text:gsub("(.[\128-\191]*)\204\132", handle_macron)
:gsub("(.)%1", "ッ%1")
:gsub("tc", "ッc")
:gsub("tsyu", "ツュ")
:gsub("ts[uoiea]", {["tsu"]="ツ",["tso"]="ツォ",["tsi"]="ツィ",["tse"]="ツェ",["tsa"]="ツァ"})
:gsub("sh[uoiea]", {["shu"]="シュ",["sho"]="ショ",["shi"]="シ",["she"]="シェ",["sha"]="シャ"})
:gsub("ch[uoiea]", {["chu"]="チュ",["cho"]="チョ",["chi"]="チ",["che"]="チェ",["cha"]="チャ"})
:gsub("n[uoiea']?", {["nu"]="ヌ",["no"]="ノ",["ni"]="ニ",["ne"]="ネ",["na"]="ナ"})
:gsub("[wvtrpsnmlkjhgfdbzy][yw]?[uoiea]", data.rk)
:gsub("n'?", "ン")
:gsub("[aeiou]", {
u = "ウ", o = "オ", i = "イ", e = "エ", a = "ア"
})
return text
end
end
-- expects: any mix of kanji and kana
-- determines the script types used
-- e.g. given イギリス人, it returns Kana+Hani
function export.script(f)
local text = type(f) == "table" and f.args[1] or f
local script = {}
-- For Hira and Kana, we remove any characters which also feature in the other first, so that we don't get false positives for ー etc.
local no_overlap = ugsub(text, "[" .. range.kana_overlap .. "]+", "")
if umatch(no_overlap, "[" .. r_hiragana .. "ゟ]") then
insert(script, "Hira")
end
if umatch(no_overlap, "[" .. range.katakana .. "ヿ]") then
insert(script, "Kana")
end
if umatch(text, "[" .. range.kanji .. "]") then
insert(script, "Hani")
end
if umatch(text, "[" .. range.latin .. "]") then
insert(script, "Romaji")
end
if umatch(text, "[" .. range.numbers .. "]") then
insert(script, "Number")
end
if umatch(text, "[〆々]") then
insert(script, "Abbreviation")
end
return concat(script, "+")
end
do
local submoraic = range.submoraic_kana .. r_kana_combining_characters
local spacing_punc = "%s%p%$%+=>%^`|~"
local function handle_spacing_punc(ch, mora)
insert(mora, ch)
if ch:match("[^%^%%']") then
mora.sp = true
end
return ch, mora
end
local function iterate_mora(text, start, morae, mora)
mora = mora or {}
local ch = umatch(text, "^[" .. spacing_punc .. "]+", start)
if ch then
return handle_spacing_punc(ch, mora)
end
ch = usub(text, start, start)
if ch == "<" then
ch = umatch(text, "^<.->", start) or umatch(text, "^[<" .. spacing_punc .. "]+", start)
return handle_spacing_punc(ch, mora)
elseif (
mora.sp or
mora.kana and umatch(ch, "[^" .. submoraic .. "]")
) then
insert(morae, concat(mora))
mora = {}
end
mora.kana = true
insert(mora, ch)
return ch, mora
end
-- Returns an array of morae.
-- Small vowel kana (and any combining dakuten/handakuten) are grouped with any prior word characters, which should be kana. Non-word characters (spaces, punctuation etc.) are accounted for, and grouped with surrounding morae wherever possible.
function export.moraify(text)
local morae, start, text_len, mora = {}, 1, ulen(text)
while start <= text_len do
local ch
ch, mora = iterate_mora(text, start, morae, mora)
start = start + ulen(ch)
end
if mora then
insert(morae, concat(mora))
end
return morae
end
local function remove_formatting(text)
return ugsub(text:gsub("<.->", ""), "[<" .. spacing_punc .. "]+", "")
end
-- Counts the number of morae.
function export.count_morae(text)
text = export.moraify(text)
local morae = #text
for i = 1, morae do
if #remove_formatting(text[i]) == 0 then
morae = morae - 1
end
end
return morae
end
local function do_long_vowel(i, text)
if not text[i]:find("ー") then
return
end
local prev = text[i - 1]
if not prev then
return
end
local prev_clean = remove_formatting(prev)
-- と゚/ト゚ (tu) keeps its vowel changed by the handakuten, unlike ordinary
-- (semi)voicing -- stripping it below would misidentify this as と (o-row).
if prev_clean:find(toNFD("と゚"), 1, true) or prev_clean:find(toNFD("ト゚"), 1, true) then
local v = (umatch(prev_clean, "[" .. r_hiragana .. "]") and long_vowels_hira or long_vowels_kata)["u"]
text[i] = text[i]:gsub("ー", v, 1)
return
end
prev = ugsub(prev_clean, "[" .. r_kana_combining_characters .. "]+", "")
:match("[^\128-\191][\128-\191]*$")
for vowel, kana in pairs(r_vowels) do
if kana:find(prev) then
local v = (umatch(prev, "[" .. r_hiragana .. "]") and long_vowels_hira or long_vowels_kata)[vowel]
text[i] = text[i]:gsub("ー", v, 1)
end
end
end
local function do_iteration_mark(i, n, text)
local mora = text[i]
if mora:find("ゝ") or mora:find("ヽ") then
return n + 1
elseif n == 0 then
return
end
-- Count backwards once for each iteration mark, but stop early if we find something which can't be iterated, as that marks the start of the set to be repeated.
local anchor = i
for j = 0, n - 1 do
local prev = text[anchor - j]
if not prev then
n = j
break
end
prev = remove_formatting(prev)
if prev:find("ゝ") or prev:find("ヽ") or umatch(prev, "[%s%p]") then
n = j
break
end
end
if n == 0 then
return
end
i = i - n + 1
-- Replace iteration marks ahead with the relevant character.
for j = i, i + n - 1 do
mora = remove_formatting(text[j]):gsub("^(.[\128-\191]*)\227\130[\153\154]", "%1")
text[j + n] = ugsub(text[j + n], "([ゝヽ])([゙゚]?)", function(mark, voicing)
local repl = mora:gsub("^.[\128-\191]*", "%0" .. voicing)
return mark == "ゝ" and export.kata_to_hira(repl) or export.hira_to_kata(repl)
end)
end
return
end
-- Normalizes long vowels, iteration marks and non-combining voice marks to the standard equivalents.
-- Note: output text is normalized to NFD.
function export.normalize_kana(text)
text = export.moraify((toNFD(text):gsub("[\227\239][\130\190][\155\156\158\159]", voice_marks)))
local n, morae = 0, #text
for i = morae, 1, -1 do
n = do_iteration_mark(i, n, text) or 0
end
for i = 1, morae do
do_long_vowel(i, text)
end
-- Normalize again to be safe.
return toNFD(concat(text))
end
end
-- returns the "stem" of a verb or -i adjective, that is the term minus the final character
function export.definal(f)
return usub(f.args[1], 1, -2)
end
function export.remove_ruby_markup(text)
return (text:gsub("[%^%-%. %%]", ""))
end
-- do the work of [[Template:ja-kanji]], [[Template:ryu-kanji]] etc.
-- should probably be folded into [[Module:Jpan-headword]]
function export.kanji(frame)
pagename = pagename or load_data("Module:headword/data").pagename
-- only do this if this entry is a kanji page and not some user's page
if namespace == "" then
local params = {
grade = true, -- To be removed.
rs = true,
shin = true,
kyu = true,
head = true,
}
local lang_code = frame.args[1]
local lang = get_by_code(lang_code)
local lang_name = lang:getCanonicalName()
local args = require("Module:parameters").process(frame:getParent().args, params, nil, "ja", "kanji")
local sortkey = args.rs or require("Module:Hani-sortkey").makeSortKey(pagename) or pagename -- radical sort
local shin = args.shin
local kyu = args.kyu
local wikitext, categories = {}, {}
-- display the kanji itself at the top at 275% size
insert(wikitext, "<div><span lang=\"" .. lang_code .. "\" class=\"Jpan headword\" style=\"font-size:275%; line-height:1;\">" .. (args.head or pagename) .. "</span></div>")
-- display information for the grade
-- determine grade
local grade, in_parenthesis = export.kanji_grade(pagename), {}
insert(in_parenthesis, data.grade_links[grade])
if args.grade then
require("Module:debug/track")("ja/redundant grade parameter")
end
-- link to shinjitai if shinjitai was specified, and link to kyujitai if kyujitai was specified
if kyu then
insert(in_parenthesis, "[[shinjitai]] kanji, [[kyūjitai]] form <span lang=\"" .. lang_code .. "\" class=\"Jpan\">[[" .. kyu .. "#" .. lang_name .. "|" .. kyu .. "]]</span>")
elseif shin then
insert(in_parenthesis, "[[kyūjitai]] kanji, [[shinjitai]] form <span lang=\"" .. lang_code .. "\" class=\"Jpan\">[[" .. shin .. "#" .. lang_name .. "|" .. shin .. "]]</span>")
end
insert(wikitext, "''(" .. concat(in_parenthesis, ", ") .. "'')")
-- add categories
insert(categories, lang_name .. " kanji")
insert(categories, lang_name .. " " .. data.grades[grade])
if grade <= 6 then
insert(categories, lang_name .. " kyōiku kanji")
insert(categories, lang_name .. " jōyō kanji") -- Grade 7 get this from the data.
end
if mw.title.new(lang_name .. " terms spelled with " .. pagename, 14).exists then
insert(wikitext, 1, "<div class=\"noprint floatright catlinks\" style=\"font-size: 90%; width: 270px\"><div style=\"padding:0 5px\"><i>See also:</i><div style=\"margin-left: 10px;\">[[:Category:" .. lang_name .. " terms spelled with " .. pagename .. "]]</div></div></div>")
end
return concat(wikitext) .. require("Module:utilities").format_categories(categories, lang, sortkey)
end
end
function export.kanji_grade(kanji)
for i, set in ipairs(data.grade_kanji) do
if find(set, kanji, 1, true) then
return i
end
end
return umatch(kanji, "[" .. range.kanji .. "]") and 9 or false
end
return export
1l5sxj5ef0cr048ptdhsimsm9dow6d7
Mòideal:ja-ruby
828
16846
86388
2026-07-23T04:24:21Z
Altronic
4137
Copy from English Wiktionary
86388
Scribunto
text/plain
local m_str_utils = require("Module:string utilities")
local codepoint = m_str_utils.codepoint
local concat = table.concat
local insert = table.insert
local ipairs = ipairs
local select = select
local type = type
local u = m_str_utils.char
local ufind = m_str_utils.find
local ugmatch = m_str_utils.gmatch
local ugsub = m_str_utils.gsub
local ulen = m_str_utils.len
local umatch = m_str_utils.match
local usub = m_str_utils.sub
local function str_hira_to_kata(s)
return (ugsub(s, '[ぁ-ゖ]', function(m1) return u(codepoint(m1) + 96) end))
end
local function str_kata_to_hira(s)
return (ugsub(s, '[ァ-ヶ]', function(m1) return u(codepoint(m1) - 96) end))
end
local export = {}
-- using Wagner–Fischer algorithm
-- str_ucompare is O(nlogn). parse_text is O(n). For long texts, the latter is less prone to Lua timeout error.
local function str_ucompare(s1, s2, limit)
s1, s2 = mw.text.split(s1, ''), mw.text.split(s2, '')
local len1, len2 = #s1, #s2
if limit and len1 * len2 * 20 > limit then return {{s1}, {s2}} end
local m_cost, m_step = {{0}}, {{}}
for i = 1, len1 do
m_cost[i + 1] = {i}
m_step[i + 1] = {3}
end
for j = 1, len2 do
m_cost[1][j + 1] = j
m_step[1][j + 1] = 4
end
for i = 1, len1 do
for j = 1, len2 do
local b_same = s1[i] == s2[j]
local c_sub = m_cost[i][j] + (b_same and 0 or 1)
local c_del = m_cost[i][j + 1] + 1
local c_ins = m_cost[i + 1][j] + 1
if c_sub <= c_del and c_sub <= c_ins then
m_cost[i + 1][j + 1] = c_sub
m_step[i + 1][j + 1] = b_same and 1 or 2
elseif c_del <= c_ins then
m_cost[i + 1][j + 1] = c_del
m_step[i + 1][j + 1] = 3
else
m_cost[i + 1][j + 1] = c_ins
m_step[i + 1][j + 1] = 4
end
end
end
local i1, i2 = len1 + 1, len2 + 1
local m_offset = {{-1, -1}, {-1, -1}, {-1, 0}, {0, -1}}
local r_step_rev = {}
local r_step_rev_pos1 = {}
local r_step_rev_pos2 = {}
local step = m_step[i1][i2]
while step do
insert(r_step_rev, step)
i1 = i1 + m_offset[step][1]
i2 = i2 + m_offset[step][2]
insert(r_step_rev_pos1, i1)
insert(r_step_rev_pos2, i2)
step = m_step[i1][i2]
end
local r1, r2 = {}, {}
local i = #r_step_rev
local step = r_step_rev[i]
while i > 0 do
local r1_f, r2_f = {}, {}
if step == 1 then
repeat
insert(r1_f, s1[r_step_rev_pos1[i]])
insert(r2_f, s2[r_step_rev_pos2[i]])
i = i - 1
step = r_step_rev[i]
until step ~= 1
else
while true do
if step == 2 then
insert(r1_f, s1[r_step_rev_pos1[i]])
insert(r2_f, s2[r_step_rev_pos2[i]])
elseif step == 3 then
insert(r1_f, s1[r_step_rev_pos1[i]])
elseif step == 4 then
insert(r2_f, s2[r_step_rev_pos2[i]])
else
break
end
i = i - 1
step = r_step_rev[i]
end
end
insert(r1, concat(r1_f))
insert(r2, concat(r2_f))
end
return {r1, r2}
end
local function str_parse_link(s)
local t = {}
local lt
local i1, i2
local i_o = 1
local i_n = s:find('%[%[', i_o)
while i_n do
i1, i2 = s:find('%[%[', i_n + 1), s:find('%]%]', i_n + 2)
if not i2 then break end
while i1 and i1 < i2 do
i_n = i1
i1 = s:find('%[%[', i_n + 1)
end
if i_o < i_n then insert(t, {
text = s:sub(i_o, i_n - 1),
}) end
if i_n + 2 < i2 then
lt = s:sub(i_n + 2, i2 - 1)
i1 = lt:find('|')
if i1 and i1 > 1 and i1 < lt:len() then
insert(t, {
text = lt:sub(i1 + 1),
linkto = lt:sub(1, i1 - 1),
})
else
insert(t, {
text = lt,
linkto = lt,
})
end
end
i_o = i2 + 2
i_n = s:find('%[%[', i_o)
end
if i_o <= s:len() then insert(t, {
text = s:sub(i_o),
}) end
return t
end
local function table_merge(link_table, ruby_table)
local r = {}
local r_sub, r_insert
local len_cut
local id_l, id_r = 1, 1
while id_l <= #link_table and id_r <= #ruby_table do
len_cut = link_table[id_l].text:len() - ruby_table[id_r].text:len()
if ruby_table[id_r].ruby and (ruby_table[id_r].ruby:find'%[%[..-%]%]' or len_cut < 0) then
if ruby_table[id_r].ruby then
r_sub = {
text = {},
ruby = str_parse_link(ruby_table[id_r].ruby),
}
r_insert = r_sub.text
insert(r, r_sub)
else
r_insert = r
end
while len_cut < 0 do
insert(r_insert, {
text = link_table[id_l].text,
linkto = link_table[id_l].linkto
})
id_l = id_l + 1
len_cut = len_cut + link_table[id_l].text:len()
end
insert(r_insert, {
text = link_table[id_l].text:sub(1, -1 - len_cut),
linkto = link_table[id_l].linkto
})
if len_cut == 0 then
id_l = id_l + 1
id_r = id_r + 1
else
link_table[id_l].text = link_table[id_l].text:sub(-len_cut)
id_r = id_r + 1
end
else
if link_table[id_l].linkto then
r_sub = {
text = {},
linkto = link_table[id_l].linkto,
}
r_insert = r_sub.text
insert(r, r_sub)
else
r_insert = r
end
while len_cut > 0 and not (ruby_table[id_r].ruby and ruby_table[id_r].ruby:find'%[%[..-%]%]') do
insert(r_insert, {
text = ruby_table[id_r].text,
ruby = ruby_table[id_r].ruby,
})
id_r = id_r + 1
len_cut = len_cut - ruby_table[id_r].text:len()
end
if len_cut == 0 then
insert(r_insert, {
text = ruby_table[id_r].text,
ruby = ruby_table[id_r].ruby,
})
id_l = id_l + 1
id_r = id_r + 1
else
if ruby_table[id_r].ruby then
link_table[id_l].text = link_table[id_l].text:sub(-(len_cut + ruby_table[id_r].text:len()))
else
insert(r_insert, {
text = ruby_table[id_r].text:sub(1, -1 + len_cut),
})
ruby_table[id_r].text = ruby_table[id_r].text:sub(len_cut)
id_l = id_l + 1
end
end
end
end
return r
end
--[==[Concatenates the texts in a ruby table. Discards all ruby and links.]==]
function export.to_text(ruby_table)
local r = {}
local v_text
for _, v in ipairs(ruby_table) do
v_text = v.text
if type(v_text) == 'string' then
insert(r, v_text)
else
insert(r, export.to_text(v_text))
end
end
return concat(r)
end
--[==[Concatenates the texts in a ruby table. Discards all links. Ruby are used in place of the text below it when present.]==]
function export.to_ruby(ruby_table)
local r = {}
local v_text
for _, v in ipairs(ruby_table) do
v_text = v.ruby or v.text
if type(v_text) == 'string' then
insert(r, v_text)
else
insert(r, export.to_ruby(v_text))
end
end
return concat(r)
end
local function table_to_markup(ruby_table, break_link, lb, lm, lf, rb, rm, rf)
local text = {}
local v_text, v_ruby, v_linkto
for _, v in ipairs(ruby_table) do
v_linkto, v_ruby = v.linkto, v.ruby
if type(v.text) ~= 'string' then
if break_link and v_linkto then
v_text = {}
for _, vv in ipairs(v.text) do
if vv.text ~= '' or vv.ruby and vv.ruby ~= '' then
insert(v_text, {
text = {{
text = vv.text,
linkto = v_linkto,
}},
ruby = vv.ruby,
})
end
end
v_linkto, v_ruby = nil, nil
v_text = table_to_markup(v_text, break_link, lb, lm, lf, rb, rm, rf)
else
v_text = table_to_markup(v.text, break_link, lb, lm, lf, rb, rm, rf)
end
else
v_text = v.text
end
if v_linkto then
if v_linkto ~= '' then insert(text, lb .. v_linkto .. lm .. (v_text ~= '' and v_text or '_') .. lf)
else insert(text, v_text) end
elseif v_ruby then
if type(v_ruby) ~= 'string' then v_ruby = table_to_markup(v_ruby, break_link, lb, lm, lf, rb, rm, rf) end
if v_ruby ~= '' then insert(text, rb .. v_text .. rm .. v_ruby .. rf)
else insert(text, v_text) end
else
insert(text, v_text)
end
end
return concat(text)
end
--[==[Generates {"[]()"} markups from ruby tables.
* {options.break_link = true}: Change {[[...|<ruby>...<ruby>]]} to {<ruby>[[...]]<ruby>}.
* {options.markup}: Use custom markups other than {"[...](...)"} and {"[[...|...]]"}. Custom markups are not recognized and can not be converted back.]==]
function export.to_markup(ruby_table, options)
options = options or {}
local omarkup = options.markup or {}
return table_to_markup(
ruby_table,
options.break_link,
omarkup.link_border_left or '[[',
omarkup.link_border_middle or '|',
omarkup.link_border_right or ']]',
omarkup.ruby_border_left or '[',
omarkup.ruby_border_middle or '](',
omarkup.ruby_border_right or ')')
end
--[==[Generates wikitexts from ruby tables.
* The options are the same as {function export.to_markup()}]==]
function export.to_wiki(ruby_table, options)
options = options or {}
local omarkup = options.markup or {}
return table_to_markup(
ruby_table,
options.break_link,
omarkup.link_border_left or '[[',
omarkup.link_border_middle or '|',
omarkup.link_border_right or ']]',
omarkup.ruby_border_left or '<ruby>',
omarkup.ruby_border_middle or '<rp>(</rp><rt>',
omarkup.ruby_border_right or '</rt><rp>)</rp></ruby>')
end
--[==[Constructs a ruby table form {"[]()"} markups.]==]
function export.parse_markup(markup)
local ruby = {}
local link_table = str_parse_link(markup:gsub('(%b[])(%b())', function(m1, m2)
insert(ruby, m2:sub(2, -2))
return m1:sub(2, -2)
end))
local plain_text = export.to_text(str_parse_link(markup))
local ruby_table = {}
local p0 = 1
local ruby_n = 1
local s_text, s_ruby
for p1, m1, m2, p2 in plain_text:gmatch'()(%b[])(%b())()' do
if p0 < p1 then
s_text = plain_text:sub(p0, p1 - 1)
insert(ruby_table, {text = s_text})
end
s_text = m1:sub(2, -2)
s_ruby = ruby[ruby_n]
insert(ruby_table, {
text = s_text,
ruby = s_ruby ~= '' and s_ruby or nil,
})
p0 = p2
ruby_n = ruby_n + 1
end
if p0 <= plain_text:len() then
s_text = plain_text:sub(p0)
insert(ruby_table, {text = s_text})
end
return table_merge(link_table, ruby_table)
end
local data_range = mw.loadData'Module:ja/data/range'
local range_mute = '%^%-%.゠・'
local range_hirakata = data_range.hiragana .. data_range.katakana
local range_kana = data_range.kana
local range_noalias = '<>^%c%p%s%z' .. range_kana
local range_noruby = range_noalias .. data_range.kana_graph
local range_nospace = range_kana .. data_range.kanji .. data_range.ideograph .. data_range.kana_graph .. data_range.punctuation
--[==[Constructs a ruby table from the 2 strings passed to this function. The differences in the 2 strings are converted into ruby, with the corresponding part of {kana} becoming the ruby text and that of {term} becoming the text under the ruby. Links in {term} will be integrated into the result. Links in {kana} will be ignored by default.
Details about the format of {term} and {kana} can be found in [[Template:ja-r/documentation#Ruby_and_transliteration]].
To better adapt to Japanese texts, this function assumes that all non-letters (except for 5 symbols "^", ".", "-", "゠", "・" for transliteration reasons) and all kana always represent themselves. These literal characters when appearing in {term} should also appear unchanged or as a hira-kata counterpart in {kana}. This behaviour can be changed by using {options.try}, or by manually isolating a single literal character with "%".
* {options.try == nil}: Lauch an error when the assumption of literal characters fails.
* {options.try == 'force'}: Discard the assumption of literal characters when it fails, and try to find any differences in the strings.
* {options.try_force_limit}: Limit the time used by {options.try == 'force'}.
* {options.space == nil}: Remove spaces between kana or kanji but preserve elsewhere.
* {options.space == 'all'}: Preserve all spaces.
* {options.space == 'none'}: Remove all spaces.
* {options.allow_ruby_link == true}: Try to match the links in {kana}.]==]
function export.parse_text(term, kana, options)
options = options or {}
local _remove_space
if options.space == 'none' then
_remove_space = function(_r)
local function _next(p1, p2)
if p2 and p2 < #_r[p1].text then
return p1, p2 + 1
end
p1 = p1 + 1
if p1 > #_r then
p2 = nil
else
p2 = type(_r[p1].text) ~= 'string' and 1 or nil
end
return p1, p2
end
local pos1, pos2 = _next(0, nil)
while pos1 <= #_r do
local _t = pos2 and _r[pos1].text[pos2] or _r[pos1]
_t.text = _t.text:gsub(' ', '')
if _t.linkto then _t.linkto = _remove_space({{text = _t.linkto}})[1].text end
if _t.ruby then _t.ruby = _remove_space({{text = _t.ruby}})[1].text end
if pos2 then
if _r[pos1].linkto then _r[pos1].linkto = _remove_space({{text = _r[pos1].linkto}})[1].text end
if _r[pos1].ruby then _r[pos1].ruby = _remove_space({{text = _r[pos1].ruby}})[1].text end
end
pos1, pos2 = _next(pos1, pos2)
end
return _r
end
elseif options.space == 'all' then
_remove_space = function(_r)
return _r
end
else
_remove_space = function(_r, context_ak, context_bk)
local function _next(p1, p2)
if p2 and p2 < #_r[p1].text then
return p1, p2 + 1
end
p1 = p1 + 1
if p1 > #_r then
p2 = nil
else
p2 = type(_r[p1].text) ~= 'string' and 1 or nil
end
return p1, p2
end
local pos1, pos2 = _next(0, nil)
local pos3, pos4 = pos1, pos2
local after_k = context_ak
local before_k
local _t, char
while pos1 <= #_r do
if pos3 == pos1 and (pos4 == pos2 or pos4 < pos2) or pos3 < pos1 then
before_k = context_bk
pos3, pos4 = _next(pos1, pos2)
while pos3 <= #_r do
_t = pos4 and _r[pos3].text[pos4] or _r[pos3]
char = ufind(_t.text, '[^ \']')
if char then
char = usub(_t.text, char, char)
before_k = ufind(char, '['..range_nospace..']')
break
end
pos3, pos4 = _next(pos3, pos4)
end
end
_t = pos2 and _r[pos1].text[pos2] or _r[pos1]
if _t.linkto then _t.linkto = _remove_space({{text = _t.linkto}}, after_k, before_k)[1].text end
if _t.ruby then _t.ruby = _remove_space({{text = _t.ruby}}, after_k, before_k)[1].text end
if pos2 then
if _r[pos1].linkto then _r[pos1].linkto = _remove_space({{text = _r[pos1].linkto}}, after_k, before_k)[1].text end
if _r[pos1].ruby then _r[pos1].ruby = _remove_space({{text = _r[pos1].ruby}}, after_k, before_k)[1].text end
end
local seg = {}
local i0 = 1
for i1, m1, i2 in ugmatch(_t.text, '()(['..range_nospace..']+)()') do
if after_k and not usub(_t.text, i0, i1 - 1):find'[^ \']' then
insert(seg, (usub(_t.text, i0, i1 - 1):gsub(' ', '')))
else
insert(seg, usub(_t.text, i0, i1 - 1))
end
insert(seg, m1)
after_k = true
i0 = i2
end
after_k = after_k and not usub(_t.text, i0):find'[^ \']'
if after_k and before_k then
insert(seg, (usub(_t.text, i0):gsub(' ', '')))
else
insert(seg, usub(_t.text, i0))
end
_t.text = concat(seg)
pos1, pos2 = _next(pos1, pos2)
end
return _r
end
end
-- Create the link table
-- e.g. "[[エドガー・アラン・ポー|アラン・ポー]]の[[推理 小説]]"
local link_table = str_parse_link(term:gsub('%%', '')) -- remove '%'
--[[link_table = {
{text = 'アラン・ポー', linkto = 'エドガー・アラン・ポー'},
{text = 'の'},
{text = '推理 小説', linkto = '推理 小説'},
}]]
-- Remove romaji markup
kana = kana:gsub('[%^%-%.]', '') -- remove '^', '-', '.', preserve '%', ' '
-- Create the ruby table
-- e.g. 'アラン・ポーの推理 小説', 'あらん ぽー の すいり しょうせつ'
-- ("ぽお" is not allowed)
local ruby_table = {}
local plain_term_raw = export.to_text(str_parse_link(term)) -- Remove links: [[A|B]] -> B, [[C]] -> C
local plain_kana_raw = options.allow_ruby_link and kana or export.to_text(str_parse_link(kana))
local plain_term = mw.text.split(plain_term_raw, '%%')
local plain_kana = mw.text.split(plain_kana_raw, '%%')
if #plain_term ~= #plain_kana then
mw.logObject(plain_term)
mw.logObject(plain_kana)
error('Separator "%" in the kanji and kana strings do not match.')
end
for i, plain_term_i in ipairs(plain_term) do
if plain_term_i ~= '' or plain_kana[i] ~= '' then
local pattern_ruby, pattern_ruby_is_ruby = {}, {}
local function _func_pat(s_sub)
local in_xml_tag = false
insert(pattern_ruby, '(' .. ugsub(s_sub, '.', function(m0)
if in_xml_tag then
if m0 == '>' then in_xml_tag = false end
return ''
else
if m0 == '<' then
in_xml_tag = true
return ' ?<.->'
else
local m0_m = m0
if m0:find'^[%(%)%.%%%+%-%*%?%[%]%^%$]$' then m0_m = '%' .. m0_m end
if ufind(m0, '^['..range_mute..']$') then m0_m = '[' .. m0_m .. ' -]?'
elseif ufind(m0, '^[ヶゖケ]$') then
m0_m = "[" .. str_kata_to_hira(m0_m) .. str_hira_to_kata(m0_m) .. "かがこカガコ]"
elseif ufind(m0, '^['..range_hirakata..']$') then
m0_m = "[" .. str_kata_to_hira(m0_m) .. str_hira_to_kata(m0_m) .. "]"
end
return ' ?' .. m0_m
end
end
end) .. ' ?)')
end
local plain_term_noxml = plain_term_i:gsub('%b<>', '<>')
local pos0 = 1
-- Use a custom iterator so that we can exclude "&" and "@" from range_noalias, as they're part of %p.
for pos1, s, pos2 in (function()
local pos2, pos1, c = 1
local len = ulen(plain_term_noxml)
return function()
if pos2 > len then return nil end
pos1 = math.min(
ufind(plain_term_noxml, "[^"..range_noalias.."]", pos2) or math.huge,
ufind(plain_term_noxml, "[&@]", pos2) or math.huge
)
if pos1 == math.huge then return nil end
pos2 = pos1
repeat
pos2, c = select(2, ufind(plain_term_noxml, "(["..range_noalias.."])", pos2 + 1))
until (not pos2) or (pos2 and not c:find("[&@]"))
pos2 = pos2 or len + 1
return pos1, usub(plain_term_noxml, pos1, pos2 - 1), pos2
end
end)() do
if pos0 < pos1 then
local s_sub = usub(plain_term_noxml, pos0, pos1 - 1)
if not pattern_ruby_is_ruby[#pattern_ruby] or umatch(s_sub, '[^' .. range_mute .. ']') then
_func_pat(s_sub)
end
end
if not pattern_ruby_is_ruby[#pattern_ruby] then
insert(pattern_ruby, '(..-)')
pattern_ruby_is_ruby[#pattern_ruby] = true
end
pos0 = pos2
end
if #pattern_ruby == 0 then
-- isolated symbol matches anything.
insert(ruby_table, {
text = plain_term_i,
ruby = plain_kana[i] ~= plain_term_i and ulen(plain_term_i) == 1 and plain_kana[i] or nil,
})
else
if pos0 <= ulen(plain_term_noxml) then
_func_pat(usub(plain_term_noxml, pos0))
end
local pat_ruby_s = concat(pattern_ruby)
-- 'アラン・ポーの推理 小説' to '( ?[あア] ?[らラ] ?[んン] ?[・ -]? ?[ぽポ] ?ー ?[のノ] ?)(..-)( )(..-)'
-- Excute matching
local ruby_table_i_ruby = {umatch(plain_kana[i], '^'..pat_ruby_s..'$')}
if #ruby_table_i_ruby > 0 then
local ruby_table_i_text = {umatch(plain_term_i, '^'..pat_ruby_s..'$')}
for n_match = 1, #pattern_ruby do
-- Exclude "&" and "@" from range_noruby, as they're part of %p.
if (
pattern_ruby_is_ruby[n_match] and
ruby_table_i_text[n_match] ~= ruby_table_i_ruby[n_match] and
(
ufind(ruby_table_i_text[n_match], '[^' .. range_noruby .. ']') or
ruby_table_i_text[n_match]:find("[&@]")
)
) then
insert(ruby_table, {
text = ruby_table_i_text[n_match],
ruby = ruby_table_i_ruby[n_match],
})
else
if #ruby_table > 0 and ruby_table[#ruby_table].ruby == nil then
ruby_table[#ruby_table].text = ruby_table[#ruby_table].text .. ruby_table_i_text[n_match]
else
insert(ruby_table, {text = ruby_table_i_text[n_match]})
end
end
end
elseif options.try == 'force' then
require('Module:debug').track('ja-ruby/forced match')
local forced_result = str_ucompare(plain_term_i, plain_kana[i], options.try_force_limit)
for ii, vv in ipairs(forced_result[1]) do
insert(ruby_table, {
text = vv,
ruby = forced_result[2][ii] ~= vv and forced_result[2][ii] or nil,
})
end
else
mw.log(pat_ruby_s)
error('Can not match "' .. plain_term_i .. '" and "' .. plain_kana[i] .. '"')
end
end
end
end
--[[ruby_table = {
{text = 'アラン・ポーの'},
{text = '推理', ruby = 'すいり'},
{text = ' '}
{text = '小説', ruby = 'しょうせつ'},
}]]
return _remove_space(table_merge(link_table, ruby_table))
-- Merge the ruby and link table
--[[return {
{text = 'アラン・ポー', linkto = 'エドガー・アラン・ポー'},
{text = 'の'},
{text = {
{text = '推理', ruby = 'すいり'},
{text = ''}
{text = '小説', ruby = 'しょうせつ'},
}, linkto = '推理小説'},
}]]
end
--[==[A shortcut for combinations like {to_wiki(parse_text(...))}. It accepts a table containing named arguments instead of positional ones.
* {term}, {kana}: Arguments for {parse_text()}.
* markup: Argument for {parse_markup()}.
* to_target: Default to {to_wiki()}. {'text'} for {to_text()}; {'ruby'} for {to_ruby()}; {'markup'} for {to_markup()}.
* options: A shared option table passed to all functions involved.]==]
function export.ruby_auto(args)
local to_target
if args.target == 'text' then
to_target = export.to_text
elseif args.target == 'ruby' then
to_target = export.to_ruby
elseif args.target == 'markup' then
to_target = export.to_markup
else
to_target = export.to_wiki
end
if args.term and args.kana then
return to_target(export.parse_text(args.term, args.kana, args.options), args.options)
elseif args.markup then
return to_target(export.parse_markup(args.markup, args.options), args.options)
else
error('Cannot find "term" and "kana" or "markup"')
end
end
return export
3dkdcglf6gmoh8s2govywd7iqojs7tt
Mòideal:writing systems/data
828
16847
86389
2026-07-23T04:33:54Z
Altronic
4137
Copy from English Wiktionary
86389
Scribunto
text/plain
local m = {}
m["abjad"] = {
"abjad",
185087,
otherNames = {"consonantary", "consonantal alphabet"},
}
m["abugida"] = {
"abugida",
335806,
otherNames = {"alphasyllabary"},
}
m["alphabet"] = {
"alphabet",
9779,
category = "alphabetic writing system",
}
m["logography"] = {
"logography",
3953107,
otherNames = {"ideography"},
category = "logographic writing system",
}
m["pictography"] = {
"pictography",
860735,
category = "pictographic writing system",
}
m["semisyllabary"] = {
"semisyllabary",
3781304,
otherNames = {"semi-syllabary"},
}
m["syllabary"] = {
"syllabary",
182133,
}
return require("Module:languages").finalizeData(m, "writing system")
kg18gfc02y6mi29hadprv64y8e0afuo
Mòideal:writing systems
828
16848
86390
2026-07-23T04:34:17Z
Altronic
4137
Copy from English Wiktionary
86390
Scribunto
text/plain
local export = {}
local en_utilities_module = "Module:en-utilities"
local json_module = "Module:JSON"
local language_like_module = "Module:language-like"
local load_module = "Module:load"
local table_module = "Module:table"
local writing_systems_data_module = "Module:writing systems/data"
local gmatch = string.gmatch
local make_object -- Defined below.
local require = require
local setmetatable = setmetatable
local type = type
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function keys_to_list(...)
keys_to_list = require(table_module).keysToList
return keys_to_list(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function pluralize(...)
pluralize = require(en_utilities_module).pluralize
return pluralize(...)
end
local function to_json(...)
to_json = require(json_module).toJSON
return to_json(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local writing_systems_data
local function get_writing_systems_data()
writing_systems_data, get_writing_systems_data = load_data(writing_systems_data_module), nil
return writing_systems_data
end
local WritingSystem = {}
WritingSystem.__index = WritingSystem
function WritingSystem:getCode()
return self._code
end
function WritingSystem:getCanonicalName()
return self._data[1]
end
function WritingSystem:getDisplayForm(singular)
return singular and (self._data.category or self:getCanonicalName()) or self:getCategoryName("nocap")
end
function WritingSystem:getAliases()
WritingSystem.getAliases = require(language_like_module).getAliases
return self:getAliases()
end
function WritingSystem:getVarieties(flatten)
WritingSystem.getVarieties = require(language_like_module).getVarieties
return self:getVarieties(flatten)
end
function WritingSystem:getOtherNames()
WritingSystem.getOtherNames = require(language_like_module).getOtherNames
return self:getOtherNames()
end
function WritingSystem:getAllNames()
WritingSystem.getAllNames = require(language_like_module).getAllNames
return self:getAllNames()
end
--[==[Returns a table of types as a lookup table (with the types as keys).
Currently, the only possible type is {writing system}.]==]
function WritingSystem:getTypes()
local types = self._types
if types == nil then
types = {["writing system"] = true}
local rawtypes = self._data.type
if rawtypes then
for t in gmatch(rawtypes, "[^,]+") do
types[t] = true
end
end
self._types = types
end
return types
end
--[==[Given a list of types as strings, returns true if the writing system has all of them.]==]
function WritingSystem:hasType(...)
WritingSystem.hasType = require(language_like_module).hasType
return self:hasType(...)
end
function WritingSystem:getCategoryName(nocap)
local name = pluralize(self._data.category or self:getCanonicalName())
if not nocap then
name = mw.getContentLanguage():ucfirst(name)
end
return name
end
function WritingSystem:makeCategoryLink()
return "[[:Category:" .. self:getCategoryName() .. "|" .. self:getDisplayForm() .. "]]"
end
--[==[Returns the Wikidata item id for the writing system or <code>nil</code>. This corresponds to the the second field in the data modules.]==]
function WritingSystem:getWikidataItem()
WritingSystem.getWikidataItem = require(language_like_module).getWikidataItem
return self:getWikidataItem()
end
function WritingSystem:getWikipediaArticle(noCategoryFallback, project)
WritingSystem.getWikipediaArticle = require(language_like_module).getWikipediaArticle
return self:getWikipediaArticle(noCategoryFallback, project)
end
--[==[Returns the name of the Wikimedia Commons category page for the writing system.]==]
function WritingSystem:getCommonsCategory()
WritingSystem.getCommonsCategory = require(language_like_module).getCommonsCategory
return self:getCommonsCategory()
end
function WritingSystem:getData()
return self._data
end
--[==[Returns the name of the module containing the writing system's data. Currently, this is always [[Module:writing systems/data]].]==]
function WritingSystem:getDataModuleName()
return writing_systems_data_module
end
function WritingSystem:toJSON(opts)
local ret = {
canonicalName = self:getCanonicalName(),
categoryName = self:getCategoryName("nocap"),
code = self:getCode(),
aliases = self:getAliases(),
varieties = self:getVarieties(),
otherNames = self:getOtherNames(),
type = keys_to_list(self:getTypes()),
wikidataItem = self:getWikidataItem(),
wikipediaArticle = self:getWikipediaArticle(true),
}
-- Use `deep_copy` when returning a table, so that there are no editing restrictions imposed by `mw.loadData`.
return opts and opts.lua_table and deep_copy(ret) or to_json(ret, opts)
end
function export.makeObject(code, data)
local data_type = type(data)
if data_type ~= "table" then
error(("bad argument #2 to 'makeObject' (table expected, got %s)"):format(data_type))
end
return setmetatable({_data = data, _code = code}, WritingSystem)
end
make_object = export.makeObject
function export.getByCode(code)
local data = (writing_systems_data or get_writing_systems_data())[code]
return data ~= nil and make_object(code, data) or nil
end
export.getByCanonicalName = export.getByCode
return export
ax1hnc29667djiuoxujcsie1pgnpmyb
Mòideal:ja/data
828
16849
86391
2026-07-23T04:36:26Z
Altronic
4137
Copy from English Wiktionary
86391
Scribunto
text/plain
local ucfirst = require("Module:string utilities").ucfirst
local tostring = tostring
local ones_position_ord = require("Module:ConvertNumeric").ones_position_ord
local data = {}
-- equivalent romaji = katakana pairs, r=k or rk
data.rk={
['wyu']='ウュ',['vyu']='ヴュ',['vyo']='ヴョ',['vye']='ヴィェ',['vya']='ヴャ',['tyu']='テュ',['ryu']='リュ',['ryo']='リョ',['rye']='リェ',['rya']='リャ',['pyu']='ピュ',['pyo']='ピョ',['pye']='ピェ',['pya']='ピャ',['nyu']='ニュ',['nyo']='ニョ',['nye']='ニェ',['nya']='ニャ',['myu']='ミュ',['myo']='ミョ',['mye']='ミェ',['mya']='ミャ',['kyu']='キュ',['kyo']='キョ',['kye']='キェ',['kya']='キャ',['kwo']='クォ',['kwi']='クィ',['kwe']='クェ',['kwa']='クァ',['kwa']='クヮ',['hyu']='ヒュ',['hyo']='ヒョ',['hye']='ヒェ',['hya']='ヒャ',['gyu']='ギュ',['gyo']='ギョ',['gye']='ギェ',['gya']='ギャ',['gwo']='グォ',['gwi']='グィ',['gwe']='グェ',['gwa']='グァ',['gwa']='グヮ',['fyu']='フュ',['fyo']='フョ',['fye']='フィェ',['fya']='フャ',['dyu']='デュ',['byu']='ビュ',['byo']='ビョ',['bye']='ビェ',['bya']='ビャ',['zu']='ズ',['zo']='ゾ',['zi']='ズィ',['ze']='ゼ',['za']='ザ',['yu']='ユ',['yo']='ヨ',['yi']='イィ',['ye']='イェ',['ya']='ヤ',['wu']='ウゥ',['wo']='ウォ',['wi']='ウィ',['we']='ウェ',['wa']='ワ',['vu']='ヴ',['vo']='ヴォ',['vi']='ヴィ',['ve']='ヴェ',['va']='ヴァ',['tu']='トゥ',['to']='ト',['ti']='ティ',['te']='テ',['ta']='タ',['su']='ス',['so']='ソ',['si']='スィ',['se']='セ',['sa']='サ',['ru']='ル',['ro']='ロ',['ri']='リ',['re']='レ',['ra']='ラ',['pu']='プ',['po']='ポ',['pi']='ピ',['pe']='ペ',['pa']='パ',['mu']='ム',['mo']='モ',['mi']='ミ',['me']='メ',['ma']='マ',['lu']='ル゚',['lo']='ロ゚',['li']='リ゚',['le']='レ゚',['la']='ラ゚',['ku']='ク',['ko']='コ',['ki']='キ',['ke']='ケ',['ka']='カ',['ju']='ジュ',['jo']='ジョ',['ji']='ジ',['je']='ジェ',['ja']='ジャ',['hu']='ホゥ',['ho']='ホ',['hi']='ヒ',['he']='ヘ',['ha']='ハ',['gu']='グ',['go']='ゴ',['gi']='ギ',['ge']='ゲ',['ga']='ガ',['fu']='フ',['fo']='フォ',['fi']='フィ',['fe']='フェ',['fa']='ファ',['du']='ドゥ',['do']='ド',['di']='ディ',['de']='デ',['da']='ダ',['bu']='ブ',['bo']='ボ',['bi']='ビ',['be']='ベ',['ba']='バ'
}
data.long_vowels_hira = {
a = "あ", i = "い", u = "う", e = "え", o = "お", n = "ん"
}
data.long_vowels_kata = {
a = "ア", i = "イ", u = "ウ", e = "エ", o = "オ", n = "ン"
}
data.voice_marks = {
["゙"] = "゙", ["゚"] = "゚",
["゛"] = "゙", ["゜"] = "゚",
["゙"] = "゙", ["゚"] = "゚",
}
-- Note: only includes those which can't be generated via codepoint shift.
data.hira_to_kata = {
["𛀁"] = "𛄡", ["𛀆"] = "𛄠", ["𛄟"] = "𛄢", ["𛄲"] = "𛅕",
}
-- Note: only includes those which can't be generated via codepoint shift.
data.kata_to_hira = {
["𛀀"] = "え", ["𛄠"] = "𛀆", ["𛄡"] = "𛀁", ["𛄢"] = "𛄟", ["𛅕"] = "𛄲",
}
local grades = {
[7] = "jōyō kanji",
[8] = "jinmeiyō kanji",
[9] = "hyōgai kanji",
}
local grade_labels = {
[7] = "S",
[8] = "J",
[9] = "H",
}
local grade_links = {
[7] = "[[w:Jōyō kanji|Jōyō kanji]]",
[8] = "[[w:Jinmeiyō kanji|Jinmeiyō kanji]]",
[9] = "[[w:Hyōgai kanji|Hyōgai kanji]]",
}
for i = 1, 6 do
local grade = ones_position_ord[i] .. " grade"
grades[i] = ones_position_ord[i] .. " grade kanji"
grade_labels[i] = tostring(i)
grade_links[i] = "[[w:Kyōiku kanji|" .. ucfirst(grade) .. " kyōiku kanji]]"
end
data.grades = grades
data.grade_labels = grade_labels
data.grade_links = grade_links
data.grade_kanji = {
[1] = -- Grade 1
"一二三四五六七八九十百千上下左右中大小月日年早木林山川土空田天生花草虫犬人名女男子目耳口手足見音力気円入出立休先夕本文字学校村町森正水火玉王石竹糸貝車金雨赤青白",
[2] = -- Grade 2
"数多少万半形太細広長点丸交光角計直線矢弱強高同親母父姉兄弟妹自友体毛頭顔首心時曜朝昼夜分週春夏秋冬今新古間方北南東西遠近前後内外場地国園谷野原里市京風雪雲池海岩星室戸家寺通門道話言答声聞語読書記紙画絵図工教晴思考知才理算作元食肉馬牛魚鳥羽鳴麦米茶色黄黒来行帰歩走止活店買売午汽弓回会組船明社切電毎合当台楽公引科歌刀番用何",
[3] = -- Grade 3
"丁世両主乗予事仕他代住使係倍全具写列助勉動勝化区医去反取受号向君味命和品員商問坂央始委守安定実客宮宿寒対局屋岸島州帳平幸度庫庭式役待急息悪悲想意感所打投拾持指放整旅族昔昭暑暗曲有服期板柱根植業様横橋次歯死氷決油波注泳洋流消深温港湖湯漢炭物球由申界畑病発登皮皿相県真着短研礼神祭福秒究章童笛第筆等箱級終緑練羊美習者育苦荷落葉薬血表詩調談豆負起路身転軽農返追送速進遊運部都配酒重鉄銀開院陽階集面題飲館駅鼻",
[4] = -- Grade 4
"不争井付令以仲伝位低佐例便信倉候借健側働億兆児共兵典冷初別利刷副功加努労勇包卒協単博印参司各周唱器固城埼塩変夫失奈好媛季孫完官害富察岐岡崎巣差希席帯底府康建径徒徳必念愛成戦折挙改敗散料旗昨景最望未末札材束松果栃栄案梅梨械極標機欠残氏民求沖治法泣浅浴清満滋漁潟灯無然焼照熊熱牧特産的省祝票種積競笑管節約結給続縄置老臣良芸芽英茨菜街衣要覚観訓試説課議貨賀軍輪辞辺連達選郡群量録鏡関阜阪陸隊静順願類飛飯養香験鹿",
[5] = -- Grade 5
"久仏仮件任似余価保修個停備像再刊判制則効務勢厚句可史告喜営因団囲圧在均型基堂報境墓増士夢妻婦容寄導居属布師常幹序弁張往得復志応快性情態慣技招授採接提損支政故救断旧易暴条枝査格桜検構武歴殺毒比永河液混減測準演潔災燃版犯状独率現留略益眼破確示祖禁移程税築粉精紀素経統絶綿総編績織罪義耕職肥能脈興舎航術衛製複規解設許証評講謝識護豊象財貧責貯貸費貿資賛賞質輸述迷逆造過適酸鉱銅防限険際雑非領額飼",
[6] = -- Grade 6
"並乱乳亡仁供俳俵値傷優党冊処券刻割創劇勤危卵厳収后否吸呼善困垂域奏奮姿存孝宅宇宗宙宝宣密寸専射将尊就尺届展層己巻幕干幼庁座延律従忘忠恩憲我批承担拝拡捨探推揮操敬敵映晩暖暮朗机枚染株棒模権樹欲段沿泉洗派済源潮激灰熟片班異疑痛皇盛盟看砂磁私秘穀穴窓筋策簡糖系紅納純絹縦縮署翌聖肺胃背胸脳腸腹臓臨至舌若著蒸蔵蚕衆裁装裏補視覧討訪訳詞誌認誕誠誤論諸警貴賃退遺郵郷針銭鋼閉閣降陛除障難革頂預骨",
[7] = -- Secondary school
"亜哀挨曖握扱宛嵐依威為畏尉萎偉椅彙違維慰緯壱逸芋咽姻淫陰隠韻唄鬱畝浦詠影鋭疫悦越謁閲炎怨宴援煙猿鉛縁艶汚凹押旺欧殴翁奥憶臆虞乙俺卸穏佳苛架華菓渦嫁暇禍靴寡箇稼蚊牙瓦雅餓介戒怪拐悔皆塊楷潰壊懐諧劾崖涯慨蓋該概骸垣柿核殻郭較隔獲嚇穫岳顎掛括喝渇葛滑褐轄且釜鎌刈甘汗缶肝冠陥乾勘患貫喚堪換敢棺款閑勧寛歓監緩憾還環韓艦鑑含玩頑企伎忌奇祈軌既飢鬼亀幾棋棄毀畿輝騎宜偽欺儀戯擬犠菊吉喫詰却脚虐及丘朽臼糾嗅窮巨拒拠虚距御凶叫狂享況峡挟狭恐恭脅矯響驚仰暁凝巾斤菌琴僅緊錦謹襟吟駆惧愚偶遇隅串屈掘窟繰勲薫刑茎契恵啓掲渓蛍傾携継詣慶憬稽憩鶏迎鯨隙撃桁傑肩倹兼剣拳軒圏堅嫌献遣賢謙鍵繭顕懸幻玄弦舷股虎孤弧枯雇誇鼓錮顧互呉娯悟碁勾孔巧甲江坑抗攻更拘肯侯恒洪荒郊貢控梗喉慌硬絞項溝綱酵稿衡購乞拷剛傲豪克酷獄駒込頃昆恨婚痕紺魂墾懇沙唆詐鎖挫采砕宰栽彩斎債催塞歳載剤削柵索酢搾錯咲刹拶撮擦桟惨傘斬暫旨伺刺祉肢施恣脂紫嗣雌摯賜諮侍慈餌璽軸𠮟疾執湿嫉漆芝赦斜煮遮邪蛇酌釈爵寂朱狩殊珠腫趣寿呪需儒囚舟秀臭袖羞愁酬醜蹴襲汁充柔渋銃獣叔淑粛塾俊瞬旬巡盾准殉循潤遵庶緒如叙徐升召匠床抄肖尚昇沼宵症祥称渉紹訟掌晶焦硝粧詔奨詳彰憧衝償礁鐘丈冗浄剰畳壌嬢錠譲醸拭殖飾触嘱辱尻伸芯辛侵津唇娠振浸紳診寝慎審震薪刃尽迅甚陣尋腎須吹炊帥粋衰酔遂睡穂随髄枢崇据杉裾瀬是姓征斉牲凄逝婿誓請醒斥析脊隻惜戚跡籍拙窃摂仙占扇栓旋煎羨腺詮践箋潜遷薦繊鮮禅漸膳繕狙阻租措粗疎訴塑遡礎双壮荘捜挿桑掃曹曽爽喪痩葬僧遭槽踪燥霜騒藻憎贈即促捉俗賊遜汰妥唾堕惰駄耐怠胎泰堆袋逮替滞戴滝択沢卓拓託濯諾濁但脱奪棚誰丹旦胆淡嘆端綻鍛弾壇恥致遅痴稚緻畜逐蓄秩窒嫡抽衷酎鋳駐弔挑彫眺釣貼超跳徴嘲澄聴懲勅捗沈珍朕陳鎮椎墜塚漬坪爪鶴呈廷抵邸亭貞帝訂逓偵堤艇締諦泥摘滴溺迭哲徹撤添塡殿斗吐妬途渡塗賭奴怒到逃倒凍唐桃透悼盗陶塔搭棟痘筒稲踏謄藤闘騰洞胴瞳峠匿督篤凸突屯豚頓貪鈍曇丼那謎鍋軟尼弐匂虹尿妊忍寧捻粘悩濃把覇婆罵杯排廃輩培陪媒賠伯拍泊迫剝舶薄漠縛爆箸肌鉢髪伐抜罰閥氾帆汎伴畔般販斑搬煩頒範繁藩蛮盤妃彼披卑疲被扉碑罷避尾眉微膝肘匹泌姫漂苗描猫浜賓頻敏瓶扶怖附訃赴浮符普腐敷膚賦譜侮舞封伏幅覆払沸紛雰噴墳憤丙併柄塀幣弊蔽餅壁璧癖蔑偏遍哺捕舗募慕簿芳邦奉抱泡胞俸倣峰砲崩蜂飽褒縫乏忙坊妨房肪某冒剖紡傍帽貌膨謀頰朴睦僕墨撲没勃堀奔翻凡盆麻摩磨魔昧埋膜枕又抹慢漫魅岬蜜妙眠矛霧娘冥銘滅免麺茂妄盲耗猛網黙紋冶弥厄躍闇喩愉諭癒唯幽悠湧猶裕雄誘憂融与誉妖庸揚揺溶腰瘍踊窯擁謡抑沃翼拉裸羅雷頼絡酪辣濫藍欄吏痢履璃離慄柳竜粒隆硫侶虜慮了涼猟陵僚寮療瞭糧厘倫隣瑠涙累塁励戻鈴零霊隷齢麗暦劣烈裂恋廉錬呂炉賂露弄郎浪廊楼漏籠麓賄脇惑枠湾腕",
[8] = -- Jinmeiyō
"丑丞乃之乎也云亘亙些亦亥亨亮仔伊伍伽佃佑伶侃侑俄俠俣俐倭俱倦倖偲傭儲允兎兜其冴凌凜凛凧凪凰凱函劉劫勁勺勿匁匡廿卜卯卿厨厩叉叡叢叶只吾吞吻哉哨啄哩喬喧喰喋嘩嘉嘗噌噂圃圭坐尭堯坦埴堰堺堵塙壕壬夷奄奎套娃姪姥娩嬉孟宏宋宕宥寅寓寵尖尤屑峨峻崚嵯嵩嶺巌巖巫已巳巴巷巽帖幌幡庄庇庚庵廟廻弘弛彗彦彪彬徠忽怜恢恰恕悌惟惚悉惇惹惺惣慧憐戊或戟托按挺挽掬捲捷捺捧掠揃摑摺撒撰撞播撫擢孜敦斐斡斧斯於旭昂昊昏昌昴晏晃晄晒晋晟晦晨智暉暢曙曝曳朋朔杏杖杜李杭杵杷枇柑柴柘柊柏柾柚桧檜栞桔桂栖桐栗梧梓梢梛梯桶梶椛梁棲椋椀楯楚楕椿楠楓椰楢楊榎樺榊榛槙槇槍槌樫槻樟樋橘樽橙檎檀櫂櫛櫓欣欽歎此殆毅毘毬汀汝汐汲沌沓沫洸洲洵洛浩浬淵淳渚淀淋渥渾湘湊湛溢滉溜漱漕漣澪濡瀕灘灸灼烏焰焚煌煤煉熙燕燎燦燭燿爾牒牟牡牽犀狼猪獅玖珂珈珊珀玲琢琉瑛琥琶琵琳瑚瑞瑶瑳瓜瓢甥甫畠畢疋疏皐皓眸瞥矩砦砥砧硯碓碗碩碧磐磯祇祢禰祐祷禱禄祿禎禽禾秦秤稀稔稟稜穣穰穹穿窄窪窺竣竪竺竿笈笹笙笠筈筑箕箔篇篠簞簾籾粥粟糊紘紗紐絃紬絆絢綺綜綴緋綾綸縞徽繫繡纂纏羚翔翠耀而耶耽聡肇肋肴胤胡脩腔脹膏臥舜舵芥芹芭芙芦苑茄苔苺茅茉茸茜莞荻莫莉菅菫菖萄菩萌萠萊菱葦葵萱葺萩董葡蓑蒔蒐蒼蒲蒙蓉蓮蔭蔣蔦蓬蔓蕎蕨蕉蕃蕪薙蕾蕗藁薩蘇蘭蝦蝶螺蟬蟹蠟衿袈袴裡裟裳襖訊訣註詢詫誼諏諄諒謂諺讃豹貰賑赳跨蹄蹟輔輯輿轟辰辻迂迄辿迪迦這逞逗逢遥遙遁遼邑祁郁鄭酉醇醐醍醬釉釘釧銑鋒鋸錘錐錆錫鍬鎧閃閏閤阿陀隈隼雀雁雛雫霞靖鞄鞍鞘鞠鞭頁頌頗顚颯饗馨馴馳駕駿驍魁魯鮎鯉鯛鰯鱒鱗鳩鳶鳳鴨鴻鵜鵬鷗鷲鷺鷹麒麟麿黎黛鼎亞惡爲榮衞圓緣薗應櫻奧橫溫價壞懷樂渴卷陷寬氣僞戲虛峽狹曉駈勳薰惠揭鷄藝擊縣儉劍險圈檢顯驗嚴廣恆黃國黑碎雜兒濕實壽收從澁獸縱緖敍將涉燒奬條狀乘淨剩疊孃讓釀眞寢愼盡粹醉穗瀨齊靜攝專戰纖禪壯爭莊搜巢曾裝瘦騷增藏臟卽帶滯瀧單團彈晝鑄廳徵聽鎭轉傳嶋燈盜稻德拜盃賣髮拔晚祕冨拂佛步峯飜每萬默埜彌藥與搖樣謠來賴覽龍凉綠淚壘禮曆歷鍊郞錄",
}
return data
i5ffndztryuboqaprs879vqcokih6sj
Mòideal:ConvertNumeric
828
16850
86392
2026-07-23T04:37:16Z
Altronic
4137
Copy from English Wiktionary
86392
Scribunto
text/plain
local export = {} -- functions that can be called from another module
-- Module for converting between different representations of numbers.
-- For unit tests see: [[Module:ConvertNumeric/testcases]]
-- When editing, preview with: Module:ConvertNumeric/testcases/documentation
export.ones_position = {
[0] = 'zero',
[1] = 'one',
[2] = 'two',
[3] = 'three',
[4] = 'four',
[5] = 'five',
[6] = 'six',
[7] = 'seven',
[8] = 'eight',
[9] = 'nine',
[10] = 'ten',
[11] = 'eleven',
[12] = 'twelve',
[13] = 'thirteen',
[14] = 'fourteen',
[15] = 'fifteen',
[16] = 'sixteen',
[17] = 'seventeen',
[18] = 'eighteen',
[19] = 'nineteen'
}
export.ones_position_ord = {
[0] = 'zeroth',
[1] = 'first',
[2] = 'second',
[3] = 'third',
[4] = 'fourth',
[5] = 'fifth',
[6] = 'sixth',
[7] = 'seventh',
[8] = 'eighth',
[9] = 'ninth',
[10] = 'tenth',
[11] = 'eleventh',
[12] = 'twelfth',
[13] = 'thirteenth',
[14] = 'fourteenth',
[15] = 'fifteenth',
[16] = 'sixteenth',
[17] = 'seventeenth',
[18] = 'eighteenth',
[19] = 'nineteenth'
}
export.ones_position_plural = {
[0] = 'zeros',
[1] = 'ones',
[2] = 'twos',
[3] = 'threes',
[4] = 'fours',
[5] = 'fives',
[6] = 'sixes',
[7] = 'sevens',
[8] = 'eights',
[9] = 'nines',
[10] = 'tens',
[11] = 'elevens',
[12] = 'twelves',
[13] = 'thirteens',
[14] = 'fourteens',
[15] = 'fifteens',
[16] = 'sixteens',
[17] = 'seventeens',
[18] = 'eighteens',
[19] = 'nineteens'
}
export.tens_position = {
[2] = 'twenty',
[3] = 'thirty',
[4] = 'forty',
[5] = 'fifty',
[6] = 'sixty',
[7] = 'seventy',
[8] = 'eighty',
[9] = 'ninety'
}
export.tens_position_ord = {
[2] = 'twentieth',
[3] = 'thirtieth',
[4] = 'fortieth',
[5] = 'fiftieth',
[6] = 'sixtieth',
[7] = 'seventieth',
[8] = 'eightieth',
[9] = 'ninetieth'
}
export.tens_position_plural = {
[2] = 'twenties',
[3] = 'thirties',
[4] = 'forties',
[5] = 'fifties',
[6] = 'sixties',
[7] = 'seventies',
[8] = 'eighties',
[9] = 'nineties'
}
export.groups = {
[1] = 'thousand',
[2] = 'million',
[3] = 'billion',
[4] = 'trillion',
[5] = 'quadrillion',
[6] = 'quintillion',
[7] = 'sextillion',
[8] = 'septillion',
[9] = 'octillion',
[10] = 'nonillion',
[11] = 'decillion',
[12] = 'undecillion',
[13] = 'duodecillion',
[14] = 'tredecillion',
[15] = 'quattuordecillion',
[16] = 'quindecillion',
[17] = 'sexdecillion',
[18] = 'septendecillion',
[19] = 'octodecillion',
[20] = 'novemdecillion',
[21] = 'vigintillion',
[22] = 'unvigintillion',
[23] = 'duovigintillion',
[24] = 'tresvigintillion',
[25] = 'quattuorvigintillion',
[26] = 'quinquavigintillion',
[27] = 'sesvigintillion',
[28] = 'septemvigintillion',
[29] = 'octovigintillion',
[30] = 'novemvigintillion',
[31] = 'trigintillion',
[32] = 'untrigintillion',
[33] = 'duotrigintillion',
[34] = 'trestrigintillion',
[35] = 'quattuortrigintillion',
[36] = 'quinquatrigintillion',
[37] = 'sestrigintillion',
[38] = 'septentrigintillion',
[39] = 'octotrigintillion',
[40] = 'noventrigintillion',
[41] = 'quadragintillion',
[51] = 'quinquagintillion',
[61] = 'sexagintillion',
[71] = 'septuagintillion',
[81] = 'octogintillion',
[91] = 'nonagintillion',
[101] = 'centillion',
[102] = 'uncentillion',
[103] = 'duocentillion',
[104] = 'trescentillion',
[111] = 'decicentillion',
[112] = 'undecicentillion',
[121] = 'viginticentillion',
[122] = 'unviginticentillion',
[131] = 'trigintacentillion',
[141] = 'quadragintacentillion',
[151] = 'quinquagintacentillion',
[161] = 'sexagintacentillion',
[171] = 'septuagintacentillion',
[181] = 'octogintacentillion',
[191] = 'nonagintacentillion',
[201] = 'ducentillion',
[301] = 'trecentillion',
[401] = 'quadringentillion',
[501] = 'quingentillion',
[601] = 'sescentillion',
[701] = 'septingentillion',
[801] = 'octingentillion',
[901] = 'nongentillion',
[1001] = 'millinillion',
}
export.roman_numerals = {
I = 1,
V = 5,
X = 10,
L = 50,
C = 100,
D = 500,
M = 1000
}
-- Converts a given valid roman numeral (and some invalid roman numerals) to a number. Returns -1, errorstring on error
function export.roman_to_numeral(roman)
if type(roman) ~= "string" then return -1, "roman numeral not a string" end
local rev = roman:reverse()
local raising = true
local last = 0
local result = 0
for i = 1, #rev do
local c = rev:sub(i, i)
local next = export.roman_numerals[c]
if next == nil then return -1, "roman numeral contains illegal character " .. c end
if next > last then
result = result + next
raising = true
elseif next < last then
result = result - next
raising = false
elseif raising then
result = result + next
else
result = result - next
end
last = next
end
return result
end
-- Converts a given integer between 0 and 100 to English text (e.g. 47 -> forty-seven)
local function numeral_to_english_less_100(num, ordinal, plural, zero)
local terminal_ones, terminal_tens
if ordinal then
terminal_ones = export.ones_position_ord
terminal_tens = export.tens_position_ord
elseif plural then
terminal_ones = export.ones_position_plural
terminal_tens = export.tens_position_plural
else
terminal_ones = export.ones_position
terminal_tens = export.tens_position
end
if num == 0 and zero ~= nil then
return zero
elseif num < 20 then
return terminal_ones[num]
elseif num % 10 == 0 then
return terminal_tens[num / 10]
else
return export.tens_position[math.floor(num / 10)] .. '-' .. terminal_ones[num % 10]
end
end
local function standard_suffix(ordinal, plural)
if ordinal then return 'th' end
if plural then return 's' end
return ''
end
-- Converts a given integer (in string form) between 0 and 1000 to English text (e.g. 47 -> forty-seven)
local function numeral_to_english_less_1000(num, use_and, ordinal, plural, zero)
num = tonumber(num)
if num < 100 then
return numeral_to_english_less_100(num, ordinal, plural, zero)
elseif num % 100 == 0 then
return export.ones_position[num/100] .. ' hundred' .. standard_suffix(ordinal, plural)
else
return export.ones_position[math.floor(num/100)] .. ' hundred ' .. (use_and and 'and ' or '') .. numeral_to_english_less_100(num % 100, ordinal, plural, zero)
end
end
-- Converts a number expressed as a string in scientific notation to a string in standard decimal notation
-- e.g. 1.23E5 -> 123000, 1.23E-5 = .0000123. Conversion is exact, no rounding is performed.
local function scientific_notation_to_decimal(num)
local exponent, subs = num:gsub("^%-?%d*%.?%d*%-?[Ee]([+%-]?%d+)$", "%1")
if subs == 0 then return num end -- Input not in scientific notation, just return unmodified
exponent = tonumber(exponent)
local negative = num:find("^%-")
local _, decimal_pos = num:find("%.")
-- Mantissa will consist of all decimal digits with no decimal point
local mantissa = num:gsub("^%-?(%d*)%.?(%d*)%-?[Ee][+%-]?%d+$", "%1%2")
if negative and decimal_pos then decimal_pos = decimal_pos - 1 end
if not decimal_pos then decimal_pos = #mantissa + 1 end
-- Remove leading zeros unless decimal point is in first position
while decimal_pos > 1 and mantissa:sub(1,1) == '0' do
mantissa = mantissa:sub(2)
decimal_pos = decimal_pos - 1
end
-- Shift decimal point right for exponent > 0
while exponent > 0 do
decimal_pos = decimal_pos + 1
exponent = exponent - 1
if decimal_pos > #mantissa + 1 then mantissa = mantissa .. '0' end
-- Remove leading zeros unless decimal point is in first position
while decimal_pos > 1 and mantissa:sub(1,1) == '0' do
mantissa = mantissa:sub(2)
decimal_pos = decimal_pos - 1
end
end
-- Shift decimal point left for exponent < 0
while exponent < 0 do
if decimal_pos == 1 then
mantissa = '0' .. mantissa
else
decimal_pos = decimal_pos - 1
end
exponent = exponent + 1
end
-- Insert decimal point in correct position and return
return (negative and '-' or '') .. mantissa:sub(1, decimal_pos - 1) .. '.' .. mantissa:sub(decimal_pos)
end
-- Rounds a number to the nearest integer (NOT USED)
local function round_num(x)
if x%1 >= 0.5 then
return math.ceil(x)
else
return math.floor(x)
end
end
-- Rounds a number to the nearest two-word number (round = up, down, or "on" for round to nearest)
-- Numbers with two digits before the decimal will be rounded to an integer as specified by round.
-- Larger numbers will be rounded to a number with only one nonzero digit in front and all other digits zero.
-- Negative sign is preserved and does not count towards word limit.
local function round_for_english(num, round)
-- If an integer with at most two digits, just return
if num:find("^%-?%d?%d%.?$") then return num end
local negative = num:find("^%-")
if negative then
-- We're rounding magnitude so flip it
if round == 'up' then round = 'down' elseif round == 'down' then round = 'up' end
end
-- If at most two digits before decimal, round to integer and return
local _, _, small_int, trailing_digits, round_digit = num:find("^%-?(%d?%d?)%.((%d)%d*)$")
if small_int then
if small_int == '' then small_int = '0' end
if (round == 'up' and trailing_digits:find('[1-9]')) or (round == 'on' and tonumber(round_digit) >= 5) then
small_int = tostring(tonumber(small_int) + 1)
end
return (negative and '-' or '') .. small_int
end
-- When rounding up, any number with > 1 nonzero digit will round up (e.g. 1000000.001 rounds up to 2000000)
local nonzero_digits = 0
for digit in num:gmatch("[1-9]") do
nonzero_digits = nonzero_digits + 1
end
num = num:gsub("%.%d*$", "") -- Remove decimal part
-- Second digit used to determine which way to round lead digit
local _, _, lead_digit, round_digit, round_digit_2, rest = num:find("^%-?(%d)(%d)(%d)(%d*)$")
if tonumber(lead_digit .. round_digit) < 20 and (1 + #rest) % 3 == 0 then
-- In English numbers < 20 are one word so put 2 digits in lead and round based on 3rd
lead_digit = lead_digit .. round_digit
round_digit = round_digit_2
else
rest = round_digit_2 .. rest
end
if (round == 'up' and nonzero_digits > 1) or (round == 'on' and tonumber(round_digit) >= 5) then
lead_digit = tostring(tonumber(lead_digit) + 1)
end
-- All digits but lead digit will turn to zero
rest = rest:gsub("%d", "0")
return (negative and '-' or '') .. lead_digit .. '0' .. rest
end
local denominators = {
[2] = { 'half', plural = 'halves' },
[3] = { 'third' },
[4] = { 'quarter', us = 'fourth' },
[5] = { 'fifth' },
[6] = { 'sixth' },
[8] = { 'eighth' },
[9] = { 'ninth' },
[10] = { 'tenth' },
[16] = { 'sixteenth' },
}
-- Return status, fraction where:
-- status is a string:
-- "finished" if there is a fraction with no whole number;
-- "ok" if fraction is empty or valid;
-- "unsupported" if bad fraction;
-- fraction is a string giving (numerator / denominator) as English text, or is "".
-- Only unsigned fractions with a very limited range of values are supported,
-- except that if whole is empty, the numerator can use "-" to indicate negative.
-- whole (string or nil): nil or "" if no number before the fraction
-- numerator (string or nil): numerator, if any (default = 1 if a denominator is given)
-- denominator (string or nil): denominator, if any
-- sp_us (boolean): true if sp=us
-- negative_word (string): word to use for negative sign, if whole is empty
-- use_one (boolean): false: 2+1/2 → "two and a half"; true: "two and one-half"
local function fraction_to_english(whole, numerator, denominator, sp_us, negative_word, use_one)
if numerator or denominator then
local finished = (whole == nil or whole == '')
local sign = ''
if numerator then
if finished and numerator:sub(1, 1) == '-' then
numerator = numerator:sub(2)
sign = negative_word .. ' '
end
else
numerator = '1'
end
if not numerator:match('^%d+$') or not denominator or not denominator:match('^%d+$') then
return 'unsupported', ''
end
numerator = tonumber(numerator)
denominator = tonumber(denominator)
local dendata = denominators[denominator]
if not (dendata and 1 <= numerator and numerator <= 99) then
return 'unsupported', ''
end
local numstr, denstr
local sep = '-'
if numerator == 1 then
denstr = sp_us and dendata.us or dendata[1]
if finished or use_one then
numstr = 'one'
elseif denstr:match('^[aeiou]') then
numstr = 'an'
sep = ' '
else
numstr = 'a'
sep = ' '
end
else
numstr = numeral_to_english_less_100(numerator)
denstr = dendata.plural
if not denstr then
denstr = (sp_us and dendata.us or dendata[1]) .. 's'
end
end
if finished then
return 'finished', sign .. numstr .. sep .. denstr
end
return 'ok', ' and ' .. numstr .. sep .. denstr
end
return 'ok', ''
end
-- Takes a decimal number and converts it to English text.
-- Return nil if a fraction cannot be converted (only some numbers are supported for fractions).
-- num (string or nil): the number to convert.
-- Can be an arbitrarily large decimal, such as "-123456789123456789.345", and
-- can use scientific notation (e.g. "1.23E5").
-- May fail for very large numbers not listed in "groups" such as "1E4000".
-- num is nil if there is no whole number before a fraction.
-- numerator (string or nil): numerator of fraction (nil if no fraction)
-- denominator (string or nil): denominator of fraction (nil if no fraction)
-- capitalize (boolean): whether to capitalize the result (e.g. 'One' instead of 'one')
-- use_and (boolean): whether to use the word 'and' between tens/ones place and higher places
-- hyphenate (boolean): whether to hyphenate all words in the result, useful for use as an adjective
-- ordinal (boolean): whether to produce an ordinal (e.g. 'first' instead of 'one')
-- plural (boolean): whether to pluralize the resulting number
-- links: nil: do not add any links; 'on': link "billion" and larger to Orders of magnitude article;
-- any other text: list of numbers to link (e.g. "billion,quadrillion")
-- negative_word: word to use for negative sign (typically 'negative' or 'minus'; nil to use default)
-- round: nil or '': no rounding; 'on': round to nearest two-word number; 'up'/'down': round up/down to two-word number
-- zero: word to use for value '0' (nil to use default)
-- use_one (boolean): false: 2+1/2 → "two and a half"; true: "two and one-half"
function export.spell_number(num, numerator, denominator, capitalize, use_and, hyphenate, ordinal, plural, links, negative_word, round, zero, use_one)
if type(num) == "number" then
num = tostring(num)
end
if not negative_word then
if use_and then
-- TODO Should 'minus' be used when do not have sp=us?
-- If so, need to update testcases, and need to fix "minus zero".
-- negative_word = 'minus'
negative_word = 'negative'
else
negative_word = 'negative'
end
end
local status, fraction_text = fraction_to_english(num, numerator, denominator, not use_and, negative_word, use_one)
if status == 'unsupported' then
return nil
end
if status == 'finished' then
-- Input is a fraction with no whole number.
-- Hack to avoid executing stuff that depends on num being a number.
local s = fraction_text
if hyphenate then s = s:gsub("%s", "-") end
if capitalize then s = s:gsub("^%l", string.upper) end
return s
end
num = scientific_notation_to_decimal(num)
if round and round ~= '' then
if round ~= 'on' and round ~= 'up' and round ~= 'down' then
error("Invalid rounding mode")
end
num = round_for_english(num, round)
end
-- Separate into negative sign, num (digits before decimal), decimal_places (digits after decimal)
local MINUS = '−' -- Unicode U+2212 MINUS SIGN (may be in values from [[Module:Convert]])
if num:sub(1, #MINUS) == MINUS then
num = '-' .. num:sub(#MINUS + 1) -- replace MINUS with '-'
elseif num:sub(1, 1) == '+' then
num = num:sub(2) -- ignore any '+'
end
local negative = num:find("^%-")
local decimal_places, subs = num:gsub("^%-?%d*%.(%d+)$", "%1")
if subs == 0 then decimal_places = nil end
num, subs = num:gsub("^%-?(%d*)%.?%d*$", "%1")
if num == '' and decimal_places then num = '0' end
if subs == 0 or num == '' then error("Invalid decimal numeral") end
-- For each group of 3 digits except the last one, print with appropriate group name (e.g. million)
local s = ''
while #num > 3 do
if s ~= '' then s = s .. ' ' end
local group_num = math.floor((#num - 1) / 3)
local group = export.groups[group_num]
local group_digits = #num - group_num*3
s = s .. numeral_to_english_less_1000(num:sub(1, group_digits), false, false, false, zero) .. ' '
if links and (((links == 'on' and group_num >= 3) or links:find(group)) and group_num <= 13) then
s = s .. '[[Orders_of_magnitude_(numbers)#10' .. group_num*3 .. '|' .. group .. ']]'
else
s = s .. group
end
num = num:sub(1 + group_digits)
num = num:gsub("^0*", "") -- Trim leading zeros
end
-- Handle final three digits of integer part
if s ~= '' and num ~= '' then
if #num <= 2 and use_and then
s = s .. ' and '
else
s = s .. ' '
end
end
if s == '' or num ~= '' then
s = s .. numeral_to_english_less_1000(num, use_and, ordinal, plural, zero)
elseif ordinal or plural then
-- Round numbers like "one million" take standard suffixes for ordinal/plural
s = s .. standard_suffix(ordinal, plural)
end
-- For decimal places (if any) output "point" followed by spelling out digit by digit
if decimal_places then
s = s .. ' point'
for i = 1, #decimal_places do
s = s .. ' ' .. export.ones_position[tonumber(decimal_places:sub(i,i))]
end
end
s = s:gsub("^%s*(.-)%s*$", "%1") -- Trim whitespace
if ordinal and plural then s = s .. 's' end -- s suffix works for all ordinals
if negative and s ~= zero then s = negative_word .. ' ' .. s end
s = s:gsub("negative zero", "zero")
s = s .. fraction_text
if hyphenate then s = s:gsub("%s", "-") end
if capitalize then s = s:gsub("^%l", string.upper) end
return s
end
-- Template-callable equivalent of export.spell_number().
function export.numeral_to_english(frame)
local args = frame.args
local num = args[1]
num = num:gsub("^%s*(.-)%s*$", "%1") -- Trim whitespace
num = num:gsub(",", "") -- Remove commas
num = num:gsub("^<span[^<>]*></span>", "") -- Generated by Template:age
if num ~= '' then -- a fraction may have an empty whole number
if not num:find("^%-?%d*%.?%d*%-?[Ee]?[+%-]?%d*$") then
-- Input not in a valid format, try to pass it through #expr to see
-- if that produces a number (e.g. "3 + 5" will become "8").
num = frame:preprocess('{{#expr: ' .. num .. '}}')
end
end
-- Pass args from frame to helper function
return export.spell_number(
num,
args['numerator'],
args['denominator'],
args['case'] == 'U' or args['case'] == 'u',
args['sp'] ~= 'us',
args['adj'] == 'on',
args['ord'] == 'on',
args['pl'] == 'on',
args['lk'],
args['negative'],
args['round'],
args['zero'],
args['one'] == 'one' -- experiment: using '|one=one' makes fraction 2+1/2 give "two and one-half" instead of "two and a half"
) or ''
end
---- recursive function for export.decToHex
local function decToHexDigit(dec)
local dig = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}
local div = math.floor(dec/16)
local mod = dec-(16*div)
if div >= 1 then return decToHexDigit(div)..dig[mod+1] else return dig[mod+1] end
end -- I think this is supposed to be done with a tail call but first I want something that works at all
---- finds all the decimal numbers in the input text and hexes each of them
function export.decToHex(frame)
local args=frame.args
local parent=frame.getParent(frame)
local pargs={}
if parent then pargs=parent.args end
local text=args[1] or pargs[1] or ""
local minlength=args.minlength or pargs.minlength or 1
minlength=tonumber(minlength)
local prowl=mw.ustring.gmatch(text,"(.-)(%d+)")
local output=""
repeat
local chaff,dec=prowl()
if not(dec) then break end
local hex=decToHexDigit(dec)
while (mw.ustring.len(hex)<minlength) do hex="0"..hex end
output=output..chaff..hex
until false
local chaff=mw.ustring.match(text,"(%D+)$") or ""
return output..chaff
end
return export
6lwds6uyagcyzxy7g3rno23lq4e6da2
Mòideal:ja/data/range
828
16851
86393
2026-07-23T04:38:33Z
Altronic
4137
Copy from English Wiktionary
86393
Scribunto
text/plain
local u = require("Module:string utilities").char
local range = {}
range.kanji =
u(0x2E80) .. "-" .. u(0x2FDF) .. -- CJK Unified Ideographs
u(0x4E00) .. "-" .. u(0x9FFF) .. -- CJK Unified Ideographs
u(0x3400) .. "-" .. u(0x4DBF) .. -- CJK Unified Ideographs Extension A
u(0xF900) .. "-" .. u(0xFAFF) .. -- CJK Compatibility Ideographs
u(0x20000) .. "-" .. u(0x2A6DF) .. -- CJK Unified Ideographs Extension B
u(0x2A700) .. "-" .. u(0x2EE5F) .. -- CJK Unified Ideographs Extension C-F & I
u(0x2F800) .. "-" .. u(0x2FA1F) .. -- CJK Compatibility Ideographs Supplement
u(0x30000) .. "-" .. u(0x323AF) .. -- CJK Unified Ideographs Extension C-F & I
u(0x323B0) .. "-" .. u(0x3347F) -- CJK Unified Ideographs Extension J
range.kana_combining_characters =
u(0x3099) .. "-" .. u(0x309C) .. -- Hiragana
u(0xFF9E) .. u(0xFF9F) .. -- Halfwidth and Fullwidth Forms
u(0x0305) .. u(0x0323) -- Combining Diacritical Marks
range.kana_overlap =
range.kana_combining_characters ..
"〰-〵" .. -- CJK Symbols and Punctuation
"ー" -- Katakana
local hiragana_exclusive =
"ぁ-ゖゝゞ" .. -- Hiragana
"𛀁𛀆𛄟" .. -- Kana Supplement + Kana Extended-A
"𛄲𛅐-𛅒" -- Small Kana Extension
range.hiragana = range.kana_overlap .. hiragana_exclusive
local katakana_exclusive =
"ァ-ヺヽヾ" .. -- Katakana
"ㇰ-ㇿ" .. -- Katakana Phonetic Extensions
u(0xFF66) .. "-" .. u(0xFF9D) .. -- Halfwidth and Fullwidth Forms
"𚿰-𚿾" .. -- Kana Extended-B
"𛀀𛄠-𛄢" .. -- Kana Supplement + Kana Extended-A
"𛅕𛅤-𛅧" -- Small Kana Extension
range.katakana = range.kana_overlap .. katakana_exclusive
range.hentaigana =
"𛀂-𛀅𛀇-𛄞" -- Kana Supplement + Kana Extended-A
range.kana = range.kana_overlap .. hiragana_exclusive .. katakana_exclusive .. range.hentaigana
-- Note: not other sutegana like っ, as they aren't submoraic.
range.submoraic_kana =
"ぁぃぅぇぉゃゅょゎ" .. -- Hiragana
"ァィゥェォャュョヮ" .. -- Katakana
"ァ-ョ" .. -- Halfwidth and Fullwidth Forms
"𛅐𛅑𛅒𛅤𛅥𛅦" -- Small Kana Extension
range.vowels = {
a = "ぁあかがさざただなはばぱまゃやらゎわァアカガサザタダナハバパマャヤラヮワヷ",
i = "ぃいきぎしじちぢにひびぴみ𛀆り𛅐ゐィイキギシジチヂニヒビピミ𛄠リ𛅤ヰヸ",
u = "ぅうゔくぐすずつづぬふぶぷむゅゆる𛄟ゥウヴクグスズツヅヌフブプムュユル𛄢",
e = "ぇえけげせぜてでねへべぺめ𛀁れ𛅑ゑェエ𛀀ケゲセゼテデネヘベペメ𛄡レ𛅥ヱヹ",
o = "ぉおこごそぞとどのほぼぽもょよろ𛅒をォオコゴソゾトドノホボポモョヨロ𛅦ヲヺ",
n = "んン"
}
range.ideograph =
"〃々-〇〱-〵〻〼" .. -- CJK Symbols and Punctuation
"㈠-㉟㊀-㋿" .. -- Enclosed CJK Letters and Months
"㍘-㏿" .. -- CJK Compatibility
"🈂-" -- Enclosed Ideographic Supplement
range.kana_graph =
"ゟヿ" .. -- Hiragana + Katakana
"㌀-㍗" .. -- CJK Compatibility
"🈀🈁" -- Enclosed Ideographic Supplement
range.punctuation =
" -。〈-】〔-〟〽" .. -- CJK Symbols and Punctuation
"゠・" .. -- Katakana
"!-/:-@[-`{-・¢-○" -- Halfwidth and Fullwidth Forms
range.latin = require("Module:scripts").getByCode("Latn"):getCharacters()
range.numbers =
"0-9" .. -- Basic Latin
"0-9" -- Halfwidth and Fullwidth Forms
return range
0akj99anu5qmk1fqilaviguuvbb3wyu
Mòideal:Hrkt-translit
828
16852
86394
2026-07-23T04:40:10Z
Altronic
4137
Copy from English Wiktionary
86394
Scribunto
text/plain
local concat = table.concat
local insert = table.insert
local load_data = mw.loadData
local toNFD = mw.ustring.toNFD
local umatch = mw.ustring.match
local m_ja = require("Module:ja")
local kata_to_hira = m_ja.kata_to_hira
local normalize_kana = m_ja.normalize_kana
local data_common
local glottal = "\1"
local disambig = "\2"
local cons = "b-df-hj-np-tvxz"
local export = {}
local function get_initial(text)
return umatch(text, "(.+)%f[" .. umatch(text, ".$") .. "]") or text
end
local function handle_initials(data, d_voicing, d_semivoicing, initials, checked)
if not data then
return
end
for k, v in pairs(data) do
if not checked[k] and umatch(v, "^%a+$") then
local initial = get_initial(v)
if initial:match("^[" .. cons .. "]+$") then
initials[initial] = true
end
local v_initial, sv_initial = d_voicing[initial], d_semivoicing[initial]
if v_initial and v_initial:match("^[" .. cons .. "]+$") then
initials[v_initial] = true
end
if sv_initial and sv_initial:match("^[" .. cons .. "]+$") then
initials[sv_initial] = true
end
end
checked[k] = true
end
end
function export.process_data(data, common)
local initials, checked, d_voicing, d_semivoicing = {}, {}, data.tr_voicing, data.tr_semivoicing
data.initials = initials
if not common then
data_common = data_common or load_data("Module:Hrkt-translit/data")
d_voicing = d_voicing or data_common.tr_voicing
d_semivoicing = d_semivoicing or data_common.tr_semivoicing
end
handle_initials(data.rom, d_voicing, d_semivoicing, initials, checked)
if not common then
handle_initials(data_common.rom, d_voicing, d_semivoicing, initials, checked)
end
return data
end
local function get_data(lang)
data_common = data_common or load_data("Module:Hrkt-translit/data")
local function inspect_table(t, ...)
for i = 1, select("#", ...) do
if type(t) == "table" then
t = t[select(i, ...)]
else return nil end
end
return t
end
if lang then
local name_data = "Module:Hrkt-translit/data/" .. lang
if package.loaders[2](name_data) then
local data_lang = load_data(name_data)
return function(...)
local item_lang, item_common = data_lang[...], data_common[...]
for i = 2, select("#", ...) do
local key = select(i, ...)
if type(item_lang) == "table" then
item_lang = item_lang[key]
else return inspect_table(item_common, select(i, ...)) end
if type(item_common) == "table" then
item_common = item_common[key]
else return inspect_table(item_lang, select(i + 1, ...)) end
end
if item_lang ~= nil then return item_lang else return item_common end
end
end
end
return function(...)
return inspect_table(data_common[...], select(2, ...))
end
end
local function do_voicing(i_last, result, result_sp, hist, d, key)
local text = result[i_last]
if not hist and result_sp[i_last] == "historical w" then
text = "w" .. text
end
return text:gsub("^" .. get_initial(text), d(key))
end
function export.tr(text, lang, sc, options)
if umatch(text, "[" .. mw.loadData("Module:ja/data/range").kanji .. "]") then
require("Module:debug").track("ja/invalid Hrkt")
end
options = options or {}
local result = {[0] = ""}
local result_sp = {}
local d = get_data(lang)
local function getlast(i_start, predicate_good, predicate_bad)
local in_xml = false
for i = i_start or #result, 1, -1 do
if in_xml then
if result[i] == "<" then in_xml = false end
elseif result[i] == ">" then
in_xml = true
else
if (predicate_bad or function(index)
return result_sp[index] == "stop"
end)(i) then break end
if (predicate_good or function(index)
return result[index]:len() > 0 and result_sp[index] ~= "'"
end)(i) then return i end
end
end
return 0
end
-- normalize long vowels and iteration marks
text = toNFD(kata_to_hira(normalize_kana(text)))
for c in text:gmatch(".[\128-\191]*") do
local rc = options.hist and d("rom_hist", c) or d("rom", c) or c
local rc_sp = d("rom_sp", c)
local i_last = getlast()
if options.keep_dot and c == "." then
rc = "."
elseif c:match("%a") then
rc_sp = "stop"
end
local repl_digraph = result_sp[i_last] ~= "split_v" and d("digraph", c, result[i_last])
if repl_digraph then
result[i_last], rc = repl_digraph, ""
result_sp[i_last], rc_sp = nil, nil
end
if not options.hist then --はへ
if d("flag_hahe", result_sp[i_last]) and (umatch(c, "[-~%.゙゚]") or rc:match("[-~%a" .. glottal .. "]")) then
result[i_last] = result_sp[i_last]
result_sp[i_last] = nil
end
if d("flag_hahe", rc_sp) and (options.phonetic or result_sp[getlast(nil, function(i)
return result[i]:len() > 0 and result_sp[i] ~= "'" or result_sp[i] == "stop"
end, function() return false end)] == "stop" or result[i_last]:match("[-~%a" .. glottal .. "]")) then
rc = rc_sp
rc_sp = nil
end
end
if rc:match("%a") and umatch(result[i_last], "^[,%.?!:)Ӡ]$") then --space and punctuations
result[i_last] = result[i_last] .. " "
elseif umatch(rc, "^[(“]$") and result[i_last]:match("%a") then
rc = " " .. rc
end
if rc_sp == "voiced" then -- voicing
result[i_last] = do_voicing(i_last, result, result_sp, options.hist, d, "tr_voicing")
elseif rc_sp == "semivoiced" then
result[i_last] = do_voicing(i_last, result, result_sp, options.hist, d, "tr_semivoicing")
end
if rc:match("[" .. cons .. "]+" .. "$") and rc_sp ~= "stop" then
rc_sp = "coda"
end
local r_last = result[i_last]
local r_lastlast = r_last:match"^.*(%a%A*)$" --vowel clusters or stop consonants
if r_lastlast and r_lastlast:match("[aiueo]") then
if rc:match("^%-[yw]") and r_last:match("^[" .. cons .. "yw]") then
local rc_first = rc:sub(2, 2)
r_last = #r_last > 1 and r_last:sub(1, -2) or r_last
if not (rc_first == "y" and d("flag_postalveolarconsonant", r_last)) then
r_last = r_last .. rc_first
end
result[i_last] = r_last
rc = rc:sub(3)
-- Prevents "kywu" etc. from showing up
rc_sp = "split_v"
elseif options.hist and (
r_lastlast == "i" and rc:sub(1, 1) == "y" and r_last:match("^[" .. cons .. "]") or
r_lastlast == "u" and rc:sub(1, 1) == "w" and r_last:match("[kg]u$")
) then
local rc_first = rc:sub(1, 1)
r_last = r_last:sub(1, -2)
if not (rc_first == "y" and d("flag_postalveolarconsonant", r_last)) then
r_last = r_last .. rc_first
end
result[i_last] = r_last .. rc:sub(2)
rc = ""
elseif rc:match"^%-[yw]?[aiueo]$" then
rc = rc:sub(2)
if r_last == "to" and rc == "u" or r_last == "do" and rc == "u" then
-- とぅ/どぅ: dedicated spelling for tu/du (per Wiktionary), strips the base vowel
result[i_last] = r_last:sub(1, -2)
--elseif r_lastlast == rc and r_lastlast == "i" then
-- consonant + small kana repeating i: glide, not lengthening (kyi, shyi...)
--result[i_last] = r_last:sub(1, -2) .. "y"
--elseif r_lastlast == rc and r_lastlast == "u" then
-- consonant + small kana repeating u: glide, not lengthening (kwu, swu...)
--result[i_last] = r_last:sub(1, -2) .. "w"
elseif r_last == "wo" and rc == "u" then
-- をぅとーてぃ case
result[i_last] = "w"
elseif r_last == "ne" and rc == "i" then
-- The testcases subpage says ねぃ should be ni, not nei.
result[i_last] = "n"
elseif r_lastlast == rc then
-- a/e/o-repeat (or bare i/u not caught above): ordinary lengthening
result[i_last] = r_last .. r_lastlast
rc = ""
elseif d("flag_specialconsonant", r_last) then
result[i_last] = r_last:sub(1, -2)
elseif rc == "i" and r_last:match("^[sz]u$") then
-- su/zu + i: direct attach like スィ/ズィ, unlike su/zu + a/u/e/o
result[i_last] = r_last:sub(1, -2)
elseif r_lastlast == "i" then
result[i_last] = r_last:sub(1, -2) .. "y"
elseif r_lastlast:match("[ou]") and rc ~= "u" then
result[i_last] = r_last:sub(1, -2) .. "w"
elseif r_lastlast == "o" and rc == "u" and result_sp[i_last] == "bare_o" then
-- bare お + small ぅ: block the pass-2 chōonpu merge, this isn't real おう
rc_sp = "no_lengthen"
end
end
end
insert(result, rc)
result_sp[#result] = rc_sp
end
if not options.hist then --isolated はへ
local i_last = getlast()
if d("flag_hahe", result_sp[i_last]) and getlast(i_last - 1) == 0 then
result[i_last] = result_sp[i_last]
end
end
local has_gem = false
for i, v in ipairs(result) do
--gemination
if has_gem then
local apos, consonant, remainder = v:match("^(" .. glottal .. "*)([" .. cons .. "yw]+)(.*)")
if consonant then
local init, c_gem = apos .. consonant
while true do
c_gem = d("tr_gem", init)
if #init == 1 or not init:match("[yw]$") then
break
end
init = init:sub(1, -2)
end
c_gem = c_gem or init:sub(1, 1)
v = consonant .. remainder
local resolved_any = false
local i_gem = getlast(i)
while true do
i_gem = getlast(i_gem - 1)
if result_sp[i_gem] == "gem" then
result[i_gem] = c_gem
resolved_any = true
elseif result_sp[i_gem] ~= "allow gem" then
if not resolved_any then
i_gem = getlast(i_gem + 1)
result[i_gem] = apos .. result[i_gem]
end
break
end
end
has_gem = false
end
elseif result_sp[i] == "gem" then
has_gem = true
end
-- FIXME: ng/nw should be determined automatically by a disambiguation model.
local v_first = v:match("^[aiueoyw]") or v:match("^n[gw]")
if v_first then
local i_last
if v_first == "y" or v_first == "w" or v_first == "ng" or v_first == "nw" then
i_last = getlast(i - 1, function(index)
local res, res_sp = result[index], result_sp[index]
return res ~= "" and res ~= "." and res_sp ~= "'" and res_sp ~= "gem"
end, function() end)
else
i_last = getlast(i - 1, nil, function() end)
end
if v_first:sub(1, 1) == "n" then
if umatch(result[i_last], "%a") and not (v_first == "nw" and result[i_last]:match("n$")) then
v = disambig .. v
end
elseif result_sp[i_last] == "coda" then
local coda = d("tr_coda_apos", v_first, result[i_last])
if coda == nil or options.hist and coda == "hist" then
v = disambig .. v
end
end
end
--Diacritics (long vowels and others).
v = v:gsub("[aiueo][aiueo%A]*", d("tr_long")) -- From small kana.
local i_last = getlast(i - 1)
local r_last = result[i_last]
-- From digraphs.
if r_last and result_sp[i] ~= "historical w" and result_sp[i] ~= "no_lengthen" and not (options.hist or options.phonetic or options.no_diacritics) then
local r_lastlast = r_last:match"^.*(%a%A*)$" --vowel clusters or stop consonants
if r_lastlast and d("tr_long", r_lastlast .. v) and not r_last:match("[aiueo][aiueo]$") then
result[i_last] = (r_last .. v):gsub("[aiueo][aiueo%A]*", d("tr_long"))
v = ""
end
end
result[i] = v
end
local num_cap = 0
for i, v in ipairs(result) do
--uppercase
if result_sp[i] == "cap" then
num_cap = num_cap + 1
end
if num_cap > 0 then
result[i] = v:gsub(".[\128-\191]*", function(c)
if num_cap <= 0 then return c end
local uc = c:uupper()
if c ~= uc then num_cap = num_cap - 1 end
return uc
end)
end
end
return (concat(result):gsub("[" .. glottal .. disambig .. "]", "'"))
end
return export
jwnux0siu9e748vspg4rgwjlsghtc19
Mòideal:Hrkt-translit/data
828
16853
86395
2026-07-23T04:40:56Z
Altronic
4137
Copy from English Wiktionary
86395
Scribunto
text/plain
local glottal = "\1"
return require("Module:Hrkt-translit").process_data({
rom = {
["."] = "", ["%"] = "", ["^"] = "",
["ぁ"] = "-a", ["ぃ"] = "-i", ["ぅ"] = "-u", ["ぇ"] = "-e", ["ぉ"] = "-o",
["あ"] = "a", ["い"] = "i", ["う"] = "u", ["え"] = "e", ["お"] = "o",
["か"] = "ka", ["き"] = "ki", ["く"] = "ku", ["け"] = "ke", ["こ"] = "ko",
["ゕ"] = "ka", ["ㇰ"] = "k", ["ゖ"] = "ga",
["さ"] = "sa", ["し"] = "shi", ["す"] = "su", ["せ"] = "se", ["そ"] = "so",
["ㇱ"] = "sh", ["ㇲ"] = "s",
["た"] = "ta", ["ち"] = "chi", ["つ"] = "tsu", ["て"] = "te", ["と"] = "to",
["ㇳ"] = "t",
["っ"] = glottal,
["な"] = "na", ["に"] = "ni", ["ぬ"] = "nu", ["ね"] = "ne", ["の"] = "no",
["ㇴ"] = "n",
["は"] = "wa", ["ひ"] = "hi", ["ふ"] = "fu", ["へ"] = "e", ["ほ"] = "ho",
["ㇵ"] = "h", ["ㇶ"] = "h", ["ㇷ"] = "f", ["ㇸ"] = "h", ["ㇹ"] = "h",
["ま"] = "ma", ["み"] = "mi", ["む"] = "mu", ["め"] = "me", ["も"] = "mo",
["ㇺ"] = "m",
["や"] = "ya", ["𛀆"] = "yi", ["ゆ"] = "yu", ["𛀁"] = "ye", ["よ"] = "yo",
["ゃ"] = "-ya", ["ゅ"] = "-yu", ["ょ"] = "-yo",
["ら"] = "ra", ["り"] = "ri", ["る"] = "ru", ["れ"] = "re", ["ろ"] = "ro",
["ㇻ"] = "r", ["ㇼ"] = "r", ["ㇽ"] = "r", ["ㇾ"] = "r", ["ㇿ"] = "r",
["わ"] = "wa", ["ゐ"] = "i", ["𛄟"] = "wu", ["ゑ"] = "e", ["を"] = "o",
["ゎ"] = "-wa", ["𛅐"] = "-wi", ["𛅑"] = "-we", ["𛅒"] = "-wo",
["ん"] = "n", ["𛅧"] = "n",
["ー"] = "",
["゙"] = "", ["゚"] = "",
["ゝ"] = "", ["ヽ"] = "",
[" "] = " ", ["。"] = ".",
["「"] = "“", ["」"] = "”", ["%"] = "%",
["〜"] = "~", ["~"] = "~", ["〰"] = "~",
["・"] = " ",
["゠"] = "-", ["="] = "-",
["!"] = "!", ["?"] = "?",
["("] = "(", [")"] = ")",
["「"] = "“", ["」"] = "”", ["『"] = "“", ["』"] = "”",
[":"] = ":",
["、"] = ",", [","] = ",",
["※"] = "†",
},
rom_hist = {
["し"] = "si",
["ち"] = "ti", ["つ"] = "tu",
["は"] = "fa", ["ひ"] = "fi", ["へ"] = "fe", ["ほ"] = "fo",
["ゐ"] = "wi", ["ゑ"] = "we", ["を"] = "wo",
},
rom_sp = {
["."] = "stop", ["^"] = "cap",
["っ"] = "gem", ["'"] = "'",
["は"] = "ha", ["へ"] = "he",
["お"] = "bare_o",
["ゐ"] = "historical w", ["ゑ"] = "historical w", ["を"] = "historical w",
["ゖ"] = "ke",
["゙"] = "voiced", ["゚"] = "semivoiced",
["ゝ"] = "rep", ["ヽ"] = "rep",
["・"] = "allow gem", ["-"] = "allow gem", ["゠"] = "allow gem", ["="] = "allow gem",
},
digraph = {
["ぃ"] = {
["i"] = "yi",
},
["ぅ"] = {
["u"] = "wu",
},
["゙"] = {
["n"] = glottal .. "n"
},
},
tr_long = {
["aa"] = "ā", ["ii"] = "ī", ["uu"] = "ū", ["ee"] = "ē", ["oo"] = "ō",
["ou"] = "ō",
["u~"] = "ũ", ["u~u~"] = "ũ̄"
},
tr_gem = {
["ch"] = "t",
["m"] = glottal,
["n"] = glottal,
},
tr_voicing = {
["a"] = glottal .. "a",
["i"] = glottal .. "i",
["u"] = "vu",
["e"] = glottal .. "e",
["o"] = glottal .. "o",
["k"] = "g",
["s"] = "z", ["sh"] = "j",
["t"] = "d", ["ch"] = "j", ["ts"] = "z",
["h"] = "b", ["f"] = "b",
["w"] = "v",
},
tr_semivoicing = {
["u"] = "u~",
["k"] = "ng",
["s"] = "ts", ["sh"] = "ts",
["ch"] = "t", ["ts"] = "t",
["h"] = "p", ["f"] = "p",
["r"] = "l",
},
tr_coda_apos = {
["w"] = {
["n"] = "hist"
}
},
disambig_exceptions = {
ng = true,
nw = true,
},
flag_postalveolarconsonant = {
["sh"] = true, ["ch"] = true, ["j"] = true
},
flag_specialconsonant = {
["fu"] = true, ["vu"] = true,
["shi"] = true, ["chi"] = true, ["ji"] = true,
["tsu"] = true, ["te"] = true, ["de"] = true,
},
flag_hahe = {
["ha"] = true, ["he"] = true
},
}, true)
40zlt37x32112uq87bor6yvaqt72kqf
Mòideal:Hrkt-translit/data/ja
828
16854
86396
2026-07-23T04:41:23Z
Altronic
4137
Copy from English Wiktionary
86396
Scribunto
text/plain
-- [[Japanese]] transliteration data
return require("Module:Hrkt-translit").process_data{
digraph = {
["゚"] = {
["to"] = "tu",
}
},
}
nf29igi2f7wuu7ohreq7qhysi1eklge
Mòideal:languages/byTranslitModule
828
16855
86397
2026-07-23T04:41:55Z
Altronic
4137
Copy from English Wiktionary
86397
Scribunto
text/plain
return function(translitModule)
local langs = {}
for code, data in pairs(require("Module:languages/data/all")) do
if data.translit == translitModule then
langs[code] = data
elseif type(data.translit) == "table" then
for script, translit_data in pairs(data.translit) do
if translit_data == translitModule then
langs[code] = data
end
end
end
end
local result = {}
local i = 0
for code, data in pairs(langs) do
i = i + 1
result[i] = require("Module:languages").makeObject(code, data)
end
return result
end
ilxfyi1e4fimut7me8uiwqiijdpeef5
Mòideal:languages/data/all
828
16856
86398
2026-07-23T04:42:38Z
Altronic
4137
Copy from English Wiktionary
86398
Scribunto
text/plain
local string = string
local table = table
local find = string.find
local format = string.format
local gsub = string.gsub
local next = next
local require = require
local all_scripts
do
local scripts, n = {}, 0
for script in next, require("Module:scripts/data") do
n = n + 1
scripts[n] = script
end
table.sort(scripts)
all_scripts = table.concat(scripts, ",")
end
local modules = {
"Module:languages/data/2",
"Module:languages/data/exceptional"
}
local data = {}
for i = 1, 28 do
local mname = modules[i] or format("Module:languages/data/3/%c", 0x5E + i)
for key, value in next, require(mname) do
-- Handle the special script codes "All" and "Hants".
local value4 = value[4]
if value4 == "All" then
value[4] = all_scripts
elseif value4 and find(value4, "Hants", 1, true) then
value[4] = gsub(value4, "Hants", "Hani,Hant,Hans")
end
data[key] = value
end
for lkey, lvalue in next, require(mname .. "/extra") do
local lkey_data = data[lkey]
if lkey_data then
for key, value in next, lvalue do
lkey_data[key] = value
end
end
end
end
return data
dp1mff68q486yy7e09r7l87j501y1uk
Mòideal:languages/data/2/extra
828
16857
86399
2026-07-23T04:43:52Z
Altronic
4137
Copy from English Wiktionary
86399
Scribunto
text/plain
local m = {}
m["aa"] = {
aliases = {"Qafar"},
}
m["ab"] = {
aliases = {"Abkhazian", "Abxazo"},
}
m["ae"] = {
aliases = {"Zend", "Old Bactrian"},
}
m["af"] = {
}
m["ak"] = {
varieties = {"Twi-Fante", "Twi", {"Fante", "Fanti"}, "Asante", "Akuapem", "Abron", "Brong", "Wasa"},
}
m["am"] = {
}
m["an"] = {
}
m["ar"] = {
-- FIXME, some of the following are varieties but it's not clear which ones
aliases = {"Standard Arabic", "Literary Arabic", "High Arabic"},
varieties = {"Modern Standard Arabic", "Classical Arabic", "Judeo-Arabic"},
}
m["as"] = {
aliases = {"Asamiya"},
}
m["av"] = {
aliases = {"Avaric"},
}
m["ay"] = {
varieties = {"Southern Aymara", "Central Aymara"},
}
m["az"] = {
aliases = {"Azeri", "Azari", "Azeri Turkic", "Azerbaijani Turkic"},
varieties = {"North Azerbaijani", "South Azerbaijani",
{"Afshar", "Afshari", "Afshar Azerbaijani", "Afchar"},
{"Qashqa'i", "Qashqai", "Kashkay"},
"Sonqor"
},
}
m["ba"] = {
}
m["be"] = {
aliases = {"Belorussian", "Belarusan", "Bielorussian", "Byelorussian", "Belarussian", "White Russian"},
}
m["bg"] = {
}
m["bh"] = {
}
m["bi"] = {
}
m["bm"] = {
aliases = {"Bamanankan"},
}
m["bn"] = {
aliases = {"Bangla"},
}
m["bo"] = {
varieties = {
{"Amdo Tibetan", "Amdo"},
"Dolpo",
{"Khams", "Khams Tibetan"}, "Khamba",
"Gola",
"Humla",
"Limi", {"Lhasa", "Lhasa Tibetan"}, "Lhomi", "Loke", "Lowa",
"Mugom", "Mugu", "Mustang",
"Nubri",
"Panang",
"Shing Saapa",
"Thudam", "Tichurong", "Tseku",
{"Ü", "Dbus"},
"Walungge"}, -- and "Gyalsumdo", "Lower Manang"? "Kyirong"?
}
m["br"] = {
varieties = {{"Gwenedeg", "Vannetais"}, {"Kerneveg", "Cornouaillais"}, {"Leoneg", "Léonard"}, {"Tregerieg", "Trégorrois"}},
}
m["ca"] = {
-- don't list varieties here that are in [[Module:etymology languages/data]]
}
m["ce"] = {
}
m["ch"] = {
aliases = {"Chamoru"},
}
m["co"] = {
aliases = {"Corsu"},
}
m["cr"] = {
}
m["cs"] = {
}
m["cu"] = {
aliases = {"Old Church Slavic"},
}
m["cv"] = {
}
m["cy"] = {
varieties = {"Cofi Welsh", {"Dyfedeg", "Dyfed Welsh", "Demetian"}, {"Gwenhwyseg", "Gwent Welsh", "Gwentian"}, {"Gwyndodeg", "Gwynedd Welsh", "Venedotian"}, {"Powyseg", "Powys Welsh", "Powysian"}, "Patagonian Welsh"},
}
m["da"] = {
}
m["de"] = {
aliases = {"High German", "New High German", "Deutsch"},
varieties = {"Alsatian German", "American German",
"Bavarian German", "Belgian German",
"Central German",
"DDR German",
"East African German",
"German German",
"Hessian German",
"Indiana German",
"Liechtenstein German", "Lorraine German", "Luxembourgish German",
"Namibian German", "Northern German",
"Prussian German",
"Silesia German", "South African German", "Southern German", "South Tyrolean German", "Switzerland German",
"Texan German"},
}
m["dv"] = {
aliases = {"Divehi", "Maldivian"},
varieties = {{"Mahal", "Mahl"}},
}
m["dz"] = {
}
m["ee"] = {
}
m["el"] = {
aliases = {"Modern Greek", "Neo-Hellenic"},
}
m["en"] = {
aliases = {"Modern English", "New English"},
varieties = {"Polari", "Yinglish"},
}
m["eo"] = {
}
m["es"] = {
aliases = {"Castilian"},
varieties = {{"Amazonian Spanish", "Amazonic Spanish"}, "Loreto-Ucayali Spanish"},
}
m["et"] = {
}
m["eu"] = {
aliases = {"Euskara"},
}
m["fa"] = {
aliases = {"Farsi", "New Persian", "Modern Persian"},
varieties = {{"Western Persian", "Iranian Persian"}, {"Eastern Persian", "Dari"}, {"Aimaq", "Aimak", "Aymaq", "Eimak"}},
}
m["ff"] = {
aliases = {"Fulani"},
varieties = {"Adamawa Fulfulde", "Bagirmi Fulfulde", "Borgu Fulfulde", "Central-Eastern Niger Fulfulde", "Fulfulde", "Maasina Fulfulde", "Nigerian Fulfulde", "Pular", "Pulaar", "Western Niger Fulfulde"}, -- Maasina, etc are dialects, subsumed into this code; Pular and Pulaar are distinct
}
m["fi"] = {
aliases = {"Suomi"},
}
m["fj"] = {
}
m["fo"] = {
aliases = {"Faeroese"},
}
m["fr"] = {
aliases = {"Modern French"},
varieties = {"African French", "Algerian French", "Alsatian French", "Antilles French", "Atlantic Canadian French",
"Belgian French",
"Congolese French",
"European French",
"French French",
"Haitian French",
"Ivorian French",
"Lorraine French", "Louisiana French", "Luxembourgish French",
"Malian French", "Marseille French", "Missourian French", "Moroccan French",
"Newfoundland French", "North American French",
"Picard French", "Provençal French",
"Quebec French",
"Réunion French", "Rwandan French",
"Tunisian French",
"West African French"},
}
m["fy"] = {
aliases = {"Western Frisian"},
}
m["ga"] = {
aliases = {"Irish Gaelic", "Gaelic"}, -- calling it simply "Gaelic" is rare in Ireland, but relatively common in the Irish diaspora
varieties = {{"Cois Fharraige Irish", "Cois Fhairrge Irish"}, {"Connacht Irish", "Connaught Irish"}, "Cork Irish", "Donegal Irish", "Galway Irish", "Kerry Irish", "Mayo Irish", "Munster Irish", "Ulster Irish", "Waterford Irish", "West Muskerry Irish"},
}
m["gd"] = {
aliases = {"Gaelic", "Gàidhlig", "Scots Gaelic", "Scottish"},
varieties = {"Argyll Gaelic", "Arran Scottish Gaelic", {"Canadian Gaelic", "Canadian Scottish Gaelic", "Cape Breton Gaelic"}, "East Sutherland Gaelic", {"Galwegian Gaelic", "Gallovidian Gaelic", "Gallowegian Gaelic", "Galloway Gaelic"}, "Hebridean Gaelic", "Highland Gaelic"},
}
m["gl"] = {
}
m["gu"] = {
}
m["gv"] = {
aliases = {"Manx Gaelic"},
varieties = {"Northern Manx", "Southern Manx"},
}
m["ha"] = {
}
m["he"] = {
aliases = {"Ivrit"},
}
m["hi"] = {
other_names = {"Hindavi"},
}
m["ho"] = {
aliases = {"Pidgin Motu", "Police Motu"},
}
m["ht"] = {
aliases = {"Creole", "Haitian", "Kreyòl"},
}
m["hu"] = {
aliases = {"Magyar"},
}
m["hy"] = {
aliases = {"Modern Armenian"},
varieties = {"Eastern Armenian", "Western Armenian"},
}
m["hz"] = {
}
m["ia"] = {
}
m["id"] = {
}
m["ie"] = {
aliases = {"Occidental"},
}
m["ig"] = {
}
m["ii"] = {
aliases = {
"Nosu", "Nuosu Yi", "Nosu Yi", "Sichuan Yi", "Northern Yi", "Liangshan Yi",
},
}
m["ik"] = {
aliases = {"Inupiak", "Iñupiaq", "Inupiatun"},
}
m["io"] = {
}
m["is"] = {
}
m["it"] = {
}
m["iu"] = {
varieties = {
"Aivilimmiut",
{"Eastern Canadian Inuktitut", "Eastern Canadian Inuit"},
{"Inuinnaq", "Inuinnaqtun"},
{"Inuvialuktun", "Inuvialuk", "Western Canadian Inuktitut", "Western Canadian Inuit", "Western Canadian Inuktun"},
"Kivallirmiut",
"Natsilingmiut", "Nunavimmiutit", "Nunatsiavummiut",
{"Siglitun", "Siglit"}},
}
m["ja"] = {
aliases = {"Modern Japanese", "Nipponese", "Nihongo"},
}
m["jv"] = {
}
m["ka"] = {
varieties = {{"Judeo-Georgian", "Kivruli", "Gruzinic"}},
}
m["kg"] = {
aliases = {"Kikongo"},
varieties = {"Koongo", "Laari", "San Salvador Kongo", "Yombe"},
}
m["ki"] = {
aliases = {"Gikuyu", "Gĩkũyũ"},
}
m["kj"] = {
aliases = {"Kuanyama", "Oshikwanyama"},
}
m["kk"] = {
}
m["kl"] = {
aliases = {"Kalaallisut"},
}
m["km"] = {
aliases = {"Cambodian", "Central Khmer", "Modern Khmer"},
}
m["kn"] = {
}
m["ko"] = {
aliases = {"Modern Korean"},
}
m["kr"] = {
varieties = {"Kanembu", "Bilma Kanuri", "Central Kanuri", "Manga Kanuri", "Tumari Kanuri"},
}
m["ks"] = {
aliases = {"Koshur"},
}
-- "kv" is treated as "koi", "kpv", see [[WT:LT]]
m["kw"] = {
}
m["ky"] = {
aliases = {"Kirghiz", "Kirgiz"},
}
m["la"] = {
}
m["lb"] = {
}
m["lg"] = {
aliases = {"Ganda", "Oluganda"},
}
m["li"] = {
aliases = {"Limburgan", "Limburgian", "Limburgic"},
}
m["ln"] = {
aliases = {"Ngala"},
}
m["lo"] = {
aliases = {"Laotian"},
}
m["lt"] = {
}
m["lu"] = {
}
m["lv"] = {
aliases = {"Lettish", "Lett"},
}
m["mg"] = {
varieties = {
{"Antankarana", "Antankarana Malagasy"},
{"Bara Malagasy", "Bara"}, {"Betsimisaraka Malagasy", "Betsimisaraka"}, {"Northern Betsimisaraka Malagasy", "Northern Betsimisaraka"}, {"Southern Betsimisaraka Malagasy", "Southern Betsimisaraka"}, {"Bushi", "Shibushi", "Kibushi"},
{"Masikoro Malagasy", "Masikoro"},
"Plateau Malagasy",
"Sakalava",
{"Tandroy Malagasy", "Tandroy"}, {"Tanosy", "Tanosy Malagasy"}, "Tesaka", {"Tsimihety", "Tsimihety Malagasy"}},
}
m["mh"] = {
}
m["mi"] = {
aliases = {"Maori"},
}
m["mk"] = {
}
m["ml"] = {
}
m["mn"] = {
varieties = {"Khalkha Mongolian"},
}
-- "mo" is treated as "ro", see [[WT:LT]]
m["mr"] = {
}
m["ms"] = {
aliases = {"Malaysian", "Standard Malay"},
}
m["mt"] = {
}
m["my"] = {
aliases = {"Myanmar"},
varieties = {"Mandalay Burmese", "Myeik Burmese", "Palaw Burmese", {"Rangoon Burmese", "Yangon Burmese"}, "Yaw Burmese"},
}
m["na"] = {
aliases = {"Nauru"},
}
m["nb"] = {
aliases = {"Bokmål"},
}
m["nd"] = {
aliases = {"North Ndebele"},
}
m["ne"] = {
aliases = {"Nepalese"},
varieties = {"Palpa"}, -- 3832956, former "plp", retired by ISO as spurious
}
m["ng"] = {
}
m["nl"] = {
varieties = {"Netherlandic", "Flemish"}, -- FIXME, check this
}
m["nn"] = {
aliases = {"New Norwegian", "Nynorsk"},
}
m["no"] = {
}
m["nr"] = {
aliases = {"South Ndebele"},
}
m["nv"] = {
aliases = {"Navaho", "Diné bizaad"},
}
m["ny"] = {
aliases = {"Chicheŵa", "Chinyanja", "Nyanja", "Chewa", "Cicewa", "Cewa", "Cinyanja"},
}
m["oc"] = {
-- don't list varieties here that are in [[Module:etymology languages/data]]
}
m["oj"] = {
aliases = {"Ojibway", "Ojibwa"},
varieties = {{"Chippewa", "Ojibwemowin", "Southwestern Ojibwa"}},
}
m["om"] = {
varieties = {"Orma", "Borana-Arsi-Guji Oromo", "West Central Oromo"},
}
m["or"] = {
aliases = {"Oriya", "Oorya"},
}
m["os"] = {
aliases = {"Ossete", "Ossetic"},
varieties = {"Digor", "Iron"},
}
m["pa"] = {
aliases = {"Panjabi"},
}
m["pi"] = {
}
m["pl"] = {
}
m["ps"] = {
aliases = {"Pashtun", "Pushto", "Pashtu", "Afghani"},
varieties = {"Central Pashto", "Northern Pashto", "Southern Pashto", {"Pukhto", "Pakhto", "Pakkhto"}},
}
m["pt"] = {
aliases = {"Modern Portuguese"},
}
m["qu"] = {
}
m["rm"] = {
aliases = {"Romansch", "Rumantsch", "Romanche"},
-- don't list varieties here that are in [[Module:etymology languages/data]]
varieties = {"Sursilvan-Oberland"}, -- extra variety in Glottolog; main varieties have their own etym codes
}
m["ro"] = {
aliases = {"Daco-Romanian", "Roumanian", "Rumanian"},
}
m["ru"] = {
}
m["rw"] = {
-- don't list varieties here that are in [[Module:etymology languages/data]]
varieties = {{"Ha", "Giha"}, "Hangaza", "Vinza", "Shubi"}, -- Deleted "Subi", which normally refers to a different language
}
m["sa"] = {
}
m["sc"] = {
-- don't list varieties here that are in [[Module:etymology languages/data]]
}
m["sd"] = {
}
m["se"] = {
aliases = {"North Sami", "Northern Saami", "North Saami"},
}
m["sg"] = {
}
m["sh"] = {
aliases = {"BCS", "Croato-Serbian", "Serbocroatian"},
-- don't list varieties here that are in [[Module:etymology languages/data]]
varieties = {"Bosnian", "Croatian", "Montenegrin", "Serbian", "Shtokavian"},
}
m["si"] = {
aliases = {"Singhalese", "Sinhala"},
}
m["sk"] = {
}
m["sl"] = {
aliases = {"Slovenian"},
}
m["sm"] = {
}
m["sn"] = {
}
m["so"] = {
}
m["sq"] = {
-- don't list varieties here that are in [[Module:etymology languages/data]]
}
m["ss"] = {
aliases = {"Swati"},
}
m["st"] = {
aliases = {"Sesotho", "Southern Sesotho", "Southern Sotho"},
}
m["su"] = {
}
m["sv"] = {
}
m["sw"] = {
varieties = {{"Settler Swahili", "KiSetla", "KiSettla", "Setla", "Settla", "Kitchen Swahili"}, {"Kihindi", "Indian Swahili"}, {"KiShamba", "Kishamba", "Field Swahili"}, {"Kibabu", "Asian Swahili"}, {"Kimanga", "Arab Swahili"}, {"Kitvita", "Army Swahili"}},
}
m["ta"] = {
}
m["te"] = {
}
m["tg"] = {
aliases = {"Eastern Persian", "Tadjik", "Tadzhik", "Tajiki", "Tajik Persian", "Tajiki Persian"},
}
m["th"] = {
aliases = {"Central Thai", "Siamese"},
}
m["ti"] = {
aliases = {"Tigrigna"},
}
m["tk"] = {
}
m["tl"] = {
}
m["tn"] = {
aliases = {"Setswana"},
}
m["to"] = {
}
m["tr"] = {
}
m["ts"] = {
aliases = {"Xitsonga"},
}
m["tt"] = {
}
-- "tw" is treated as "ak", see [[WT:LT]]
m["ty"] = {
}
m["ug"] = {
aliases = {"Uigur", "Uighur", "Uygur"},
}
m["uk"] = {
}
m["ur"] = {
}
m["uz"] = {
varieties = {"Northern Uzbek", "Southern Uzbek"},
}
m["ve"] = {
}
m["vi"] = {
aliases = {"Annamese", "Annamite"},
}
m["vo"] = {
}
m["wa"] = {
varieties = {"Liégeois", "Namurois", "Wallo-Picard", "Wallo-Lorrain"},
}
m["wo"] = {
varieties = {"Gambian Wolof"}, -- the subsumed dialect 'wof'
}
m["xh"] = {
}
m["yi"] = {
varieties = {"American Yiddish", "Daytshmerish Yiddish", "Mideastern Yiddish", "Galitzish",
{"Northeastern Yiddish", "Litvish", "Lithuanian Yiddish"},
{"Northwestern Yiddish", "Netherlandic Yiddish"},
{"Polish Yiddish", "Poylish"},
"South African Yiddish",
{"Southeastern Yiddish", "Ukrainian Yiddish", "Ukrainish"},
{"Southwestern Yiddish", "Judeo-Alsatian"},
"Udmurtish"
},
}
m["yo"] = {
}
m["za"] = {
-- FIXME, are all of the following distinct?
varieties = {
"Chongzuo Zhuang",
"Guibei Zhuang", "Guibian Zhuang",
"Central Hongshuihe Zhuang", "Eastern Hongshuihe Zhuang",
"Lianshan Zhuang", "Liujiang Zhuang", "Liuqian Zhuang",
{"Min Zhuang", "Minz Zhuang"},
"Nong Zhuang", -- see zhn
"Qiubei Zhuang",
"Shangsi Zhuang",
{"Dai Zhuang", "Wenma", "Wenma Thu", "Wenma Zhuang"},
"Yang Zhuang",
{"Yongbei Zhuang", "Wuming Zhuang", "Standard Zhuang"},
"Yongnan Zhuang", "Youjiang Zhuang",
"Zuojiang Zhuang"},
}
m["zh"] = {
}
m["zu"] = {
aliases = {"isiZulu"},
}
return m
8dzyaary1ol9c8nzyck3kxai4c2ysq5
Mòideal:languages/data/exceptional/extra
828
16858
86400
2026-07-23T04:47:52Z
Altronic
4137
Copy from English Wiktionary
86400
Scribunto
text/plain
local m = {}
m["aav-khs-pro"] = {
aliases = {"Proto-Khasic"},
}
m["aav-nic-pro"] = {
}
m["aav-pkl-pro"] = {
}
m["aav-pro"] = { -- mkh-pro will merge into this.
}
m["afa-pro"] = {
aliases = {"Proto-Afro-Asiatic", "Hamito-Semitic"},
}
m["alg-aga"] = {
aliases = {"Agwam", "Agaam"},
}
m["alg-pro"] = {
}
m["alv-ama"] = {
}
m["alv-bgu"] = {
aliases = {"Baïnounk Gubëeher", -- Wikipedia's name
"Gubeeher-Gufangor-Gubelor", -- Glottolog's name,
"Gubëeher", "Nyun Gubëeher", "Nun Gubëeher"}, -- N(y)un appears to be the family name
varieties = {"Gubeeher", "Gufangor", "Gubelor"},
}
m["alv-bua-pro"] = {
}
m["alv-cng-pro"] = {
}
m["alv-edk-pro"] = {
}
m["alv-edo-pro"] = {
}
m["alv-fli-pro"] = {
}
m["alv-gbe-pro"] = {
}
m["alv-gng-pro"] = {
}
m["alv-gtm-pro"] = {
aliases = {"Proto-Ghana-Togo Mountain"},
}
m["alv-gwa"] = {
}
m["alv-hei-pro"] = {
}
m["alv-ido-pro"] = {
}
m["alv-igb-pro"] = {
}
m["alv-kwa-pro"] = {
}
m["alv-mum-pro"] = {
}
m["alv-nup-pro"] = {
}
m["alv-pro"] = {
}
m["alv-von-pro"] = {
}
m["alv-yor-pro"] = {
}
m["alv-yrd-pro"] = {
}
m["apa-pro"] = {
aliases = {"Proto-Apache", "Proto-Southern Athabaskan"},
}
m["aql-pro"] = {
}
m["art-adu"] = {
aliases = {"Westron"},
}
m["art-bel"] = {
}
m["art-blk"] = {
}
m["art-bsp"] = {
}
m["art-com"] = {
}
m["art-dtk"] = {
}
m["art-elo"] = {
}
m["art-gld"] = {
}
m["art-lap"] = {
}
m["art-man"] = {
}
m["art-mun"] = {
}
m["art-nav"] = {
}
m["art-vlh"] = {
}
m["ath-nic"] = {
}
m["ath-pro"] = {
}
m["auf-pro"] = {
aliases = {"Proto-Arawan", "Proto-Arauan"},
}
m["aus-alu"] = {
other_names = {"Ogh-Alungul", "Alngula"},
}
m["aus-and"] = {
aliases = {"Adithinngithigh"},
}
m["aus-ang"] = {
other_names = {"Ogh-Anggula", "Anggula", "Ogh-Anggul", "Anggul"},
}
m["aus-arn-pro"] = {
}
m["aus-bra"] = {
aliases = {"Barranbinja", "Baranbinya", "Burranbinya", "Burrumbiniya", "Burrunbinya", "Barrumbinya", "Barren-binya", "Parran-binye"},
}
m["aus-brm"] = {
}
m["aus-cww-pro"] = {
}
m["aus-dal-pro"] = {
}
m["aus-guw"] = {
other_names = {"Gowar", "Goowar", "Gooar", "Guar", "Gowr-burra", "Ngugi", "Mugee", "Wogee", "Gnoogee", "Chunchiburri", "Booroo-geen-merrie"},
}
m["aus-lsw"] = {
aliases = {"Little Swanport Tasmanian"},
}
m["aus-mbi"] = {
other_names = {"Mbeiwum"},
}
m["aus-ngk"] = {
other_names = {"Ngkot", "Nggoth"},
}
m["aus-nyu-pro"] = {
}
m["aus-pam-pro"] = {
}
m["aus-tul"] = {
other_names = {"Dappil", "Dapil", "Toolooa", "Dulua", "Narung", "Dandan"},
}
m["aus-uwi"] = {
other_names = {"Uwinjmil"},
}
m["aus-wdj-pro"] = {
}
m["aus-won"] = {
}
m["aus-wul"] = {
other_names = {"Manbara", "Wulgurugaba", "Wulgurukaba", "Nhawalgaba"},
}
m["aus-ynk"] = { -- contrast nny
}
m["awd-amc-pro"] = {
other_names = {"Western Maipuran"},
}
m["awd-kmp-pro"] = {
other_names = {"Campa", "Kampan", "Campan", "Pre-Andine Maipurean"},
}
m["awd-prw-pro"] = {
other_names = {"Paresí-Waurá", "Parecí–Xingú", "Paresí–Xingu", "Central Arawak", "Central Maipurean"},
}
m["awd-ama"] = {
}
m["awd-ana"] = {
aliases = {"Anauya"},
}
m["awd-apo"] = {
other_names = {"Lapachu"},
}
m["awd-cab"] = {
aliases = {"Cabere", "Cávere", "Cavere"},
}
m["awd-gnu"] = {
other_names = {"Guinao", "Inao", "Guniare", "Quinhau", "Guiano"},
}
m["awd-kar"] = {
aliases = {"Kariaí", "Kariai", "Cariyai", "Carihiahy"},
}
m["awd-kaw"] = {
aliases = {"Cawishana", "Cayuishana", "Kaishana", "Cauixana"},
}
m["awd-kus"] = {
aliases = {"Kustenaú", "Custenau", "Kutenabu"},
}
m["awd-man"] = {
}
m["awd-mar"] = {
aliases = {"Marawán"},
}
m["awd-mpr"] = {
aliases = {"Maypure", "Mejepure"},
}
m["awd-mrt"] = {
aliases = {"Mariate"},
}
m["awd-nwk-pro"] = {
aliases = {"Proto-Newiki"},
}
m["awd-pai"] = {
aliases = {"Paiconeca", "Paikone", "Paicone"},
}
m["awd-pas"] = {
aliases = {"Passé", "Pazé"},
}
m["awd-pro"] = {
other_names = {"Proto-Arawakan", "Proto-Maipurean", "Proto-Maipuran"},
}
m["awd-she"] = {
aliases = {"Shebaya", "Shebaye"},
}
m["awd-taa-pro"] = {
other_names = {"Proto-Ta-Arawakan", "Proto-Caribbean Northern Arawak"},
}
m["awd-wai"] = {
other_names = {"Wainuma", "Wai", "Waima", "Wainumi", "Wainambí", "Waiwana", "Waipi", "Yanuma"},
}
m["awd-yum"] = {
aliases = {"Jumana"},
}
m["azc-caz"] = {
aliases = {"Caxcan", "Kaskán"},
}
m["azc-cup-pro"] = {
}
m["azc-ktn"] = {
aliases = {"Gitanemuk"},
}
m["azc-nah-pro"] = {
}
m["azc-num-pro"] = {
}
m["azc-pro"] = {
}
m["azc-tak-pro"] = {
}
m["azc-tat"] = {
}
m["ber-fog"] = {
other_names = {"El-Fogaha", "El-Foqaha", "Foqaha", "Fuqaha"},
}
m["ber-pro"] = {
}
m["ber-zuw"] = {
}
m["bnt-bal"] = {
}
m["bnt-bon"] = {
}
m["bnt-boy"] = {
}
m["bnt-bwa"] = {
}
m["bnt-cmw"] = {
other_names = {"Bravanese", "Mwiini", "Mwini", "Chimwini", "Chimini", "Brava"},
}
m["bnt-ind"] = {
other_names = {"Kɔlɔmɔnyi", "Kɔlɛ", "Kasaï Oriental"},
}
m["bnt-lal"] = {
}
m["bnt-mpi"] = {
}
m["bnt-mpu"] = {
}
m["bnt-ngu-pro"] = {
}
m["bnt-phu"] = {
aliases = {"Siphuthi"},
}
m["bnt-pro"] = {
}
m["bnt-sab-pro"] = {
}
m["bnt-sbo"] = {
}
m["bnt-sts-pro"] = {
}
m["btk-pro"] = {
}
m["cau-abz-pro"] = {
other_names = {"Proto-Abazgi", "Proto-Abkhaz-Tapanta"},
}
m["cau-and-pro"] = {
aliases = {"Proto-Andi", "Proto-Andic"},
}
m["cau-ava-pro"] = {
aliases = {"Proto-Avar-Andian", "Proto-Avar-Andi", "Proto-Avar-Andic"},
}
m["cau-cir-pro"] = {
other_names = {"Proto-Adyghe-Kabardian", "Proto-Adyghe-Circassian"},
}
m["cau-drg-pro"] = {
other_names = {"Proto-Dargin"},
}
m["cau-lzg-pro"] = {
aliases = {"Proto-Lezgi", "Proto-Lezgian", "Proto-Lezgic"},
}
m["cau-nec-pro"] = {
}
m["cau-nkh-pro"] = {
}
m["cau-nwc-pro"] = {
}
m["cau-tsz-pro"] = {
other_names = {"Proto-Tsezic", "Proto-Didoic"},
}
m["cba-ata"] = {
other_names = {"Atanque", "Cancuamo", "Kankuamo", "Kankwe", "Kankuí", "Atanke"},
}
m["cba-cat"] = {
other_names = {"Catio Chibcha", "Old Catio"},
}
m["cba-dor"] = {
other_names = {"Chumulu", "Changuena", "Changuina", "Chánguena", "Gualaca"},
}
m["cba-dui"] = {
}
m["cba-hue"] = {
other_names = {"Güetar", "Guetar", "Brusela"},
}
m["cba-nut"] = {
other_names = {"Nutabane"},
}
m["cba-pro"] = {
}
m["ccs-pro"] = {
}
m["ccs-gzn-pro"] = {
aliases = {"Proto-Karto-Zan"},
}
m["cdc-cbm-pro"] = {
aliases = {"Proto-Central-Chadic", "Proto-Biu-Mandara"},
}
m["cdc-mas-pro"] = {
}
m["cdc-pro"] = {
}
m["cdd-pro"] = {
}
m["cel-bry-pro"] = {
aliases = {"Proto-Brittonic", "Common Brythonic", "Common Brittonic"},
}
m["cel-gal"] = {
}
m["cel-gau"] = {
}
m["cel-pro"] = {
}
m["chi-pro"] = {
}
m["chm-pro"] = {
}
m["cmc-pro"] = {
}
m["crp-bip"] = {
}
m["crp-cpr"] = {
}
m["crp-gep"] = {
aliases = {"Greenlandic Pidgin", "Greenlandic Eskimo Pidgin"},
}
m["crp-kia"] = {
aliases = {"Kiautschou Pidgin German"},
}
m["crp-mar"] = {
other_names = {"Jamaican Maroon Spirit Possession Language"},
}
m["crp-mpp"] = {
aliases = {"Macao Pidgin Portuguese"},
}
m["crp-rsn"] = {
}
m["crp-slb"] = {
other_names = {"Solombala-English", "Solombala English-Russian Pidgin"},
}
m["crp-spp"] = {
}
m["crp-tpr"] = {
}
m["csu-bba-pro"] = {
}
m["csu-maa-pro"] = {
}
m["csu-pro"] = {
}
m["csu-sar-pro"] = {
}
m["cus-ash"] = {
other_names = {"Ashraf", "Af-Ashraaf"},
varieties = { {"Marka, Lower Shabelle"}, "Shingani"},
}
m["cus-hec-pro"] = {
}
m["cus-som-pro"] = {
aliases = {"Proto-Sam", "Proto-Macro-Somali"},
}
m["cus-sou-pro"] = {
other_names = {"Proto-Rift"},
}
m["cus-pro"] = {
}
m["dmn-dam"] = {
}
m["dra-bry"] = {
aliases = {"Byari"},
}
m["dra-cen-pro"] = {
}
m["dra-mkn"] = {
aliases = {"Nadugannada"},
}
m["dra-nor-pro"] = {
}
m["dra-okn"] = {
aliases = {"Halegannada"},
}
m["dra-ote"] = {
}
m["dra-pro"] = {
}
m["dra-sdo-pro"] = {
aliases = {"Proto-South Dravidian"},
}
m["dra-sdt-pro"] = {
aliases = {"Proto-South-Central Dravidian"},
}
m["dra-sou-pro"] = {
aliases = {"Proto-Southern Dravidian"},
}
m["egx-dem"] = {
aliases = {"Demotic", "Enchorial"},
}
m["dmn-pro"] = {
}
m["dmn-mdw-pro"] = {
}
m["dru-pro"] = {
}
m["ero-gsz"] = {
}
m["ero-nya"] = {
}
m["ero-tau"] = {
other_names = {"Rtau"},
}
m["esx-esk-pro"] = {
}
m["esx-ink"] = {
}
m["esx-inq"] = {
}
m["esx-inu-pro"] = {
}
m["esx-pro"] = {
}
m["esx-tut"] = {
}
m["euq-pro"] = {
aliases = {"Proto-Vasconic"},
}
m["gba-pro"] = {
}
m["gem-pro"] = {
aliases = {"Common Germanic"},
}
m["gme-bur"] = {
aliases = {"Burgundish", "Burgundic"},
}
m["gme-cgo"] = {
}
m["gmq-gut"] = {
}
m["gmq-jmk"] = {
aliases = {"Jamtlandic"},
}
m["gmq-mno"] = {
}
m["gmq-oda"] = {
}
m["gmq-ogt"] = {
aliases = {"Old Gotlandic"},
}
m["gmq-osw"] = {
}
m["gmq-pro"] = {
aliases = {"Proto-Scandinavian", "Primitive Norse", "Proto-Nordic",
"Ancient Nordic", "Ancient Scandinavian", "Old Nordic", "Old Scandinavian",
"Proto-North Germanic", "North Proto-Germanic", "Common Scandinavian"},
}
m["gmq-scy"] = {
}
m["gmw-bgh"] = {
}
m["gmw-cfr"] = {
varieties = {"Mittelfränkisch", "Ripuarian", "Moselle Franconian", "Colognian", "Kölsch"},
}
m["gmw-ecg"] = {
varieties = {"Thuringian", "Thüringisch", "Upper Saxon", "Upper Saxon German", "Obersächsisch", "Lusatian", "Erzgebirgisch", "Silesian", "Silesian German", "High Prussian"},
}
m["gmw-fin"] = {
aliases = {"Fingal"},
}
m["gmw-gts"] = {
aliases = {"Gottscheerisch"},
}
m["gmw-jdt"] = {
}
m["gmw-msc"] = {
}
m["gmw-pro"] = {
}
m["gmw-rfr"] = {
aliases = {"Rheinfränkisch", "Rhenish Franconian"},
varieties = {"Hessian", "Lorraine Franconian", "Lorrainian", "Lothringisch", "Palatine German", "Pfälzisch", "Pälzisch", "Palatinate German"},
}
m["gmw-stm"] = {
aliases = {"Satu Mare Swabian", "Sathmarschwäbisch", "Sathmarisch"},
}
m["gmw-tsx"] = {
aliases = {"Siebenbürger Saxon"},
}
m["gmw-vog"] = {
}
m["gmw-zps"] = {
aliases = {"Zipser", "Zipserisch", "Outzäpsersch"},
}
m["gn-cls"] = {
}
m["grk-cal"] = {
aliases = {"Italian Greek", "Bova"},
}
m["grk-ita"] = {
aliases = {"Griko", "Grico", "Grecanic"},
}
m["grk-mar"] = {
aliases = {"Mariupolitan Greek", "Rumeíka", "Rumeika"},
}
m["grk-pro"] = {
aliases = {"Proto-Greek"},
}
m["hmn-pro"] = {
}
m["hmx-mie-pro"] = {
}
m["hmx-pro"] = {
}
m["hyx-pro"] = {
}
m["iir-nur-pro"] = {
}
m["iir-pro"] = {
}
m["ijo-pro"] = {
aliases = {"Proto-Ijaw"},
}
m["inc-apa"] = {
aliases = {"Apabhraṃśa"},
}
m["inc-ash"] = {
aliases = {"Asokan Prakrit", "Aśokan Prakrit"},
}
m["inc-dng-pro"] = {
}
m["inc-kam"] = {
}
m["inc-kho"] = {
}
m["inc-krd-pro"] = {
aliases = {"Proto-Kamata"},
}
m["inc-mas"] = {
}
m["inc-mbn"] = {
}
m["inc-mgu"] = {
}
m["inc-mor"] = {
aliases = {"Middle Oriya"},
}
m["inc-oas"] = {
}
m["inc-oaw"] = {
aliases = {"Early Awadhi"},
}
m["inc-obn"] = {
}
m["inc-ogu"] = {
aliases = {"Old Western Rajasthani"},
}
m["inc-ohi"] = {
aliases = {"Dehlavi"},
}
m["inc-oor"] = {
aliases = {"Old Oriya"},
}
m["inc-opa"] = {
}
m["inc-pro"] = {
}
m["ine-ana-pro"] = {
}
m["ine-bsl-pro"] = {
}
m["ine-grp-pro"] = {
}
m["ine-kal"] = {
aliases = {"Kalasma", "Kalashma", "Kalašmaic", "Kalasmaic", "Kalašmian", "Kalasmian"},
}
m["ine-pae"] = {
}
m["ine-pro"] = {
}
m["ine-toc-pro"] = {
}
m["xme-old"] = {
}
m["xme-mid"] = {
aliases = {"Atropatenian"},
}
m["xme-ker"] = {
other_names = {"Kermanian", "Central Iranian Dialects", "Central Plateau Dialects", "Central Iranian", "South Median", "Gazi", "Soi", "Sohi", "Abuzeydabadi", "Abyanehi", "Farizandi", "Jowshaqani", "Nashalji", "Qohrudi", "Yarandi", "Tari", "Sedehi", "Ardestani", "Zefrehi", "Isfahani", "Kafroni", "Varzenehi", "Khuri", "Nayini", "Anaraki", "Zoroastrian Dari", "Behdināni", "Behdinani", "Gabri", "Gavrŭni", "Gavruni", "Gabrōni", "Gabroni", "Kermani", "Yazdi", "Bidhandi", "Bijagani", "Chimehi", "Hanjani", "Komjani", "Naraqi", "Qalhari", "Varani", "Zori"},
}
m["xme-taf"] = {
}
m["xme-ttc-pro"] = {
}
m["xme-kls"] = {
aliases = {"Kalāsuri", "Kalasur", "Kalāsur"},
}
m["xme-klt"] = {
}
m["xme-ott"] = {
other_names = {"Old Tatic", "Old Azeri", "Azari", "Azeri", "Āḏarī", "Adari", "Adhari"},
}
m["ira-kms-pro"] = {
}
m["ira-mpr-pro"] = {
}
m["ira-pat-pro"] = {
}
m["ira-pro"] = {
}
m["ira-zgr-pro"] = {
}
m["xsc-pro"] = {
}
m["xsc-sar-pro"] = {
}
m["xsc-skw-pro"] = {
}
m["xsc-sak-pro"] = {
aliases = {"Proto-Sakan", "Proto-Tumshuqese-Khotanese"},
}
m["ira-sym-pro"] = {
}
m["ira-sgi-pro"] = {
}
m["ira-mny-pro"] = {
}
m["ira-shy-pro"] = {
}
m["ira-shr-pro"] = {
}
m["ira-sgc-pro"] = {
aliases = {"Proto-Sogdian"},
}
m["ira-wnj"] = {
aliases = {"Old Vanji", "Vanchi", "Vanži", "Wanji"},
}
m["iro-ere"] = {
}
m["iro-min"] = {
}
m["iro-nor-pro"] = {
}
m["iro-pro"] = {
}
m["itc-pro"] = {
}
m["itc-psa"] = {
}
m["jpx-hcj"] = {
aliases = {"Hachijo"},
}
m["jpx-pro"] = {
}
m["jpx-ryu-pro"] = {
}
m["kar-pro"] = {
}
m["kca-eas"] = {
}
m["kca-nor"] = {
}
m["kca-pro"] = {
}
m["kca-sou"] = {
}
m["khi-kho-pro"] = {
}
m["khi-kun"] = {
other_names = {"ǃOǃKung", "ǃ'OǃKung", "Kung", "Ekoka ǃKung", "Ekoka Kung", "Sekele"},
}
m["ko-ear"] = {
}
m["kro-pro"] = {
}
m["ku-pro"] = {
}
m["map-ata-pro"] = {
}
m["map-bms"] = {
}
m["map-pro"] = {
}
m["mis-hkl"] = {
aliases = {"Kelantan Peranakan Chinese", "Hokkien Kelantan", "Kelantan Local Hokkien"}
}
m["mis-idn"] = {
}
m["mis-isa"] = {
}
m["mis-jie"] = {
aliases = {"Chieh", "Kjet"},
}
m["mis-jzh"] = {
aliases = {"Haihua"},
}
m["mis-kas"] = {
aliases = {"Cassite", "Kassitic", "Kaššite"},
}
m["mis-mmd"] = {
other_names = {"Mimi of Gaudefroy-Demombynes", "Mimi-D"},
}
m["mis-mmn"] = {
other_names = {"Mimi-N"},
}
m["mis-phi"] = {
aliases = {"Philistian", "Philistinian"},
}
m["mis-rou"] = {
aliases = {"Ruanruan", "Ruan-ruan", "Juan-juan"},
}
m["mis-tdl"] = {
aliases = {"Turduli"},
}
m["mis-tdt"] = {
aliases = {"Turdetani"},
}
m["mis-tnw"] = {
aliases = {"Tangwanghua"},
}
m["mis-tuh"] = {
aliases = {"'Azha"},
}
m["mis-tuo"] = {
aliases = {"Tabghach", "Taghbach"},
}
m["mis-wuh"] = {
aliases = {"Wuwan", "Awar"},
}
m["mis-xbi"] = {
aliases = {"Serbi", "Shirwi"},
}
m["mis-xnu"] = {
aliases = {"Hsiung-nu", "Hiong-nu"},
}
m["mjg-mgl"] = {
aliases = {"Huzhu", "Huzhu Monguor"},
}
m["mjg-mgr"] = {
aliases = {"Minhe", "Minhe Monguor"},
}
m["mkh-asl-pro"] = {
}
m["mkh-ban-pro"] = {
}
m["mkh-kat-pro"] = {
}
m["mkh-khm-pro"] = {
}
m["mkh-kmr-pro"] = {
}
m["mkh-mmn"] = {
}
m["mkh-mnc-pro"] = {
}
m["mkh-mvi"] = {
}
m["mkh-pal-pro"] = {
}
m["mkh-pea-pro"] = {
}
m["mkh-pkn-pro"] = {
}
m["mkh-pro"] = { --This will be merged into 2015 aav-pro.
}
m["mnw-tha"] = {
aliases = {"Raman", "Thai Raman", "Siamese Mon"},
}
m["mkh-vie-pro"] = {
}
m["mns-cen"] = {
}
m["mns-nor"] = {
}
m["mns-pro"] = {
}
m["mns-sou"] = {
}
m["mun-pro"] = {
aliases = {"Proto-Mundan"},
}
m["myn-chl"] = { -- the stage after ''emy''
other_names = {"Cholti", "Colonial Ch'olti'", "Colonial Cholti"},
}
m["myn-pro"] = {
aliases = {"Proto-Maya"},
}
m["nai-ala"] = {
other_names = {"Alasapa", "Pinto"},
}
m["nai-bay"] = {
other_names = {"Bayougoula", "Bayou Goula", "Ischenoca"}, -- tribe merged with "Mougulasha", "Mongoulacha", "Mugulasha", "Mougulasha", "Muglahsa", "Muglasha", "Muguasha", "Imongolosha", "Houma", "Acolapissa"
}
m["nai-cal"] = {
}
m["nai-chi"] = {
}
m["nai-chu-pro"] = {
aliases = {"Proto-Chumashan"},
}
m["nai-cig"] = {
}
m["nai-ckn-pro"] = {
aliases = {"Proto-Chinook"},
}
m["nai-guz"] = {
aliases = {"Guazacapan"},
}
m["nai-hit"] = {
other_names = {"Atcik-hata", "At-pasha-shliha"},
}
m["nai-ipa"] = {
other_names = {"'Iipay 'aa", "Northern Diegueño", "Diegueño"},
}
m["nai-jtp"] = {
other_names = {"Xutiapa", "Jalapa", "Xalapa"},
}
m["nai-jum"] = {
aliases = {"Jumaitepeque", "Jumaytepec"},
}
m["nai-kat"] = {
other_names = {"Kathlamet Chinook"},
}
m["nai-klp-pro"] = {
}
m["nai-knm"] = {
}
m["nai-kum"] = {
other_names = {"Kumiai", "Central Diegueño", "Diegueño"},
}
m["nai-mac"] = {
aliases = {"Macorís", "Macorix", "Mazorij", "Mazorig", "Mazoriges"},
}
m["nai-mdu-pro"] = {
aliases = {"Proto-Maiduan"},
}
m["nai-miz-pro"] = {
aliases = {"Proto-Mixe-Zoquean"},
}
m["nai-mus-pro"] = {
aliases = {"Proto-Muskhogean", "Proto-Muskogee"},
}
m["nai-nao"] = {
}
m["nai-nrs"] = {
}
m["nai-okw"] = {
}
m["nai-per"] = {
}
m["nai-pic"] = {
}
m["nai-plp-pro"] = {
}
m["nai-pom-pro"] = {
aliases = {"Proto-Pomoan"},
}
m["nai-qng"] = {
}
m["nai-sca-pro"] = { -- NB 'sio-pro' "Proto-Siouan" which is Proto-Western Siouan
}
m["nai-sin"] = {
aliases = {"Sinacantan", "Zinacantán", "Zinacantan"},
}
m["nai-sln"] = {
}
m["nai-spt"] = {
aliases = {"Shahaptin"},
}
m["nai-tap"] = {
other_names = {"Tapachulteca", "Tapachulteco", "Tapachula"},
}
m["nai-taw"] = {
}
m["nai-teq"] = {
other_names = {"Tequistlateco", "Tequistlateca", "Chontal", "Chontol of Oaxaca", "Oaxaca Chontal", "Oaxacan Chontal"},
}
m["nai-tip"] = {
other_names = {"Tipay", "Tiipai", "Tiipay", "Jamul Tiipay", "Southern Digueño", "Diegueño"},
}
m["nai-tot-pro"] = {
}
m["nai-tsi-pro"] = {
}
m["nai-utn-pro"] = {
other_names = {"Proto-Miwok-Costanoan"},
}
m["nai-wai"] = {
aliases = {"Guaycura", "Waicura"},
}
m["nai-wji"] = {
other_names = {"Jicaque of El Palmar", "Sula"},
}
m["nai-yup"] = {
aliases = {"Jupiltepeque", "Yupiltepec", "Jupiltepec", "Xupiltepec"},
}
m["nan-dat"] = {
aliases = {"Datian"},
}
m["nan-hbl"] = {
aliases = {"Hokkienese", "Quanzhang", "Fukien", "Banlam", "Banlamese", "Ban-lam"},
}
m["nan-hlh"] = {
aliases = {"Hailufeng", "Hoklo Min", "Hai Lok Hong"},
}
m["nan-lnx"] = {
aliases = {"Longyan", "Liongna"},
}
m["nan-tws"] = {
aliases = {"Teochew Min", "Chiuchow", "Teo-Swa", "Teo-Swa Min", "Tio-Sua"},
}
m["nan-zhe"] = {
aliases = {"Zhenan"},
}
m["nan-zsh"] = {
aliases = {"Sanxiang", "Samheung", "Sahiu"},
}
m["ngf-pro"] = {
}
m["nic-bco-pro"] = {
}
m["nic-bod-pro"] = {
}
m["nic-eov-pro"] = {
}
m["nic-gns-pro"] = {
}
m["nic-grf-pro"] = {
}
m["nic-gur-pro"] = {
}
m["nic-jkn-pro"] = {
}
m["nic-lcr-pro"] = {
}
m["nic-ogo-pro"] = {
}
m["nic-ovo-pro"] = {
}
m["nic-plt-pro"] = {
}
m["nic-pro"] = {
}
m["nic-ubg-pro"] = {
}
m["nic-ucr-pro"] = {
}
m["nic-vco-pro"] = {
}
m["njo-jgl"] = {
}
m["njo-mng"] = {
}
m["nub-har"] = {
aliases = {"Ḥarāza"},
}
m["nub-pro"] = {
}
m["omq-cha-pro"] = {
}
m["omq-maz-pro"] = {
aliases = {"Proto-Mazatecan"},
}
m["omq-mix-pro"] = {
}
m["omq-mxt-pro"] = {
}
m["omq-otp-pro"] = {
}
m["omq-pro"] = {
aliases = {"Proto-Otomanguean", "Proto-Oto-Mangue"},
}
m["omq-sjq"] = {
}
m["omq-tel"] = {
}
m["omq-teo"] = {
}
m["omq-tri-pro"] = {
aliases = {"Proto-Trique"},
}
m["omq-zap-pro"] = {
}
m["omq-zpc-pro"] = {
}
m["omv-aro-pro"] = {
}
m["omv-diz-pro"] = {
aliases = {"Proto-Maji"},
}
m["omv-pro"] = {
}
m["oto-otm-pro"] = {
}
m["oto-pro"] = {
}
m["ngf-bin-pro"] = {
}
m["paa-kmn"] = {
aliases = {"Komnzo", "Kómnjo", "Komnjo", "Kamundjo", "Rouku"},
}
m["paa-kwn"] = {
}
m["paa-lei"] = {
}
m["paa-nha-pro"] = {
}
m["paa-nun"] = {
}
m["phi-din"] = {
}
m["phi-kal-pro"] = {
aliases = {"Proto-Calamian"},
}
m["phi-nag"] = {
}
m["phi-pro"] = {
}
m["poz-abi"] = {
other_names = {"Sembuak", "Tubu"},
}
m["poz-bal"] = {
}
m["poz-btk-pro"] = {
}
m["poz-cet-pro"] = {
}
m["poz-hce-pro"] = {
other_names = {"Proto-South Halmahera - West New Guinea"},
}
m["poz-lgx-pro"] = {
}
m["poz-mcm-pro"] = {
}
m["poz-mic-pro"] = {
}
m["poz-mly-pro"] = {
}
m["poz-msa-pro"] = {
}
m["poz-oce-pro"] = {
}
m["poz-pep-pro"] = {
aliases = {"Proto-Eastern-Polynesian", "Proto-East Polynesian", "Proto-East-Polynesian"},
}
m["poz-pnp-pro"] = {
}
m["poz-pol-pro"] = {
}
m["poz-pro"] = {
other_names = {"Proto-Western Malayo-Polynesian"}, -- Western is subsumed into general Proto-MP
}
m["poz-sml"] = {
aliases = {"Sarawak"},
}
m["poz-ssw-pro"] = {
}
m["poz-swa-pro"] = {
}
m["poz-ter"] = {
aliases = {"Terengganu"},
}
m["pqe-pro"] = {
}
m["pra-niy"] = {
}
m["qfa-adm-pro"] = {
}
m["qfa-bet-pro"] = {
aliases = {"Proto-Tai-Be"},
}
m["qfa-cka-pro"] = {
}
m["qfa-hur-pro"] = {
}
m["qfa-kad-pro"] = {
}
m["qfa-kms-pro"] = {
}
m["qfa-kor-pro"] = {
}
m["qfa-kra-pro"] = {
}
m["qfa-lic-pro"] = {
}
m["qfa-onb-pro"] = {
aliases = {"Proto-Ong-Be", "Proto-Bê"},
}
m["qfa-ong-pro"] = {
}
m["qfa-tak-pro"] = {
aliases = {"Proto-Tai-Kadai"},
}
m["qfa-yen-pro"] = {
}
m["qfa-yuk-pro"] = {
}
m["qwe-kch"] = {
other_names = {"Kichwa shimi", "Runashimi", "Runa", "Quichua", "Quecha", "Inga", "Chimborazo", "Imbabura Highland Kichwa", "Cañar Highland Quecha", "Quechua"},
}
m["qwe-pro"] = {
}
m["roa-ang"] = {
other_names = {"Craonnais", "Baugeois", "Saumurois"},
}
m["roa-bbn"] = {
other_names = {"Bourbonnais", "Berrichon", "Moulins", "Allier", "Nivernais", "Haut-Berrichon", "Bas-Berrichon"},
}
m["roa-brg"] = {
other_names = {"Burgundian", "Bregognon", "Dijonnais", "Morvandiau", "Morvandeau", "Morvan", "Bourguignon-Morvandiau", "Mâconnais", "Brionnais", "Brionnais-Charolais", "Auxerrois", "Beaunois", "Langrois", "Valsaônois", "Verduno-Chalonnais", "Sédelocien"},
}
m["roa-can"] = {
}
m["roa-cha"] = {
other_names = {"Bassignot", "Langrois", "Sennonais", "Vallage", "Troyen", "Briard", "Der", "Perthois", "Rémois", "Argonnais", "Porcien", "Ardennais", "Sugny"},
}
m["roa-fcm"] = {
other_names = {"Frainc-Comtou", "Comtois", "Jurassien", "Ajoulot", "Vâdais", "Taignon", "Bisontin", "Bousbot"},
}
m["roa-gal"] = {
}
m["roa-gib"] = {
}
m["roa-gis"] = {
}
m["roa-leo"] = {
}
m["roa-lor"] = {
other_names = {"Gaumais", "Vosgien", "Welche", "Argonnais", "Longovicien", "Messin", "Nancéien", "Spinalien", "Déodatien"},
}
m["roa-oca"] = {
aliases = {"Medieval Catalan"},
}
m["roa-ole"] = {
aliases = {"Medieval Leonese"},
}
m["roa-ona"] = {
aliases = {"Navarro-Aragonese", "Medieval Navarro-Aragonese", "Old Aragonese", "Medieval Aragonese"},
}
m["roa-opt"] = {
aliases = {"Old Galician Portuguese", "Old Galician–Portuguese", "Old Galician", "Old Portuguese", "Galician-Portuguese", "Galician Portuguese", "Galician–Portuguese", "Medieval Galician-Portuguese", "Medieval Galician Portuguese", "Medieval Galician–Portuguese", "Medieval Galician", "Medieval Portuguese", "Galaic-Portuguese"},
}
m["roa-orl"] = {
other_names = {"Beauceron", "Solognot", "Gâtinais", "Blaisois", "Vendômois"},
}
m["roa-poi"] = {
other_names = {"Poitevin", "Saintongeais", "Maraîchin"},
}
m["roa-tar"] = {
}
m["sai-all"] = {
other_names = {"Alyentiyak", "Huarpe", "Warpe"},
}
m["sai-and"] = { -- not to be confused with 'cbc' or 'ano'
other_names = {"Miranya", "Miranha", "Miranha Carapana-Tapuya", "Miraña-Carapana-Tapuyo", "Andokero", "Miranya-Karapana-Tapuyo", "Miraña", "Carapana"},
}
m["sai-ayo"] = {
aliases = {"Ayoman", "Ayamán", "Ayaman"},
}
m["sai-bae"] = {
aliases = {"Baenã", "Baenán", "Baena"},
}
m["sai-bag"] = {
other_names = {"Patagón de Bagua"},
}
m["sai-bet"] = {
other_names = {"Betoy", "Betoya", "Betoye", "Betoi-Jirara", "Jirara"},
}
m["sai-bor-pro"] = {
other_names = {"Proto-Bora-Muinane", "Proto-Bora-Muiname"},
}
m["sai-cac"] = {
other_names = {"Kakán", "Diaguita", "Cacan", "Kakan", "Calchaquí", "Chaka", "Kaka", "Kaká", "Caca", "Caca-Diaguita", "Catamarcano", "Capayán", "Capayana", "Yacampis"},
}
m["sai-caq"] = {
other_names = {"Cara", "Kara"},
}
m["sai-car-pro"] = {
}
m["sai-cat"] = {
}
m["sai-cer-pro"] = {
other_names = {"Proto-Amazonian Jê"},
}
m["sai-chi"] = {
}
m["sai-chn"] = {
aliases = {"Chana"},
}
m["sai-chp"] = {
aliases = {"Txapacura", "Xapacura", "Guapore", "Šapakura", "Txapakura", "Txapakúra", "Xapakúra"},
}
m["sai-chr"] = {
aliases = {"Charrúa", "Charruá"},
}
m["sai-chu"] = {
aliases = {"Churoya"},
}
m["sai-cje-pro"] = {
other_names = {"Proto-Akuwẽ"},
}
m["sai-cmg"] = {
aliases = {"Comechingón", "Comechingona", "Comechingone"},
}
m["sai-cno"] = {
other_names = {"Chonos", "Caucau"},
}
m["sai-cnr"] = {
aliases = {"Cañar"},
}
m["sai-coe"] = {
aliases = {"Koeruna"},
}
m["sai-col"] = {
aliases = {"Colan"},
}
m["sai-cop"] = {
}
m["sai-crd"] = {
other_names = {"Coroado"},
}
m["sai-ctq"] = {
aliases = {"Catuquinarú", "Katukinaru"},
}
m["sai-cul"] = {
other_names = {"Culle", "Kulyi", "Ilinga", "Linga"},
}
m["sai-cva"] = {
}
m["sai-esm"] = {
other_names = {"Esmeraldeño", "Atacame", "Takame"},
}
m["sai-ewa"] = {
}
m["sai-gam"] = {
aliases = {"Gamella", "Acobu", "Curinsi", "Barbados"},
}
m["sai-gay"] = {
aliases = {"Gayon"},
}
m["sai-gmo"] = {
other_names = {"Wamo", "Santa Rosa", "San Jose", "Barinas", "Guamotey", "Guama"},
}
m["sai-gua"] = {
aliases = {"Guachi", "Wachí", "Wachi"},
}
m["sai-gue"] = {
aliases = {"Guenoa"},
}
m["sai-hau"] = {
other_names = {"Manek'enk"},
}
m["sai-jee-pro"] = {
other_names = {"Proto-Gê", "Proto-Jean", "Proto-Gean", "Proto-Jê-Kaingang", "Proto-Ye"},
}
m["sai-jko"] = {
aliases = {"Geicó", "Jeicó", "Jaikó", "Geikó", "Yeikó", "Jeiko", "Geico", "Jeico", "Jaiko", "Geiko", "Yeiko", "Eyco"},
}
m["sai-jrj"] = {
}
m["sai-kat"] = { -- contrast xoo, kzw, sai-xoc
other_names = {"Catrimbi", "Catembri", "Kariri de Mirandela", "Mirandela", "Kariri", "Kiriri"},
}
m["sai-mal"] = {
aliases = {"Malali"},
}
m["sai-mar"] = {
}
m["sai-mat"] = {
other_names = {"Matanauí", "Matanaui", "Matanawü", "Mitandua", "Moutoniway"},
}
m["sai-mcn"] = {
aliases = {"Mokana"},
}
m["sai-men"] = {
aliases = {"Menién"},
}
m["sai-mil"] = {
other_names = {"Milykayak", "Huarpe", "Warpe"},
}
m["sai-mlb"] = {
aliases = {"Malibú", "Malebú"},
}
m["sai-msk"] = {
aliases = {"Masakara", "Masacará", "Masacara"},
}
m["sai-muc"] = {
other_names = {"Mucuchi", "Mokochi", "Mocochí", "Mirripú", "Maripú", "Mucuchí-Maripú"},
}
m["sai-mue"] = {
aliases = {"Muellamués"},
}
m["sai-muz"] = {
}
m["sai-mys"] = {
other_names = {"Mayna", "Maina", "Rimachu"},
}
m["sai-nat"] = {
other_names = {"Natu", "Peagaxinan"},
}
m["sai-nje-pro"] = {
other_names = {"Proto-Core Jê"},
}
m["sai-opo"] = {
other_names = {"Opon", "Opón-Karare", "Opón-Carare", "Carare", "Carare-Opón"},
}
m["sai-oto"] = {
aliases = {"Otomako", "Otomacan", "Otomac", "Otomak"},
}
m["sai-pal"] = {
}
m["sai-pam"] = {
aliases = {"Pamiwa"},
}
m["sai-par"] = {
aliases = {"Paratio", "Prarto"},
}
m["sai-peb"] = {
aliases = {"Peva"},
varieties = {"Cauwachi", "Caumari", "Pacaya"}, -- per Wikipedia, according to the American anthropologist and linguist John Alden Mason (1950)
}
m["sai-pnz"] = {
aliases = {"Pansaleo"},
}
m["sai-prh"] = {
}
m["sai-ptg"] = {
other_names = {"Patagón de Perico"},
}
m["sai-pur"] = {
aliases = {"Purukoto", "Purucotó", "Purucoto"},
}
m["sai-pyg"] = {
aliases = {"Payawá", "Payagua"},
}
m["sai-pyk"] = {
aliases = {"Gavião-Pykobjê", "Pykobjê-Gavião", "Gavião", "Pyhcopji", "Gavião-Pyhcopji"},
}
m["sai-qmb"] = {
other_names = {"Kimbaya", "Quindío", "Quindio", "Quindo"},
}
m["sai-qtm"] = {
aliases = {"Quitemoca"},
}
m["sai-rab"] = {
}
m["sai-ram"] = {
}
m["sai-sac"] = {
other_names = {"Sacata", "Zácata", "Chillao"},
}
m["sai-san"] = {
aliases = {"Sanavirón", "Sanabirón", "Sanabiron", "Sanavirona", "Zanavirona"},
}
m["sai-sap"] = {
aliases = {"Zapará", "Zapara"},
}
m["sai-sec"] = {
other_names = {"Sek", "Sec"},
}
m["sai-sin"] = {
other_names = {"Cenúfana", "Zenúfana", "Cinifaná", "Sinufana", "Sinú", "Cenú", "Zenú", "Finzenú", "Fincenú", "Pancenú", "Sutagao"},
}
m["sai-sje-pro"] = {
}
m["sai-tab"] = {
other_names = {"Aconipa"},
}
m["sai-tal"] = {
other_names = {"Atalán", "Tallan", "Tallanca", "Atalan", "Sek"},
}
m["sai-tap"] = {
other_names = {"Tapayúna", "Kajkwakhrattxi"},
}
m["sai-tar-pro"] = {
}
m["sai-teu"] = {
aliases = {"Tehues", "Teuéx"},
}
m["sai-tim"] = {
other_names = {"Cuica", "Timote-Cuica"},
}
m["sai-tpr"] = {
aliases = {"Taparito"},
}
m["sai-trr"] = {
other_names = {"Caratiú"},
}
m["sai-wai"] = {
aliases = {"Waitaka", "Waitacá", "Waitaca", "Goytacá", "Goitacá", "Guaitacá", "Guiatacá", "Guiatacás", "Goiatacá", "Goiatacás", "Guaiatacá", "Goytacaz", "Goitacaz", "Goyataca", "Aitacaz", "Uetacaz", "Uetacá", "Outacá", "Ouetacá", "Eutacá", "Itacaz", "Vaitacá"},
}
m["sai-way"] = {
aliases = {"Wajumará", "Wajumara", "Wayumará", "Azumara", "Guimara"},
}
m["sai-wit-pro"] = {
other_names = {"Proto-Huitotoan", "Proto-Uitotoan"},
}
m["sai-wnm"] = {
other_names = {"Wañam", "Wanyam", "Huanyam", "Uanham", "Abitana"},
}
m["sai-xoc"] = { -- contrast xoo, kzw, sai-kat
other_names = {"Xoco", "Chocó", "Shokó", "Shoko", "Shocó", "Shoco", "Choco", "Chocaz", "Kariri-Xocó", "Kariri-Xoco", "Kariri-Shoko", "Cariri-Chocó", "Xukuru-Kariri", "Xucuru-Kariri", "Xucuru-Cariri", "Xukurú-Kirirí"},
}
m["sai-yao"] = {
aliases = {"Yao", "Jaoi", "Yaoi", "Yaio", "Anacaioury"},
}
m["sai-yar"] = { -- not the same family as 'suy'
aliases = {"Yaruma"},
}
m["sai-yri"] = {
aliases = {"Jurí"},
}
m["sai-yup"] = {
other_names = {"Yupuá", "Yupúa", "Jupua", "Jupuá", "Jupúa", "Hiupiá", "Yupuá-Duriña", "Duriña"},
}
m["sai-yur"] = {
aliases = {"Yurumangui", "Yurimangí", "Yurimangi", "Yurimanguí", "Yurimangui"},
}
m["sal-pro"] = {
aliases = {"Proto-Salishan"},
}
m["sdv-daj-pro"] = {
}
m["sdv-eje-pro"] = {
}
m["sdv-nil-pro"] = {
}
m["sdv-nyi-pro"] = {
}
m["sdv-tmn-pro"] = {
}
m["sel-nor"] = {
aliases = {"Taz Selkup"},
}
m["sel-pro"] = {
}
m["sel-sou"] = {
}
m["sem-amm"] = {
}
m["sem-amo"] = {
aliases = {"Amoritic"},
}
m["sem-cha"] = {
aliases = {"Cheha", "Čäha", "Čäxa"},
}
m["sem-dad"] = {
other_names = {"Dadanite", "Lihyanite", "Lihyanitic"},
}
m["sem-dum"] = {
}
m["sem-has"] = {
}
m["sem-his"] = {
other_names = {"Thamudic E"},
}
m["sem-mhr"] = {
other_names = {"Muher Gurage", "Muxar", "Muxər", "Muhər", "Muḫər"},
}
m["sem-pro"] = {
}
m["sem-saf"] = {
}
m["sem-sam"] = {
other_names = {"Sam'alian"},
}
m["sem-srb"] = {
}
m["sem-tay"] = {
other_names = {"Taymanite", "Thamudic A"},
}
m["sem-tha"] = {
}
m["sem-wes-pro"] = {
}
m["sio-pro"] = { -- NB this is not Proto-Siouan-Catawban 'nai-sca-pro'
}
m["sit-aao-pro"] = {
}
m["sit-bok"] = {
other_names = {"Ramo", "Pailibo"},
}
m["sit-bai-pro"] = {
}
m["sit-ban"] = {
}
m["sit-bdi-pro"] = {
}
m["sit-cai"] = {
}
m["sit-cha"] = {
}
m["sit-ers-pro"] = {
}
m["sit-hrs-pro"] = {
}
m["sit-jap"] = {
other_names = {"Chabao", "Kuru"},
}
m["sit-kha-pro"] = {
}
m["sit-khb-pro"] = {
}
m["sit-khp-pro"] = {
}
m["sit-khw-pro"] = {
}
m["sit-kon-pro"] = {
}
m["sit-liz"] = {
}
m["sit-lnj"] = {
}
m["sit-lrn"] = {
}
m["sit-luu-pro"] = {
}
m["sit-nas-pro"] = {
}
m["sit-prn"] = {
}
m["sit-pro"] = {
}
m["sit-sit"] = {
other_names = {"Eastern rGyalrong", "rGyalrong", "Rgyalrong", "rGyalrongic", "Gyalrong", "Gyarong", "rGyarong", "Gyarung", "Jiarong", "Jiarongyu", "Jyarong", "Jyarung", "Yelong", "Kuru"},
}
m["sit-tam-pro"] = {
aliases = {"Proto-Tamang"},
}
m["sit-tan-pro"] = {
}
m["sit-tgm"] = {
}
m["sit-tng-pro"] = {
}
m["sit-tos"] = {
}
m["sit-tsh"] = {
other_names = {"Caodeng", "Sidaba", "rGyalrong", "Rgyalrong", "Jiarong", "Gyarung", "Kuru"},
}
m["sit-zbu"] = {
other_names = {"Ribu", "Rdzong'bur", "Rdzongmbur", "Showu", "rGyalrong", "Rgyalrong", "Jiarong", "Gyarung", "Kuru"},
}
m["sla-pro"] = {
aliases = {"Common Slavic"},
}
m["smi-pro"] = {
aliases = {"Proto-Sami"},
}
m["son-pro"] = {
aliases = {"Proto-Songhai"},
}
m["sqj-pro"] = {
}
m["ssa-klk-pro"] = {
aliases = {"Proto-Rub"},
}
m["ssa-kom-pro"] = {
}
m["ssa-pro"] = {
}
m["syd-pro"] = {
}
m["tai-pro"] = {
}
m["tai-swe-pro"] = {
}
m["tbq-bdg-pro"] = {
}
m["tbq-blg"] = {
aliases = {"Pai-lang", "Pailang"},
}
m["tbq-brm-pro"] = {
}
m["tbq-gkh"] = {
aliases = {"Gɔkhý", "Gɔkhy", "Gouke"},
}
m["tbq-kuk-pro"] = {
other_names = {"Proto-Kukish"},
}
m["tbq-lal-pro"] = {
}
m["tbq-laz"] = {
other_names = {"Lare", "Shuitianhua"},
}
m["tbq-lob-pro"] = {
}
m["tbq-lol-pro"] = {
aliases = {"Proto-Yi", "Proto-Ngwi", "Proto-Nisoic"},
}
m["tbq-mil"] = {
}
m["tbq-mor"] = {
aliases = {"Morān"},
}
m["tbq-ngo"] = {
other_names = {"Ngachang", "Achang"},
}
-- tbq-pro is now etymology-only
m["trk-dkh"] = {
aliases = {"Dukha"},
}
m["trk-eog"] = {
}
m["trk-oat"] = {
}
m["trk-pro"] = {
}
m["tup-gua-pro"] = {
}
m["tup-kab"] = {
aliases = {"Kabixiana", "Cabixiana", "Cabishiana", "Kapishana", "Capishana", "Kapišana", "Cabichiana", "Capichana", "Capixana"},
}
m["tuw-alk"] = {
aliases = {"Alechuka"},
}
m["tuw-bal"] = {
}
m["tuw-kkl"] = {
aliases = {"Chinese Kyakala"},
}
m["tuw-kli"] = {
aliases = {"Kilen", "Kirin", "Kila", "Hezhe", "Qile'en"},
}
m["tup-pro"] = {
}
m["tuw-pro"] = {
}
m["tuw-sol"] = {
}
m["urj-fin-pro"] = {
}
m["urj-koo"] = {
aliases = {"Old Permian"},
}
m["urj-kuk"] = {
aliases = {"Kukkuzi Votic", "Kukkuzi Ingrian", "Kukkusi"},
}
m["urj-kya"] = {
}
m["urj-mdv-pro"] = {
}
m["urj-prm-pro"] = {
}
m["urj-pro"] = {
other_names = {"Proto-Finno-Ugric", "Proto-Finno-Permic"}, -- PFU and PFP are subsumed into PU per [[Wiktionary:Beer parlour/2015/January#Merging Finno-Volgaic, Finno-Samic, Finno-Permic and Finno-Ugric into Uralic]]
}
m["urj-ugr-pro"] = {
}
m["xgn-pro"] = {
}
m["xnd-pro"] = {
other_names = {"Proto-Na-Dené", "Proto-Athabaskan-Eyak-Tlingit"},
}
m["yok-bvy"] = {
other_names = {"Tulamni-Hometwoli", "Tulamni", "Tulamne", "Tuolumne", "Tawitchi", "Hometwoli", "Taneshach"},
}
m["yok-dly"] = {
other_names = {"Far Northern Valley Yokuts", "Yachikumne", "Yachikumni", "Chulamni", "Lower San Joaquin", "Lakisamni", "Tawalimni"},
}
m["yok-gsy"] = {
}
m["yok-kry"] = {
other_names = {"Choinimni", "Choynimni", "Ayticha", "Kocheyali", "Ayitcha", "Michahay", "Chukaymina", "Chukaimina"},
}
m["yok-nvy"] = {
other_names = {"Chukchansi", "Kechayi", "Dumna", "Chawchila", "Noptinte", "Nopṭinṭe", "Nopthrinthre", "Nopchinchi", "Takin"},
}
m["yok-ply"] = {
other_names = {"Paleuyami", "Altinin", "Poso Creek", "Poso Creek Yokuts"},
}
m["yok-svy"] = {
other_names = {"Yawelmani", "Tachi", "Koyeti", "Nutunutu", "Chunut", "Wo'lasi", "Choynok", "Choinok", "Wechihit"},
}
m["yok-tky"] = {
other_names = {"Wikchamni", "Wukchamni", "Wukchumni", "Yawdanchi"},
}
m["ypk-pro"] = {
}
m["yrk-for"] = {
}
m["yrk-tun"] = {
other_names = {"Yurak"},
varieties = {
{ "Western Nenets" },
{ "Eastern Nenets" },
}
}
m["zhx-min-pro"] = {
}
m["zhx-sht"] = {
other_names = {"Xiangnan Tuhua", "Yuebei Tuhua", "Shipo", "Shina"},
}
m["zhx-sic"] = {
aliases = {"Sichuanese Mandarin"},
}
m["zhx-tai"] = {
aliases = {"Toishanese"},
}
m["zle-ono"] = {
}
m["zle-ort"] = {
}
m["zls-chs"] = {
}
m["zlw-ocs"] = {
}
m["zlw-opl"] = {
}
m["zlw-osk"] = {
}
m["zlw-slv"] = {
}
return m
kisiymaacgnqerns0s9zfsypg6fso1d
Mòideal:documentation/functions/translit
828
16859
86401
2026-07-23T04:49:00Z
Altronic
4137
Copy from English Wiktionary
86401
Scribunto
text/plain
return function (title, cats)
return require "Module:documentation/translit".documentation(title.text)
end
e1k835t64ug4nbv5cc5tavq4u0y8qdc
Mòideal:documentation/translit
828
16860
86402
2026-07-23T04:49:33Z
Altronic
4137
Copy from English Wiktionary
86402
Scribunto
text/plain
local export = {}
local function fake_frame(args, parent_args)
return {
args = args,
getParent = function()
return {
args = parent_args,
}
end
}
end
function get_by_code(code)
return require("Module:languages").getByCode(code, nil, true, true) or require("Module:scripts").getByCode(code)
end
local function get_code_from_title_without_namespace(title_without_namespace)
local prefix = title_without_namespace:match("^(.+)%-translit%f[/%z]")
if not prefix then
error("Base segment of title should end in -translit: " .. title_without_namespace)
end
local code = prefix
local lang_or_family_or_script = get_by_code(code)
if not lang_or_family_or_script then
-- Accommodate modules with multiple codes in the title.
-- The first code should be used.
-- Right now it strips segments from the end until it finds a match:
-- Module:Deva-Beng-translit -> Deva-Beng -> Deva
-- Module:pra-Deva-translit -> pra-Deva -> pra
-- Module:Deva-mnc-Mong-translit -> Deva-mnc-Mong -> Deva-mnc -> Deva
while true do
new_code = code:match("^(.+)%-[^%-]+$")
if new_code then
code = new_code
else
break
end
lang_or_family_or_script = get_by_code(new_code)
if lang_or_family_or_script then
break
end
end
end
return code, lang_or_family_or_script
end
function export.documentation(title_without_namespace, explanation)
local code, lang_or_family_or_script = get_code_from_title_without_namespace(title_without_namespace)
return export.documentation_from_code(code, explanation, title_without_namespace)
end
function export.documentation_from_code(code, explanation, title_without_namespace)
local lang_or_family_or_script = get_by_code(code)
if not lang_or_family_or_script then
return "Language code in page name (<code>" .. code .. "</code>) not recognized."
end
local category_name = lang_or_family_or_script:getCategoryName()
local transliteration_input
if lang_or_family_or_script:hasType("script") then
transliteration_input = "text in the [[:Category:" .. category_name .. "|" .. category_name .. "]]"
elseif lang_or_family_or_script:hasType("family") then
transliteration_input = "text in one of the [[:Category:" .. category_name .. "|" .. category_name .. "]]"
else -- language
transliteration_input = "[[:Category:" .. category_name .. "|" .. category_name .. "]] text"
end
local tr_page = "WT:" .. mw.ustring.upper(code) .. " TR"
return "This module will transliterate " .. transliteration_input
.. (explanation and " " .. explanation or "")
.. (mw.title.new(tr_page).exists and " per [[" .. tr_page .. "]]" or "")
.. ". "
.. require("Module:documentation").translitModuleLangList({args = { [1] = title_without_namespace:gsub("/documentation$", "") }})
.. [=[
The module should preferably not be called directly from templates or other modules.
To use it from a template, use <code>{{[[Template:xlit|xlit]]}}</code>.
Within a module, use [[Module:languages#Language:transliterate]].
For testcases, see [[Module:]=] .. title_without_namespace:gsub("/documentation$", "") .. [=[/testcases]].
== Functions ==
; <code>tr(text, lang, sc)</code>
: Transliterates a given piece of <code>text</code> written in the script specified by the code <code>sc</code>, and language specified by the code <code>lang</code>.
: When the transliteration fails, returns <code>nil</code>.]=]
.. require("Module:module categorization").categorize(fake_frame({
is_template = "1",
[1] = title_without_namespace,
}, {
[1] = code,
}))
end
function export.documentation_template(frame)
-- Parameters to {{translit module documentation}}:
-- |code|description
-- Ignore code because we get it from the page name.
local pagename = mw.title.getCurrentTitle().text -- DO NOT replace with mw.loadData("Module:headword/data").pagename as we need the root portion
local args = frame:getParent().args
if args[1] and get_code_from_title_without_namespace(pagename) ~= args[1] then
-- [[Special:WhatLinksHere/Wiktionary:Tracking/translit/input different from title]]
require("Module:debug").track("translit/input different from title")
end
if args[1] then
return export.documentation_from_code(args[1], args[2], pagename)
else
return export.documentation(pagename, args[2])
end
end
return export
1kq0tpjnr98zsmfzzk66a3ix1zn8t7i
Teamplaid:mention
10
16861
86405
2026-07-23T11:03:33Z
Altronic
4137
Chaidh duilleag le "<includeonly><onlyinclude>{{safesubst:<noinclude/>#invoke:links/templates|l_term_t|face=term}}</onlyinclude></includeonly><!-- -->{{m|gd|briathar}}{{documentation}}" a chruthachadh
86405
wikitext
text/x-wiki
<includeonly><onlyinclude>{{safesubst:<noinclude/>#invoke:links/templates|l_term_t|face=term}}</onlyinclude></includeonly><!--
-->{{m|gd|briathar}}{{documentation}}
no6cty8dzq9od550rukr5l364ow7mls
Teamplaid:m
10
16862
86406
2026-07-23T11:04:07Z
Altronic
4137
Chaidh an duilleag ath-stiùireadh gu [[Teamplaid:mention]]
86406
wikitext
text/x-wiki
#REDIRECT[[Template:mention]]
pdoye6mpmgshng84bapco8a910yn56y
Mòideal:data/namespaces
828
16863
86407
2026-07-23T11:05:18Z
Altronic
4137
Copy from English Wiktionary
86407
Scribunto
text/plain
local data = {}
local gsub = string.gsub
local next = next
local ulower = require("Module:string utilities").lower
for _, namespace in next, mw.site.namespaces do
local prefix = ulower((gsub(namespace.name, "_", " ")))
data[prefix] = prefix
for _, alias in next, namespace.aliases do
data[ulower((gsub(alias, "_", " ")))] = prefix
end
end
return data
qbasf1wuit8dmyo26k8ojua3okgfc5l
Mòideal:data/interwikis
828
16864
86411
2026-07-23T11:49:11Z
Altronic
4137
Copy from English Wiktionary
86411
Scribunto
text/plain
local data = {}
local gsub = string.gsub
local next = next
local ulower = require("Module:string utilities").lower
for _, interwiki in next, mw.site.interwikiMap() do
data[ulower((gsub(interwiki.prefix, "_", " ")))] =
interwiki.isCurrentWiki and "current" or
interwiki.isLocal and "local" or
"external"
end
return data
sj16ikp1xmfv7lsala0b7bnu9dlinm5
Teamplaid:pagename
10
16865
86412
2026-07-23T11:49:57Z
Altronic
4137
Copy from English Wiktionary
86412
wikitext
text/x-wiki
<includeonly>{{safesubst:<noinclude/>#invoke:pages/templates|pagename_t}}</includeonly><noinclude><!--
-->{{documentation}}</noinclude>
5eyxwd521bez42cgt9zhe8dipmghpbi
Mòideal:data/entities
828
16866
86413
2026-07-23T11:50:40Z
Altronic
4137
Copy from English Wiktionary
86413
Scribunto
text/plain
return {
aacute = "\195\161", -- á
Aacute = "\195\129", -- Á
abreve = "\196\131", -- ă
Abreve = "\196\130", -- Ă
ac = "\226\136\190", -- ∾
acd = "\226\136\191", -- ∿
acE = "\226\136\190\204\179", -- ∾̳
acirc = "\195\162", -- â
Acirc = "\195\130", -- Â
acute = "\194\180", -- ´
acy = "\208\176", -- а
Acy = "\208\144", -- А
aelig = "\195\166", -- æ
AElig = "\195\134", -- Æ
af = "\226\129\161", -- [function application]
afr = "\240\157\148\158", -- 𝔞
Afr = "\240\157\148\132", -- 𝔄
agrave = "\195\160", -- à
Agrave = "\195\128", -- À
alefsym = "\226\132\181", -- ℵ
aleph = "\226\132\181", -- ℵ
alpha = "\206\177", -- α
Alpha = "\206\145", -- Α
amacr = "\196\129", -- ā
Amacr = "\196\128", -- Ā
amalg = "\226\168\191", -- ⨿
amp = "\38", -- &
AMP = "\38", -- &
["and"] = "\226\136\167", -- ∧
And = "\226\169\147", -- ⩓
andand = "\226\169\149", -- ⩕
andd = "\226\169\156", -- ⩜
andslope = "\226\169\152", -- ⩘
andv = "\226\169\154", -- ⩚
ang = "\226\136\160", -- ∠
ange = "\226\166\164", -- ⦤
angle = "\226\136\160", -- ∠
angmsd = "\226\136\161", -- ∡
angmsdaa = "\226\166\168", -- ⦨
angmsdab = "\226\166\169", -- ⦩
angmsdac = "\226\166\170", -- ⦪
angmsdad = "\226\166\171", -- ⦫
angmsdae = "\226\166\172", -- ⦬
angmsdaf = "\226\166\173", -- ⦭
angmsdag = "\226\166\174", -- ⦮
angmsdah = "\226\166\175", -- ⦯
angrt = "\226\136\159", -- ∟
angrtvb = "\226\138\190", -- ⊾
angrtvbd = "\226\166\157", -- ⦝
angsph = "\226\136\162", -- ∢
angst = "\195\133", -- Å
angzarr = "\226\141\188", -- ⍼
aogon = "\196\133", -- ą
Aogon = "\196\132", -- Ą
aopf = "\240\157\149\146", -- 𝕒
Aopf = "\240\157\148\184", -- 𝔸
ap = "\226\137\136", -- ≈
apacir = "\226\169\175", -- ⩯
ape = "\226\137\138", -- ≊
apE = "\226\169\176", -- ⩰
apid = "\226\137\139", -- ≋
apos = "\39", -- '
ApplyFunction = "\226\129\161", -- [function application]
approx = "\226\137\136", -- ≈
approxeq = "\226\137\138", -- ≊
aring = "\195\165", -- å
Aring = "\195\133", -- Å
ascr = "\240\157\146\182", -- 𝒶
Ascr = "\240\157\146\156", -- 𝒜
Assign = "\226\137\148", -- ≔
ast = "\42", -- *
asymp = "\226\137\136", -- ≈
asympeq = "\226\137\141", -- ≍
atilde = "\195\163", -- ã
Atilde = "\195\131", -- Ã
auml = "\195\164", -- ä
Auml = "\195\132", -- Ä
awconint = "\226\136\179", -- ∳
awint = "\226\168\145", -- ⨑
backcong = "\226\137\140", -- ≌
backepsilon = "\207\182", -- ϶
backprime = "\226\128\181", -- ‵
backsim = "\226\136\189", -- ∽
backsimeq = "\226\139\141", -- ⋍
Backslash = "\226\136\150", -- ∖
Barv = "\226\171\167", -- ⫧
barvee = "\226\138\189", -- ⊽
barwed = "\226\140\133", -- ⌅
Barwed = "\226\140\134", -- ⌆
barwedge = "\226\140\133", -- ⌅
bbrk = "\226\142\181", -- ⎵
bbrktbrk = "\226\142\182", -- ⎶
bcong = "\226\137\140", -- ≌
bcy = "\208\177", -- б
Bcy = "\208\145", -- Б
bdquo = "\226\128\158", -- „
becaus = "\226\136\181", -- ∵
because = "\226\136\181", -- ∵
Because = "\226\136\181", -- ∵
bemptyv = "\226\166\176", -- ⦰
bepsi = "\207\182", -- ϶
bernou = "\226\132\172", -- ℬ
Bernoullis = "\226\132\172", -- ℬ
beta = "\206\178", -- β
Beta = "\206\146", -- Β
beth = "\226\132\182", -- ℶ
between = "\226\137\172", -- ≬
bfr = "\240\157\148\159", -- 𝔟
Bfr = "\240\157\148\133", -- 𝔅
bigcap = "\226\139\130", -- ⋂
bigcirc = "\226\151\175", -- ◯
bigcup = "\226\139\131", -- ⋃
bigodot = "\226\168\128", -- ⨀
bigoplus = "\226\168\129", -- ⨁
bigotimes = "\226\168\130", -- ⨂
bigsqcup = "\226\168\134", -- ⨆
bigstar = "\226\152\133", -- ★
bigtriangledown = "\226\150\189", -- ▽
bigtriangleup = "\226\150\179", -- △
biguplus = "\226\168\132", -- ⨄
bigvee = "\226\139\129", -- ⋁
bigwedge = "\226\139\128", -- ⋀
bkarow = "\226\164\141", -- ⤍
blacklozenge = "\226\167\171", -- ⧫
blacksquare = "\226\150\170", -- ▪
blacktriangle = "\226\150\180", -- ▴
blacktriangledown = "\226\150\190", -- ▾
blacktriangleleft = "\226\151\130", -- ◂
blacktriangleright = "\226\150\184", -- ▸
blank = "\226\144\163", -- ␣
blk12 = "\226\150\146", -- ▒
blk14 = "\226\150\145", -- ░
blk34 = "\226\150\147", -- ▓
block = "\226\150\136", -- █
bne = "\61\226\131\165", -- =⃥
bnequiv = "\226\137\161\226\131\165", -- ≡⃥
bnot = "\226\140\144", -- ⌐
bNot = "\226\171\173", -- ⫭
bopf = "\240\157\149\147", -- 𝕓
Bopf = "\240\157\148\185", -- 𝔹
bot = "\226\138\165", -- ⊥
bottom = "\226\138\165", -- ⊥
bowtie = "\226\139\136", -- ⋈
boxbox = "\226\167\137", -- ⧉
boxdl = "\226\148\144", -- ┐
boxdL = "\226\149\149", -- ╕
boxDl = "\226\149\150", -- ╖
boxDL = "\226\149\151", -- ╗
boxdr = "\226\148\140", -- ┌
boxdR = "\226\149\146", -- ╒
boxDr = "\226\149\147", -- ╓
boxDR = "\226\149\148", -- ╔
boxh = "\226\148\128", -- ─
boxH = "\226\149\144", -- ═
boxhd = "\226\148\172", -- ┬
boxhD = "\226\149\165", -- ╥
boxHd = "\226\149\164", -- ╤
boxHD = "\226\149\166", -- ╦
boxhu = "\226\148\180", -- ┴
boxhU = "\226\149\168", -- ╨
boxHu = "\226\149\167", -- ╧
boxHU = "\226\149\169", -- ╩
boxminus = "\226\138\159", -- ⊟
boxplus = "\226\138\158", -- ⊞
boxtimes = "\226\138\160", -- ⊠
boxul = "\226\148\152", -- ┘
boxuL = "\226\149\155", -- ╛
boxUl = "\226\149\156", -- ╜
boxUL = "\226\149\157", -- ╝
boxur = "\226\148\148", -- └
boxuR = "\226\149\152", -- ╘
boxUr = "\226\149\153", -- ╙
boxUR = "\226\149\154", -- ╚
boxv = "\226\148\130", -- │
boxV = "\226\149\145", -- ║
boxvh = "\226\148\188", -- ┼
boxvH = "\226\149\170", -- ╪
boxVh = "\226\149\171", -- ╫
boxVH = "\226\149\172", -- ╬
boxvl = "\226\148\164", -- ┤
boxvL = "\226\149\161", -- ╡
boxVl = "\226\149\162", -- ╢
boxVL = "\226\149\163", -- ╣
boxvr = "\226\148\156", -- ├
boxvR = "\226\149\158", -- ╞
boxVr = "\226\149\159", -- ╟
boxVR = "\226\149\160", -- ╠
bprime = "\226\128\181", -- ‵
breve = "\203\152", -- ˘
Breve = "\203\152", -- ˘
brvbar = "\194\166", -- ¦
bscr = "\240\157\146\183", -- 𝒷
Bscr = "\226\132\172", -- ℬ
bsemi = "\226\129\143", -- ⁏
bsim = "\226\136\189", -- ∽
bsime = "\226\139\141", -- ⋍
bsol = "\92", -- \
bsolb = "\226\167\133", -- ⧅
bsolhsub = "\226\159\136", -- ⟈
bull = "\226\128\162", -- •
bullet = "\226\128\162", -- •
bump = "\226\137\142", -- ≎
bumpe = "\226\137\143", -- ≏
bumpE = "\226\170\174", -- ⪮
bumpeq = "\226\137\143", -- ≏
Bumpeq = "\226\137\142", -- ≎
cacute = "\196\135", -- ć
Cacute = "\196\134", -- Ć
cap = "\226\136\169", -- ∩
Cap = "\226\139\146", -- ⋒
capand = "\226\169\132", -- ⩄
capbrcup = "\226\169\137", -- ⩉
capcap = "\226\169\139", -- ⩋
capcup = "\226\169\135", -- ⩇
capdot = "\226\169\128", -- ⩀
CapitalDifferentialD = "\226\133\133", -- ⅅ
caps = "\226\136\169\239\184\128", -- ∩︀
caret = "\226\129\129", -- ⁁
caron = "\203\135", -- ˇ
Cayleys = "\226\132\173", -- ℭ
ccaps = "\226\169\141", -- ⩍
ccaron = "\196\141", -- č
Ccaron = "\196\140", -- Č
ccedil = "\195\167", -- ç
Ccedil = "\195\135", -- Ç
ccirc = "\196\137", -- ĉ
Ccirc = "\196\136", -- Ĉ
Cconint = "\226\136\176", -- ∰
ccups = "\226\169\140", -- ⩌
ccupssm = "\226\169\144", -- ⩐
cdot = "\196\139", -- ċ
Cdot = "\196\138", -- Ċ
cedil = "\194\184", -- ¸
Cedilla = "\194\184", -- ¸
cemptyv = "\226\166\178", -- ⦲
cent = "\194\162", -- ¢
centerdot = "\194\183", -- ·
CenterDot = "\194\183", -- ·
cfr = "\240\157\148\160", -- 𝔠
Cfr = "\226\132\173", -- ℭ
chcy = "\209\135", -- ч
CHcy = "\208\167", -- Ч
check = "\226\156\147", -- ✓
checkmark = "\226\156\147", -- ✓
chi = "\207\135", -- χ
Chi = "\206\167", -- Χ
cir = "\226\151\139", -- ○
circ = "\203\134", -- ˆ
circeq = "\226\137\151", -- ≗
circlearrowleft = "\226\134\186", -- ↺
circlearrowright = "\226\134\187", -- ↻
circledast = "\226\138\155", -- ⊛
circledcirc = "\226\138\154", -- ⊚
circleddash = "\226\138\157", -- ⊝
CircleDot = "\226\138\153", -- ⊙
circledR = "\194\174", -- ®
circledS = "\226\147\136", -- Ⓢ
CircleMinus = "\226\138\150", -- ⊖
CirclePlus = "\226\138\149", -- ⊕
CircleTimes = "\226\138\151", -- ⊗
cire = "\226\137\151", -- ≗
cirE = "\226\167\131", -- ⧃
cirfnint = "\226\168\144", -- ⨐
cirmid = "\226\171\175", -- ⫯
cirscir = "\226\167\130", -- ⧂
ClockwiseContourIntegral = "\226\136\178", -- ∲
CloseCurlyDoubleQuote = "\226\128\157", -- ”
CloseCurlyQuote = "\226\128\153", -- ’
clubs = "\226\153\163", -- ♣
clubsuit = "\226\153\163", -- ♣
colon = "\58", -- :
Colon = "\226\136\183", -- ∷
colone = "\226\137\148", -- ≔
Colone = "\226\169\180", -- ⩴
coloneq = "\226\137\148", -- ≔
comma = "\44", -- ,
commat = "\64", -- @
comp = "\226\136\129", -- ∁
compfn = "\226\136\152", -- ∘
complement = "\226\136\129", -- ∁
complexes = "\226\132\130", -- ℂ
cong = "\226\137\133", -- ≅
congdot = "\226\169\173", -- ⩭
Congruent = "\226\137\161", -- ≡
conint = "\226\136\174", -- ∮
Conint = "\226\136\175", -- ∯
ContourIntegral = "\226\136\174", -- ∮
copf = "\240\157\149\148", -- 𝕔
Copf = "\226\132\130", -- ℂ
coprod = "\226\136\144", -- ∐
Coproduct = "\226\136\144", -- ∐
copy = "\194\169", -- ©
COPY = "\194\169", -- ©
copysr = "\226\132\151", -- ℗
CounterClockwiseContourIntegral = "\226\136\179", -- ∳
crarr = "\226\134\181", -- ↵
cross = "\226\156\151", -- ✗
Cross = "\226\168\175", -- ⨯
cscr = "\240\157\146\184", -- 𝒸
Cscr = "\240\157\146\158", -- 𝒞
csub = "\226\171\143", -- ⫏
csube = "\226\171\145", -- ⫑
csup = "\226\171\144", -- ⫐
csupe = "\226\171\146", -- ⫒
ctdot = "\226\139\175", -- ⋯
cudarrl = "\226\164\184", -- ⤸
cudarrr = "\226\164\181", -- ⤵
cuepr = "\226\139\158", -- ⋞
cuesc = "\226\139\159", -- ⋟
cularr = "\226\134\182", -- ↶
cularrp = "\226\164\189", -- ⤽
cup = "\226\136\170", -- ∪
Cup = "\226\139\147", -- ⋓
cupbrcap = "\226\169\136", -- ⩈
cupcap = "\226\169\134", -- ⩆
CupCap = "\226\137\141", -- ≍
cupcup = "\226\169\138", -- ⩊
cupdot = "\226\138\141", -- ⊍
cupor = "\226\169\133", -- ⩅
cups = "\226\136\170\239\184\128", -- ∪︀
curarr = "\226\134\183", -- ↷
curarrm = "\226\164\188", -- ⤼
curlyeqprec = "\226\139\158", -- ⋞
curlyeqsucc = "\226\139\159", -- ⋟
curlyvee = "\226\139\142", -- ⋎
curlywedge = "\226\139\143", -- ⋏
curren = "\194\164", -- ¤
curvearrowleft = "\226\134\182", -- ↶
curvearrowright = "\226\134\183", -- ↷
cuvee = "\226\139\142", -- ⋎
cuwed = "\226\139\143", -- ⋏
cwconint = "\226\136\178", -- ∲
cwint = "\226\136\177", -- ∱
cylcty = "\226\140\173", -- ⌭
dagger = "\226\128\160", -- †
Dagger = "\226\128\161", -- ‡
daleth = "\226\132\184", -- ℸ
darr = "\226\134\147", -- ↓
dArr = "\226\135\147", -- ⇓
Darr = "\226\134\161", -- ↡
dash = "\226\128\144", -- ‐
dashv = "\226\138\163", -- ⊣
Dashv = "\226\171\164", -- ⫤
dbkarow = "\226\164\143", -- ⤏
dblac = "\203\157", -- ˝
dcaron = "\196\143", -- ď
Dcaron = "\196\142", -- Ď
dcy = "\208\180", -- д
Dcy = "\208\148", -- Д
dd = "\226\133\134", -- ⅆ
DD = "\226\133\133", -- ⅅ
ddagger = "\226\128\161", -- ‡
ddarr = "\226\135\138", -- ⇊
DDotrahd = "\226\164\145", -- ⤑
ddotseq = "\226\169\183", -- ⩷
deg = "\194\176", -- °
Del = "\226\136\135", -- ∇
delta = "\206\180", -- δ
Delta = "\206\148", -- Δ
demptyv = "\226\166\177", -- ⦱
dfisht = "\226\165\191", -- ⥿
dfr = "\240\157\148\161", -- 𝔡
Dfr = "\240\157\148\135", -- 𝔇
dHar = "\226\165\165", -- ⥥
dharl = "\226\135\131", -- ⇃
dharr = "\226\135\130", -- ⇂
DiacriticalAcute = "\194\180", -- ´
DiacriticalDot = "\203\153", -- ˙
DiacriticalDoubleAcute = "\203\157", -- ˝
DiacriticalGrave = "\96", -- `
DiacriticalTilde = "\203\156", -- ˜
diam = "\226\139\132", -- ⋄
diamond = "\226\139\132", -- ⋄
Diamond = "\226\139\132", -- ⋄
diamondsuit = "\226\153\166", -- ♦
diams = "\226\153\166", -- ♦
die = "\194\168", -- ¨
DifferentialD = "\226\133\134", -- ⅆ
digamma = "\207\157", -- ϝ
disin = "\226\139\178", -- ⋲
div = "\195\183", -- ÷
divide = "\195\183", -- ÷
divideontimes = "\226\139\135", -- ⋇
divonx = "\226\139\135", -- ⋇
djcy = "\209\146", -- ђ
DJcy = "\208\130", -- Ђ
dlcorn = "\226\140\158", -- ⌞
dlcrop = "\226\140\141", -- ⌍
dollar = "\36", -- $
dopf = "\240\157\149\149", -- 𝕕
Dopf = "\240\157\148\187", -- 𝔻
dot = "\203\153", -- ˙
Dot = "\194\168", -- ¨
DotDot = "\226\131\156", -- ⃜
doteq = "\226\137\144", -- ≐
doteqdot = "\226\137\145", -- ≑
DotEqual = "\226\137\144", -- ≐
dotminus = "\226\136\184", -- ∸
dotplus = "\226\136\148", -- ∔
dotsquare = "\226\138\161", -- ⊡
doublebarwedge = "\226\140\134", -- ⌆
DoubleContourIntegral = "\226\136\175", -- ∯
DoubleDot = "\194\168", -- ¨
DoubleDownArrow = "\226\135\147", -- ⇓
DoubleLeftArrow = "\226\135\144", -- ⇐
DoubleLeftRightArrow = "\226\135\148", -- ⇔
DoubleLeftTee = "\226\171\164", -- ⫤
DoubleLongLeftArrow = "\226\159\184", -- ⟸
DoubleLongLeftRightArrow = "\226\159\186", -- ⟺
DoubleLongRightArrow = "\226\159\185", -- ⟹
DoubleRightArrow = "\226\135\146", -- ⇒
DoubleRightTee = "\226\138\168", -- ⊨
DoubleUpArrow = "\226\135\145", -- ⇑
DoubleUpDownArrow = "\226\135\149", -- ⇕
DoubleVerticalBar = "\226\136\165", -- ∥
downarrow = "\226\134\147", -- ↓
Downarrow = "\226\135\147", -- ⇓
DownArrow = "\226\134\147", -- ↓
DownArrowBar = "\226\164\147", -- ⤓
DownArrowUpArrow = "\226\135\181", -- ⇵
DownBreve = "\204\145", -- ̑
downdownarrows = "\226\135\138", -- ⇊
downharpoonleft = "\226\135\131", -- ⇃
downharpoonright = "\226\135\130", -- ⇂
DownLeftRightVector = "\226\165\144", -- ⥐
DownLeftTeeVector = "\226\165\158", -- ⥞
DownLeftVector = "\226\134\189", -- ↽
DownLeftVectorBar = "\226\165\150", -- ⥖
DownRightTeeVector = "\226\165\159", -- ⥟
DownRightVector = "\226\135\129", -- ⇁
DownRightVectorBar = "\226\165\151", -- ⥗
DownTee = "\226\138\164", -- ⊤
DownTeeArrow = "\226\134\167", -- ↧
drbkarow = "\226\164\144", -- ⤐
drcorn = "\226\140\159", -- ⌟
drcrop = "\226\140\140", -- ⌌
dscr = "\240\157\146\185", -- 𝒹
Dscr = "\240\157\146\159", -- 𝒟
dscy = "\209\149", -- ѕ
DScy = "\208\133", -- Ѕ
dsol = "\226\167\182", -- ⧶
dstrok = "\196\145", -- đ
Dstrok = "\196\144", -- Đ
dtdot = "\226\139\177", -- ⋱
dtri = "\226\150\191", -- ▿
dtrif = "\226\150\190", -- ▾
duarr = "\226\135\181", -- ⇵
duhar = "\226\165\175", -- ⥯
dwangle = "\226\166\166", -- ⦦
dzcy = "\209\159", -- џ
DZcy = "\208\143", -- Џ
dzigrarr = "\226\159\191", -- ⟿
eacute = "\195\169", -- é
Eacute = "\195\137", -- É
easter = "\226\169\174", -- ⩮
ecaron = "\196\155", -- ě
Ecaron = "\196\154", -- Ě
ecir = "\226\137\150", -- ≖
ecirc = "\195\170", -- ê
Ecirc = "\195\138", -- Ê
ecolon = "\226\137\149", -- ≕
ecy = "\209\141", -- э
Ecy = "\208\173", -- Э
eDDot = "\226\169\183", -- ⩷
edot = "\196\151", -- ė
eDot = "\226\137\145", -- ≑
Edot = "\196\150", -- Ė
ee = "\226\133\135", -- ⅇ
efDot = "\226\137\146", -- ≒
efr = "\240\157\148\162", -- 𝔢
Efr = "\240\157\148\136", -- 𝔈
eg = "\226\170\154", -- ⪚
egrave = "\195\168", -- è
Egrave = "\195\136", -- È
egs = "\226\170\150", -- ⪖
egsdot = "\226\170\152", -- ⪘
el = "\226\170\153", -- ⪙
Element = "\226\136\136", -- ∈
elinters = "\226\143\167", -- ⏧
ell = "\226\132\147", -- ℓ
els = "\226\170\149", -- ⪕
elsdot = "\226\170\151", -- ⪗
emacr = "\196\147", -- ē
Emacr = "\196\146", -- Ē
empty = "\226\136\133", -- ∅
emptyset = "\226\136\133", -- ∅
EmptySmallSquare = "\226\151\187", -- ◻
emptyv = "\226\136\133", -- ∅
EmptyVerySmallSquare = "\226\150\171", -- ▫
emsp = "\226\128\131", -- [em space]
emsp13 = "\226\128\132", -- [three-per-em space]
emsp14 = "\226\128\133", -- [four-per-em space]
eng = "\197\139", -- ŋ
ENG = "\197\138", -- Ŋ
ensp = "\226\128\130", -- [en space]
eogon = "\196\153", -- ę
Eogon = "\196\152", -- Ę
eopf = "\240\157\149\150", -- 𝕖
Eopf = "\240\157\148\188", -- 𝔼
epar = "\226\139\149", -- ⋕
eparsl = "\226\167\163", -- ⧣
eplus = "\226\169\177", -- ⩱
epsi = "\206\181", -- ε
epsilon = "\206\181", -- ε
Epsilon = "\206\149", -- Ε
epsiv = "\207\181", -- ϵ
eqcirc = "\226\137\150", -- ≖
eqcolon = "\226\137\149", -- ≕
eqsim = "\226\137\130", -- ≂
eqslantgtr = "\226\170\150", -- ⪖
eqslantless = "\226\170\149", -- ⪕
Equal = "\226\169\181", -- ⩵
equals = "\61", -- =
EqualTilde = "\226\137\130", -- ≂
equest = "\226\137\159", -- ≟
Equilibrium = "\226\135\140", -- ⇌
equiv = "\226\137\161", -- ≡
equivDD = "\226\169\184", -- ⩸
eqvparsl = "\226\167\165", -- ⧥
erarr = "\226\165\177", -- ⥱
erDot = "\226\137\147", -- ≓
escr = "\226\132\175", -- ℯ
Escr = "\226\132\176", -- ℰ
esdot = "\226\137\144", -- ≐
esim = "\226\137\130", -- ≂
Esim = "\226\169\179", -- ⩳
eta = "\206\183", -- η
Eta = "\206\151", -- Η
eth = "\195\176", -- ð
ETH = "\195\144", -- Ð
euml = "\195\171", -- ë
Euml = "\195\139", -- Ë
euro = "\226\130\172", -- €
excl = "\33", -- !
exist = "\226\136\131", -- ∃
Exists = "\226\136\131", -- ∃
expectation = "\226\132\176", -- ℰ
exponentiale = "\226\133\135", -- ⅇ
ExponentialE = "\226\133\135", -- ⅇ
fallingdotseq = "\226\137\146", -- ≒
fcy = "\209\132", -- ф
Fcy = "\208\164", -- Ф
female = "\226\153\128", -- ♀
ffilig = "\239\172\131", -- ffi
fflig = "\239\172\128", -- ff
ffllig = "\239\172\132", -- ffl
ffr = "\240\157\148\163", -- 𝔣
Ffr = "\240\157\148\137", -- 𝔉
filig = "\239\172\129", -- fi
FilledSmallSquare = "\226\151\188", -- ◼
FilledVerySmallSquare = "\226\150\170", -- ▪
fjlig = "\102\106", -- fj
flat = "\226\153\173", -- ♭
fllig = "\239\172\130", -- fl
fltns = "\226\150\177", -- ▱
fnof = "\198\146", -- ƒ
fopf = "\240\157\149\151", -- 𝕗
Fopf = "\240\157\148\189", -- 𝔽
forall = "\226\136\128", -- ∀
ForAll = "\226\136\128", -- ∀
fork = "\226\139\148", -- ⋔
forkv = "\226\171\153", -- ⫙
Fouriertrf = "\226\132\177", -- ℱ
fpartint = "\226\168\141", -- ⨍
frac12 = "\194\189", -- ½
frac13 = "\226\133\147", -- ⅓
frac14 = "\194\188", -- ¼
frac15 = "\226\133\149", -- ⅕
frac16 = "\226\133\153", -- ⅙
frac18 = "\226\133\155", -- ⅛
frac23 = "\226\133\148", -- ⅔
frac25 = "\226\133\150", -- ⅖
frac34 = "\194\190", -- ¾
frac35 = "\226\133\151", -- ⅗
frac38 = "\226\133\156", -- ⅜
frac45 = "\226\133\152", -- ⅘
frac56 = "\226\133\154", -- ⅚
frac58 = "\226\133\157", -- ⅝
frac78 = "\226\133\158", -- ⅞
frasl = "\226\129\132", -- ⁄
frown = "\226\140\162", -- ⌢
fscr = "\240\157\146\187", -- 𝒻
Fscr = "\226\132\177", -- ℱ
gacute = "\199\181", -- ǵ
gamma = "\206\179", -- γ
Gamma = "\206\147", -- Γ
gammad = "\207\157", -- ϝ
Gammad = "\207\156", -- Ϝ
gap = "\226\170\134", -- ⪆
gbreve = "\196\159", -- ğ
Gbreve = "\196\158", -- Ğ
Gcedil = "\196\162", -- Ģ
gcirc = "\196\157", -- ĝ
Gcirc = "\196\156", -- Ĝ
gcy = "\208\179", -- г
Gcy = "\208\147", -- Г
gdot = "\196\161", -- ġ
Gdot = "\196\160", -- Ġ
ge = "\226\137\165", -- ≥
gE = "\226\137\167", -- ≧
gel = "\226\139\155", -- ⋛
gEl = "\226\170\140", -- ⪌
geq = "\226\137\165", -- ≥
geqq = "\226\137\167", -- ≧
geqslant = "\226\169\190", -- ⩾
ges = "\226\169\190", -- ⩾
gescc = "\226\170\169", -- ⪩
gesdot = "\226\170\128", -- ⪀
gesdoto = "\226\170\130", -- ⪂
gesdotol = "\226\170\132", -- ⪄
gesl = "\226\139\155\239\184\128", -- ⋛︀
gesles = "\226\170\148", -- ⪔
gfr = "\240\157\148\164", -- 𝔤
Gfr = "\240\157\148\138", -- 𝔊
gg = "\226\137\171", -- ≫
Gg = "\226\139\153", -- ⋙
ggg = "\226\139\153", -- ⋙
gimel = "\226\132\183", -- ℷ
gjcy = "\209\147", -- ѓ
GJcy = "\208\131", -- Ѓ
gl = "\226\137\183", -- ≷
gla = "\226\170\165", -- ⪥
glE = "\226\170\146", -- ⪒
glj = "\226\170\164", -- ⪤
gnap = "\226\170\138", -- ⪊
gnapprox = "\226\170\138", -- ⪊
gne = "\226\170\136", -- ⪈
gnE = "\226\137\169", -- ≩
gneq = "\226\170\136", -- ⪈
gneqq = "\226\137\169", -- ≩
gnsim = "\226\139\167", -- ⋧
gopf = "\240\157\149\152", -- 𝕘
Gopf = "\240\157\148\190", -- 𝔾
grave = "\96", -- `
GreaterEqual = "\226\137\165", -- ≥
GreaterEqualLess = "\226\139\155", -- ⋛
GreaterFullEqual = "\226\137\167", -- ≧
GreaterGreater = "\226\170\162", -- ⪢
GreaterLess = "\226\137\183", -- ≷
GreaterSlantEqual = "\226\169\190", -- ⩾
GreaterTilde = "\226\137\179", -- ≳
gscr = "\226\132\138", -- ℊ
Gscr = "\240\157\146\162", -- 𝒢
gsim = "\226\137\179", -- ≳
gsime = "\226\170\142", -- ⪎
gsiml = "\226\170\144", -- ⪐
gt = "\62", -- >
Gt = "\226\137\171", -- ≫
GT = "\62", -- >
gtcc = "\226\170\167", -- ⪧
gtcir = "\226\169\186", -- ⩺
gtdot = "\226\139\151", -- ⋗
gtlPar = "\226\166\149", -- ⦕
gtquest = "\226\169\188", -- ⩼
gtrapprox = "\226\170\134", -- ⪆
gtrarr = "\226\165\184", -- ⥸
gtrdot = "\226\139\151", -- ⋗
gtreqless = "\226\139\155", -- ⋛
gtreqqless = "\226\170\140", -- ⪌
gtrless = "\226\137\183", -- ≷
gtrsim = "\226\137\179", -- ≳
gvertneqq = "\226\137\169\239\184\128", -- ≩︀
gvnE = "\226\137\169\239\184\128", -- ≩︀
Hacek = "\203\135", -- ˇ
hairsp = "\226\128\138", -- [hair space]
half = "\194\189", -- ½
hamilt = "\226\132\139", -- ℋ
hardcy = "\209\138", -- ъ
HARDcy = "\208\170", -- Ъ
harr = "\226\134\148", -- ↔
hArr = "\226\135\148", -- ⇔
harrcir = "\226\165\136", -- ⥈
harrw = "\226\134\173", -- ↭
Hat = "\94", -- ^
hbar = "\226\132\143", -- ℏ
hcirc = "\196\165", -- ĥ
Hcirc = "\196\164", -- Ĥ
hearts = "\226\153\165", -- ♥
heartsuit = "\226\153\165", -- ♥
hellip = "\226\128\166", -- …
hercon = "\226\138\185", -- ⊹
hfr = "\240\157\148\165", -- 𝔥
Hfr = "\226\132\140", -- ℌ
HilbertSpace = "\226\132\139", -- ℋ
hksearow = "\226\164\165", -- ⤥
hkswarow = "\226\164\166", -- ⤦
hoarr = "\226\135\191", -- ⇿
homtht = "\226\136\187", -- ∻
hookleftarrow = "\226\134\169", -- ↩
hookrightarrow = "\226\134\170", -- ↪
hopf = "\240\157\149\153", -- 𝕙
Hopf = "\226\132\141", -- ℍ
horbar = "\226\128\149", -- ―
HorizontalLine = "\226\148\128", -- ─
hscr = "\240\157\146\189", -- 𝒽
Hscr = "\226\132\139", -- ℋ
hslash = "\226\132\143", -- ℏ
hstrok = "\196\167", -- ħ
Hstrok = "\196\166", -- Ħ
HumpDownHump = "\226\137\142", -- ≎
HumpEqual = "\226\137\143", -- ≏
hybull = "\226\129\131", -- ⁃
hyphen = "\226\128\144", -- ‐
iacute = "\195\173", -- í
Iacute = "\195\141", -- Í
ic = "\226\129\163", -- [invisible separator]
icirc = "\195\174", -- î
Icirc = "\195\142", -- Î
icy = "\208\184", -- и
Icy = "\208\152", -- И
Idot = "\196\176", -- İ
iecy = "\208\181", -- е
IEcy = "\208\149", -- Е
iexcl = "\194\161", -- ¡
iff = "\226\135\148", -- ⇔
ifr = "\240\157\148\166", -- 𝔦
Ifr = "\226\132\145", -- ℑ
igrave = "\195\172", -- ì
Igrave = "\195\140", -- Ì
ii = "\226\133\136", -- ⅈ
iiiint = "\226\168\140", -- ⨌
iiint = "\226\136\173", -- ∭
iinfin = "\226\167\156", -- ⧜
iiota = "\226\132\169", -- ℩
ijlig = "\196\179", -- ij
IJlig = "\196\178", -- IJ
Im = "\226\132\145", -- ℑ
imacr = "\196\171", -- ī
Imacr = "\196\170", -- Ī
image = "\226\132\145", -- ℑ
ImaginaryI = "\226\133\136", -- ⅈ
imagline = "\226\132\144", -- ℐ
imagpart = "\226\132\145", -- ℑ
imath = "\196\177", -- ı
imof = "\226\138\183", -- ⊷
imped = "\198\181", -- Ƶ
Implies = "\226\135\146", -- ⇒
["in"] = "\226\136\136", -- ∈
incare = "\226\132\133", -- ℅
infin = "\226\136\158", -- ∞
infintie = "\226\167\157", -- ⧝
inodot = "\196\177", -- ı
int = "\226\136\171", -- ∫
Int = "\226\136\172", -- ∬
intcal = "\226\138\186", -- ⊺
integers = "\226\132\164", -- ℤ
Integral = "\226\136\171", -- ∫
intercal = "\226\138\186", -- ⊺
Intersection = "\226\139\130", -- ⋂
intlarhk = "\226\168\151", -- ⨗
intprod = "\226\168\188", -- ⨼
InvisibleComma = "\226\129\163", -- [invisible separator]
InvisibleTimes = "\226\129\162", -- [invisible times]
iocy = "\209\145", -- ё
IOcy = "\208\129", -- Ё
iogon = "\196\175", -- į
Iogon = "\196\174", -- Į
iopf = "\240\157\149\154", -- 𝕚
Iopf = "\240\157\149\128", -- 𝕀
iota = "\206\185", -- ι
Iota = "\206\153", -- Ι
iprod = "\226\168\188", -- ⨼
iquest = "\194\191", -- ¿
iscr = "\240\157\146\190", -- 𝒾
Iscr = "\226\132\144", -- ℐ
isin = "\226\136\136", -- ∈
isindot = "\226\139\181", -- ⋵
isinE = "\226\139\185", -- ⋹
isins = "\226\139\180", -- ⋴
isinsv = "\226\139\179", -- ⋳
isinv = "\226\136\136", -- ∈
it = "\226\129\162", -- [invisible times]
itilde = "\196\169", -- ĩ
Itilde = "\196\168", -- Ĩ
iukcy = "\209\150", -- і
Iukcy = "\208\134", -- І
iuml = "\195\175", -- ï
Iuml = "\195\143", -- Ï
jcirc = "\196\181", -- ĵ
Jcirc = "\196\180", -- Ĵ
jcy = "\208\185", -- й
Jcy = "\208\153", -- Й
jfr = "\240\157\148\167", -- 𝔧
Jfr = "\240\157\148\141", -- 𝔍
jmath = "\200\183", -- ȷ
jopf = "\240\157\149\155", -- 𝕛
Jopf = "\240\157\149\129", -- 𝕁
jscr = "\240\157\146\191", -- 𝒿
Jscr = "\240\157\146\165", -- 𝒥
jsercy = "\209\152", -- ј
Jsercy = "\208\136", -- Ј
jukcy = "\209\148", -- є
Jukcy = "\208\132", -- Є
kappa = "\206\186", -- κ
Kappa = "\206\154", -- Κ
kappav = "\207\176", -- ϰ
kcedil = "\196\183", -- ķ
Kcedil = "\196\182", -- Ķ
kcy = "\208\186", -- к
Kcy = "\208\154", -- К
kfr = "\240\157\148\168", -- 𝔨
Kfr = "\240\157\148\142", -- 𝔎
kgreen = "\196\184", -- ĸ
khcy = "\209\133", -- х
KHcy = "\208\165", -- Х
kjcy = "\209\156", -- ќ
KJcy = "\208\140", -- Ќ
kopf = "\240\157\149\156", -- 𝕜
Kopf = "\240\157\149\130", -- 𝕂
kscr = "\240\157\147\128", -- 𝓀
Kscr = "\240\157\146\166", -- 𝒦
lAarr = "\226\135\154", -- ⇚
lacute = "\196\186", -- ĺ
Lacute = "\196\185", -- Ĺ
laemptyv = "\226\166\180", -- ⦴
lagran = "\226\132\146", -- ℒ
lambda = "\206\187", -- λ
Lambda = "\206\155", -- Λ
lang = "\226\159\168", -- ⟨
Lang = "\226\159\170", -- ⟪
langd = "\226\166\145", -- ⦑
langle = "\226\159\168", -- ⟨
lap = "\226\170\133", -- ⪅
Laplacetrf = "\226\132\146", -- ℒ
laquo = "\194\171", -- «
larr = "\226\134\144", -- ←
lArr = "\226\135\144", -- ⇐
Larr = "\226\134\158", -- ↞
larrb = "\226\135\164", -- ⇤
larrbfs = "\226\164\159", -- ⤟
larrfs = "\226\164\157", -- ⤝
larrhk = "\226\134\169", -- ↩
larrlp = "\226\134\171", -- ↫
larrpl = "\226\164\185", -- ⤹
larrsim = "\226\165\179", -- ⥳
larrtl = "\226\134\162", -- ↢
lat = "\226\170\171", -- ⪫
latail = "\226\164\153", -- ⤙
lAtail = "\226\164\155", -- ⤛
late = "\226\170\173", -- ⪭
lates = "\226\170\173\239\184\128", -- ⪭︀
lbarr = "\226\164\140", -- ⤌
lBarr = "\226\164\142", -- ⤎
lbbrk = "\226\157\178", -- ❲
lbrace = "\123", -- {
lbrack = "\91", -- [
lbrke = "\226\166\139", -- ⦋
lbrksld = "\226\166\143", -- ⦏
lbrkslu = "\226\166\141", -- ⦍
lcaron = "\196\190", -- ľ
Lcaron = "\196\189", -- Ľ
lcedil = "\196\188", -- ļ
Lcedil = "\196\187", -- Ļ
lceil = "\226\140\136", -- ⌈
lcub = "\123", -- {
lcy = "\208\187", -- л
Lcy = "\208\155", -- Л
ldca = "\226\164\182", -- ⤶
ldquo = "\226\128\156", -- “
ldquor = "\226\128\158", -- „
ldrdhar = "\226\165\167", -- ⥧
ldrushar = "\226\165\139", -- ⥋
ldsh = "\226\134\178", -- ↲
le = "\226\137\164", -- ≤
lE = "\226\137\166", -- ≦
LeftAngleBracket = "\226\159\168", -- ⟨
leftarrow = "\226\134\144", -- ←
Leftarrow = "\226\135\144", -- ⇐
LeftArrow = "\226\134\144", -- ←
LeftArrowBar = "\226\135\164", -- ⇤
LeftArrowRightArrow = "\226\135\134", -- ⇆
leftarrowtail = "\226\134\162", -- ↢
LeftCeiling = "\226\140\136", -- ⌈
LeftDoubleBracket = "\226\159\166", -- ⟦
LeftDownTeeVector = "\226\165\161", -- ⥡
LeftDownVector = "\226\135\131", -- ⇃
LeftDownVectorBar = "\226\165\153", -- ⥙
LeftFloor = "\226\140\138", -- ⌊
leftharpoondown = "\226\134\189", -- ↽
leftharpoonup = "\226\134\188", -- ↼
leftleftarrows = "\226\135\135", -- ⇇
leftrightarrow = "\226\134\148", -- ↔
Leftrightarrow = "\226\135\148", -- ⇔
LeftRightArrow = "\226\134\148", -- ↔
leftrightarrows = "\226\135\134", -- ⇆
leftrightharpoons = "\226\135\139", -- ⇋
leftrightsquigarrow = "\226\134\173", -- ↭
LeftRightVector = "\226\165\142", -- ⥎
LeftTee = "\226\138\163", -- ⊣
LeftTeeArrow = "\226\134\164", -- ↤
LeftTeeVector = "\226\165\154", -- ⥚
leftthreetimes = "\226\139\139", -- ⋋
LeftTriangle = "\226\138\178", -- ⊲
LeftTriangleBar = "\226\167\143", -- ⧏
LeftTriangleEqual = "\226\138\180", -- ⊴
LeftUpDownVector = "\226\165\145", -- ⥑
LeftUpTeeVector = "\226\165\160", -- ⥠
LeftUpVector = "\226\134\191", -- ↿
LeftUpVectorBar = "\226\165\152", -- ⥘
LeftVector = "\226\134\188", -- ↼
LeftVectorBar = "\226\165\146", -- ⥒
leg = "\226\139\154", -- ⋚
lEg = "\226\170\139", -- ⪋
leq = "\226\137\164", -- ≤
leqq = "\226\137\166", -- ≦
leqslant = "\226\169\189", -- ⩽
les = "\226\169\189", -- ⩽
lescc = "\226\170\168", -- ⪨
lesdot = "\226\169\191", -- ⩿
lesdoto = "\226\170\129", -- ⪁
lesdotor = "\226\170\131", -- ⪃
lesg = "\226\139\154\239\184\128", -- ⋚︀
lesges = "\226\170\147", -- ⪓
lessapprox = "\226\170\133", -- ⪅
lessdot = "\226\139\150", -- ⋖
lesseqgtr = "\226\139\154", -- ⋚
lesseqqgtr = "\226\170\139", -- ⪋
LessEqualGreater = "\226\139\154", -- ⋚
LessFullEqual = "\226\137\166", -- ≦
LessGreater = "\226\137\182", -- ≶
lessgtr = "\226\137\182", -- ≶
LessLess = "\226\170\161", -- ⪡
lesssim = "\226\137\178", -- ≲
LessSlantEqual = "\226\169\189", -- ⩽
LessTilde = "\226\137\178", -- ≲
lfisht = "\226\165\188", -- ⥼
lfloor = "\226\140\138", -- ⌊
lfr = "\240\157\148\169", -- 𝔩
Lfr = "\240\157\148\143", -- 𝔏
lg = "\226\137\182", -- ≶
lgE = "\226\170\145", -- ⪑
lHar = "\226\165\162", -- ⥢
lhard = "\226\134\189", -- ↽
lharu = "\226\134\188", -- ↼
lharul = "\226\165\170", -- ⥪
lhblk = "\226\150\132", -- ▄
ljcy = "\209\153", -- љ
LJcy = "\208\137", -- Љ
ll = "\226\137\170", -- ≪
Ll = "\226\139\152", -- ⋘
llarr = "\226\135\135", -- ⇇
llcorner = "\226\140\158", -- ⌞
Lleftarrow = "\226\135\154", -- ⇚
llhard = "\226\165\171", -- ⥫
lltri = "\226\151\186", -- ◺
lmidot = "\197\128", -- ŀ
Lmidot = "\196\191", -- Ŀ
lmoust = "\226\142\176", -- ⎰
lmoustache = "\226\142\176", -- ⎰
lnap = "\226\170\137", -- ⪉
lnapprox = "\226\170\137", -- ⪉
lne = "\226\170\135", -- ⪇
lnE = "\226\137\168", -- ≨
lneq = "\226\170\135", -- ⪇
lneqq = "\226\137\168", -- ≨
lnsim = "\226\139\166", -- ⋦
loang = "\226\159\172", -- ⟬
loarr = "\226\135\189", -- ⇽
lobrk = "\226\159\166", -- ⟦
longleftarrow = "\226\159\181", -- ⟵
Longleftarrow = "\226\159\184", -- ⟸
LongLeftArrow = "\226\159\181", -- ⟵
longleftrightarrow = "\226\159\183", -- ⟷
Longleftrightarrow = "\226\159\186", -- ⟺
LongLeftRightArrow = "\226\159\183", -- ⟷
longmapsto = "\226\159\188", -- ⟼
longrightarrow = "\226\159\182", -- ⟶
Longrightarrow = "\226\159\185", -- ⟹
LongRightArrow = "\226\159\182", -- ⟶
looparrowleft = "\226\134\171", -- ↫
looparrowright = "\226\134\172", -- ↬
lopar = "\226\166\133", -- ⦅
lopf = "\240\157\149\157", -- 𝕝
Lopf = "\240\157\149\131", -- 𝕃
loplus = "\226\168\173", -- ⨭
lotimes = "\226\168\180", -- ⨴
lowast = "\226\136\151", -- ∗
lowbar = "\95", -- _
LowerLeftArrow = "\226\134\153", -- ↙
LowerRightArrow = "\226\134\152", -- ↘
loz = "\226\151\138", -- ◊
lozenge = "\226\151\138", -- ◊
lozf = "\226\167\171", -- ⧫
lpar = "\40", -- (
lparlt = "\226\166\147", -- ⦓
lrarr = "\226\135\134", -- ⇆
lrcorner = "\226\140\159", -- ⌟
lrhar = "\226\135\139", -- ⇋
lrhard = "\226\165\173", -- ⥭
lrm = "\226\128\142", -- [left-to-right mark]
lrtri = "\226\138\191", -- ⊿
lsaquo = "\226\128\185", -- ‹
lscr = "\240\157\147\129", -- 𝓁
Lscr = "\226\132\146", -- ℒ
lsh = "\226\134\176", -- ↰
Lsh = "\226\134\176", -- ↰
lsim = "\226\137\178", -- ≲
lsime = "\226\170\141", -- ⪍
lsimg = "\226\170\143", -- ⪏
lsqb = "\91", -- [
lsquo = "\226\128\152", -- ‘
lsquor = "\226\128\154", -- ‚
lstrok = "\197\130", -- ł
Lstrok = "\197\129", -- Ł
lt = "\60", -- <
Lt = "\226\137\170", -- ≪
LT = "\60", -- <
ltcc = "\226\170\166", -- ⪦
ltcir = "\226\169\185", -- ⩹
ltdot = "\226\139\150", -- ⋖
lthree = "\226\139\139", -- ⋋
ltimes = "\226\139\137", -- ⋉
ltlarr = "\226\165\182", -- ⥶
ltquest = "\226\169\187", -- ⩻
ltri = "\226\151\131", -- ◃
ltrie = "\226\138\180", -- ⊴
ltrif = "\226\151\130", -- ◂
ltrPar = "\226\166\150", -- ⦖
lurdshar = "\226\165\138", -- ⥊
luruhar = "\226\165\166", -- ⥦
lvertneqq = "\226\137\168\239\184\128", -- ≨︀
lvnE = "\226\137\168\239\184\128", -- ≨︀
macr = "\194\175", -- ¯
male = "\226\153\130", -- ♂
malt = "\226\156\160", -- ✠
maltese = "\226\156\160", -- ✠
map = "\226\134\166", -- ↦
Map = "\226\164\133", -- ⤅
mapsto = "\226\134\166", -- ↦
mapstodown = "\226\134\167", -- ↧
mapstoleft = "\226\134\164", -- ↤
mapstoup = "\226\134\165", -- ↥
marker = "\226\150\174", -- ▮
mcomma = "\226\168\169", -- ⨩
mcy = "\208\188", -- м
Mcy = "\208\156", -- М
mdash = "\226\128\148", -- —
mDDot = "\226\136\186", -- ∺
measuredangle = "\226\136\161", -- ∡
MediumSpace = "\226\129\159", -- [medium mathematical space]
Mellintrf = "\226\132\179", -- ℳ
mfr = "\240\157\148\170", -- 𝔪
Mfr = "\240\157\148\144", -- 𝔐
mho = "\226\132\167", -- ℧
micro = "\194\181", -- µ
mid = "\226\136\163", -- ∣
midast = "\42", -- *
midcir = "\226\171\176", -- ⫰
middot = "\194\183", -- ·
minus = "\226\136\146", -- −
minusb = "\226\138\159", -- ⊟
minusd = "\226\136\184", -- ∸
minusdu = "\226\168\170", -- ⨪
MinusPlus = "\226\136\147", -- ∓
mlcp = "\226\171\155", -- ⫛
mldr = "\226\128\166", -- …
mnplus = "\226\136\147", -- ∓
models = "\226\138\167", -- ⊧
mopf = "\240\157\149\158", -- 𝕞
Mopf = "\240\157\149\132", -- 𝕄
mp = "\226\136\147", -- ∓
mscr = "\240\157\147\130", -- 𝓂
Mscr = "\226\132\179", -- ℳ
mstpos = "\226\136\190", -- ∾
mu = "\206\188", -- μ
Mu = "\206\156", -- Μ
multimap = "\226\138\184", -- ⊸
mumap = "\226\138\184", -- ⊸
nabla = "\226\136\135", -- ∇
nacute = "\197\132", -- ń
Nacute = "\197\131", -- Ń
nang = "\226\136\160\226\131\146", -- ∠⃒
nap = "\226\137\137", -- ≉
napE = "\226\169\176\204\184", -- ⩰̸
napid = "\226\137\139\204\184", -- ≋̸
napos = "\197\137", -- ʼn
napprox = "\226\137\137", -- ≉
natur = "\226\153\174", -- ♮
natural = "\226\153\174", -- ♮
naturals = "\226\132\149", -- ℕ
nbsp = "\194\160", -- [no-break space]
nbump = "\226\137\142\204\184", -- ≎̸
nbumpe = "\226\137\143\204\184", -- ≏̸
ncap = "\226\169\131", -- ⩃
ncaron = "\197\136", -- ň
Ncaron = "\197\135", -- Ň
ncedil = "\197\134", -- ņ
Ncedil = "\197\133", -- Ņ
ncong = "\226\137\135", -- ≇
ncongdot = "\226\169\173\204\184", -- ⩭̸
ncup = "\226\169\130", -- ⩂
ncy = "\208\189", -- н
Ncy = "\208\157", -- Н
ndash = "\226\128\147", -- –
ne = "\226\137\160", -- ≠
nearhk = "\226\164\164", -- ⤤
nearr = "\226\134\151", -- ↗
neArr = "\226\135\151", -- ⇗
nearrow = "\226\134\151", -- ↗
nedot = "\226\137\144\204\184", -- ≐̸
NegativeMediumSpace = "\226\128\139", -- [zero width space]
NegativeThickSpace = "\226\128\139", -- [zero width space]
NegativeThinSpace = "\226\128\139", -- [zero width space]
NegativeVeryThinSpace = "\226\128\139", -- [zero width space]
nequiv = "\226\137\162", -- ≢
nesear = "\226\164\168", -- ⤨
nesim = "\226\137\130\204\184", -- ≂̸
NestedGreaterGreater = "\226\137\171", -- ≫
NestedLessLess = "\226\137\170", -- ≪
NewLine = "\n", -- [new line]
nexist = "\226\136\132", -- ∄
nexists = "\226\136\132", -- ∄
nfr = "\240\157\148\171", -- 𝔫
Nfr = "\240\157\148\145", -- 𝔑
nge = "\226\137\177", -- ≱
ngE = "\226\137\167\204\184", -- ≧̸
ngeq = "\226\137\177", -- ≱
ngeqq = "\226\137\167\204\184", -- ≧̸
ngeqslant = "\226\169\190\204\184", -- ⩾̸
nges = "\226\169\190\204\184", -- ⩾̸
nGg = "\226\139\153\204\184", -- ⋙̸
ngsim = "\226\137\181", -- ≵
ngt = "\226\137\175", -- ≯
nGt = "\226\137\171\226\131\146", -- ≫⃒
ngtr = "\226\137\175", -- ≯
nGtv = "\226\137\171\204\184", -- ≫̸
nharr = "\226\134\174", -- ↮
nhArr = "\226\135\142", -- ⇎
nhpar = "\226\171\178", -- ⫲
ni = "\226\136\139", -- ∋
nis = "\226\139\188", -- ⋼
nisd = "\226\139\186", -- ⋺
niv = "\226\136\139", -- ∋
njcy = "\209\154", -- њ
NJcy = "\208\138", -- Њ
nlarr = "\226\134\154", -- ↚
nlArr = "\226\135\141", -- ⇍
nldr = "\226\128\165", -- ‥
nle = "\226\137\176", -- ≰
nlE = "\226\137\166\204\184", -- ≦̸
nleftarrow = "\226\134\154", -- ↚
nLeftarrow = "\226\135\141", -- ⇍
nleftrightarrow = "\226\134\174", -- ↮
nLeftrightarrow = "\226\135\142", -- ⇎
nleq = "\226\137\176", -- ≰
nleqq = "\226\137\166\204\184", -- ≦̸
nleqslant = "\226\169\189\204\184", -- ⩽̸
nles = "\226\169\189\204\184", -- ⩽̸
nless = "\226\137\174", -- ≮
nLl = "\226\139\152\204\184", -- ⋘̸
nlsim = "\226\137\180", -- ≴
nlt = "\226\137\174", -- ≮
nLt = "\226\137\170\226\131\146", -- ≪⃒
nltri = "\226\139\170", -- ⋪
nltrie = "\226\139\172", -- ⋬
nLtv = "\226\137\170\204\184", -- ≪̸
nmid = "\226\136\164", -- ∤
NoBreak = "\226\129\160", -- [word joiner]
NonBreakingSpace = "\194\160", -- [no-break space]
nopf = "\240\157\149\159", -- 𝕟
Nopf = "\226\132\149", -- ℕ
["not"] = "\194\172", -- ¬
Not = "\226\171\172", -- ⫬
NotCongruent = "\226\137\162", -- ≢
NotCupCap = "\226\137\173", -- ≭
NotDoubleVerticalBar = "\226\136\166", -- ∦
NotElement = "\226\136\137", -- ∉
NotEqual = "\226\137\160", -- ≠
NotEqualTilde = "\226\137\130\204\184", -- ≂̸
NotExists = "\226\136\132", -- ∄
NotGreater = "\226\137\175", -- ≯
NotGreaterEqual = "\226\137\177", -- ≱
NotGreaterFullEqual = "\226\137\167\204\184", -- ≧̸
NotGreaterGreater = "\226\137\171\204\184", -- ≫̸
NotGreaterLess = "\226\137\185", -- ≹
NotGreaterSlantEqual = "\226\169\190\204\184", -- ⩾̸
NotGreaterTilde = "\226\137\181", -- ≵
NotHumpDownHump = "\226\137\142\204\184", -- ≎̸
NotHumpEqual = "\226\137\143\204\184", -- ≏̸
notin = "\226\136\137", -- ∉
notindot = "\226\139\181\204\184", -- ⋵̸
notinE = "\226\139\185\204\184", -- ⋹̸
notinva = "\226\136\137", -- ∉
notinvb = "\226\139\183", -- ⋷
notinvc = "\226\139\182", -- ⋶
NotLeftTriangle = "\226\139\170", -- ⋪
NotLeftTriangleBar = "\226\167\143\204\184", -- ⧏̸
NotLeftTriangleEqual = "\226\139\172", -- ⋬
NotLess = "\226\137\174", -- ≮
NotLessEqual = "\226\137\176", -- ≰
NotLessGreater = "\226\137\184", -- ≸
NotLessLess = "\226\137\170\204\184", -- ≪̸
NotLessSlantEqual = "\226\169\189\204\184", -- ⩽̸
NotLessTilde = "\226\137\180", -- ≴
NotNestedGreaterGreater = "\226\170\162\204\184", -- ⪢̸
NotNestedLessLess = "\226\170\161\204\184", -- ⪡̸
notni = "\226\136\140", -- ∌
notniva = "\226\136\140", -- ∌
notnivb = "\226\139\190", -- ⋾
notnivc = "\226\139\189", -- ⋽
NotPrecedes = "\226\138\128", -- ⊀
NotPrecedesEqual = "\226\170\175\204\184", -- ⪯̸
NotPrecedesSlantEqual = "\226\139\160", -- ⋠
NotReverseElement = "\226\136\140", -- ∌
NotRightTriangle = "\226\139\171", -- ⋫
NotRightTriangleBar = "\226\167\144\204\184", -- ⧐̸
NotRightTriangleEqual = "\226\139\173", -- ⋭
NotSquareSubset = "\226\138\143\204\184", -- ⊏̸
NotSquareSubsetEqual = "\226\139\162", -- ⋢
NotSquareSuperset = "\226\138\144\204\184", -- ⊐̸
NotSquareSupersetEqual = "\226\139\163", -- ⋣
NotSubset = "\226\138\130\226\131\146", -- ⊂⃒
NotSubsetEqual = "\226\138\136", -- ⊈
NotSucceeds = "\226\138\129", -- ⊁
NotSucceedsEqual = "\226\170\176\204\184", -- ⪰̸
NotSucceedsSlantEqual = "\226\139\161", -- ⋡
NotSucceedsTilde = "\226\137\191\204\184", -- ≿̸
NotSuperset = "\226\138\131\226\131\146", -- ⊃⃒
NotSupersetEqual = "\226\138\137", -- ⊉
NotTilde = "\226\137\129", -- ≁
NotTildeEqual = "\226\137\132", -- ≄
NotTildeFullEqual = "\226\137\135", -- ≇
NotTildeTilde = "\226\137\137", -- ≉
NotVerticalBar = "\226\136\164", -- ∤
npar = "\226\136\166", -- ∦
nparallel = "\226\136\166", -- ∦
nparsl = "\226\171\189\226\131\165", -- ⫽⃥
npart = "\226\136\130\204\184", -- ∂̸
npolint = "\226\168\148", -- ⨔
npr = "\226\138\128", -- ⊀
nprcue = "\226\139\160", -- ⋠
npre = "\226\170\175\204\184", -- ⪯̸
nprec = "\226\138\128", -- ⊀
npreceq = "\226\170\175\204\184", -- ⪯̸
nrarr = "\226\134\155", -- ↛
nrArr = "\226\135\143", -- ⇏
nrarrc = "\226\164\179\204\184", -- ⤳̸
nrarrw = "\226\134\157\204\184", -- ↝̸
nrightarrow = "\226\134\155", -- ↛
nRightarrow = "\226\135\143", -- ⇏
nrtri = "\226\139\171", -- ⋫
nrtrie = "\226\139\173", -- ⋭
nsc = "\226\138\129", -- ⊁
nsccue = "\226\139\161", -- ⋡
nsce = "\226\170\176\204\184", -- ⪰̸
nscr = "\240\157\147\131", -- 𝓃
Nscr = "\240\157\146\169", -- 𝒩
nshortmid = "\226\136\164", -- ∤
nshortparallel = "\226\136\166", -- ∦
nsim = "\226\137\129", -- ≁
nsime = "\226\137\132", -- ≄
nsimeq = "\226\137\132", -- ≄
nsmid = "\226\136\164", -- ∤
nspar = "\226\136\166", -- ∦
nsqsube = "\226\139\162", -- ⋢
nsqsupe = "\226\139\163", -- ⋣
nsub = "\226\138\132", -- ⊄
nsube = "\226\138\136", -- ⊈
nsubE = "\226\171\133\204\184", -- ⫅̸
nsubset = "\226\138\130\226\131\146", -- ⊂⃒
nsubseteq = "\226\138\136", -- ⊈
nsubseteqq = "\226\171\133\204\184", -- ⫅̸
nsucc = "\226\138\129", -- ⊁
nsucceq = "\226\170\176\204\184", -- ⪰̸
nsup = "\226\138\133", -- ⊅
nsupe = "\226\138\137", -- ⊉
nsupE = "\226\171\134\204\184", -- ⫆̸
nsupset = "\226\138\131\226\131\146", -- ⊃⃒
nsupseteq = "\226\138\137", -- ⊉
nsupseteqq = "\226\171\134\204\184", -- ⫆̸
ntgl = "\226\137\185", -- ≹
ntilde = "\195\177", -- ñ
Ntilde = "\195\145", -- Ñ
ntlg = "\226\137\184", -- ≸
ntriangleleft = "\226\139\170", -- ⋪
ntrianglelefteq = "\226\139\172", -- ⋬
ntriangleright = "\226\139\171", -- ⋫
ntrianglerighteq = "\226\139\173", -- ⋭
nu = "\206\189", -- ν
Nu = "\206\157", -- Ν
num = "\35", -- #
numero = "\226\132\150", -- №
numsp = "\226\128\135", -- [figure space]
nvap = "\226\137\141\226\131\146", -- ≍⃒
nvdash = "\226\138\172", -- ⊬
nvDash = "\226\138\173", -- ⊭
nVdash = "\226\138\174", -- ⊮
nVDash = "\226\138\175", -- ⊯
nvge = "\226\137\165\226\131\146", -- ≥⃒
nvgt = "\62\226\131\146", -- >⃒
nvHarr = "\226\164\132", -- ⤄
nvinfin = "\226\167\158", -- ⧞
nvlArr = "\226\164\130", -- ⤂
nvle = "\226\137\164\226\131\146", -- ≤⃒
nvlt = "\60\226\131\146", -- <⃒
nvltrie = "\226\138\180\226\131\146", -- ⊴⃒
nvrArr = "\226\164\131", -- ⤃
nvrtrie = "\226\138\181\226\131\146", -- ⊵⃒
nvsim = "\226\136\188\226\131\146", -- ∼⃒
nwarhk = "\226\164\163", -- ⤣
nwarr = "\226\134\150", -- ↖
nwArr = "\226\135\150", -- ⇖
nwarrow = "\226\134\150", -- ↖
nwnear = "\226\164\167", -- ⤧
oacute = "\195\179", -- ó
Oacute = "\195\147", -- Ó
oast = "\226\138\155", -- ⊛
ocir = "\226\138\154", -- ⊚
ocirc = "\195\180", -- ô
Ocirc = "\195\148", -- Ô
ocy = "\208\190", -- о
Ocy = "\208\158", -- О
odash = "\226\138\157", -- ⊝
odblac = "\197\145", -- ő
Odblac = "\197\144", -- Ő
odiv = "\226\168\184", -- ⨸
odot = "\226\138\153", -- ⊙
odsold = "\226\166\188", -- ⦼
oelig = "\197\147", -- œ
OElig = "\197\146", -- Œ
ofcir = "\226\166\191", -- ⦿
ofr = "\240\157\148\172", -- 𝔬
Ofr = "\240\157\148\146", -- 𝔒
ogon = "\203\155", -- ˛
ograve = "\195\178", -- ò
Ograve = "\195\146", -- Ò
ogt = "\226\167\129", -- ⧁
ohbar = "\226\166\181", -- ⦵
ohm = "\206\169", -- Ω
oint = "\226\136\174", -- ∮
olarr = "\226\134\186", -- ↺
olcir = "\226\166\190", -- ⦾
olcross = "\226\166\187", -- ⦻
oline = "\226\128\190", -- ‾
olt = "\226\167\128", -- ⧀
omacr = "\197\141", -- ō
Omacr = "\197\140", -- Ō
omega = "\207\137", -- ω
Omega = "\206\169", -- Ω
omicron = "\206\191", -- ο
Omicron = "\206\159", -- Ο
omid = "\226\166\182", -- ⦶
ominus = "\226\138\150", -- ⊖
oopf = "\240\157\149\160", -- 𝕠
Oopf = "\240\157\149\134", -- 𝕆
opar = "\226\166\183", -- ⦷
OpenCurlyDoubleQuote = "\226\128\156", -- “
OpenCurlyQuote = "\226\128\152", -- ‘
operp = "\226\166\185", -- ⦹
oplus = "\226\138\149", -- ⊕
["or"] = "\226\136\168", -- ∨
Or = "\226\169\148", -- ⩔
orarr = "\226\134\187", -- ↻
ord = "\226\169\157", -- ⩝
order = "\226\132\180", -- ℴ
orderof = "\226\132\180", -- ℴ
ordf = "\194\170", -- ª
ordm = "\194\186", -- º
origof = "\226\138\182", -- ⊶
oror = "\226\169\150", -- ⩖
orslope = "\226\169\151", -- ⩗
orv = "\226\169\155", -- ⩛
oS = "\226\147\136", -- Ⓢ
oscr = "\226\132\180", -- ℴ
Oscr = "\240\157\146\170", -- 𝒪
oslash = "\195\184", -- ø
Oslash = "\195\152", -- Ø
osol = "\226\138\152", -- ⊘
otilde = "\195\181", -- õ
Otilde = "\195\149", -- Õ
otimes = "\226\138\151", -- ⊗
Otimes = "\226\168\183", -- ⨷
otimesas = "\226\168\182", -- ⨶
ouml = "\195\182", -- ö
Ouml = "\195\150", -- Ö
ovbar = "\226\140\189", -- ⌽
OverBar = "\226\128\190", -- ‾
OverBrace = "\226\143\158", -- ⏞
OverBracket = "\226\142\180", -- ⎴
OverParenthesis = "\226\143\156", -- ⏜
par = "\226\136\165", -- ∥
para = "\194\182", -- ¶
parallel = "\226\136\165", -- ∥
parsim = "\226\171\179", -- ⫳
parsl = "\226\171\189", -- ⫽
part = "\226\136\130", -- ∂
PartialD = "\226\136\130", -- ∂
pcy = "\208\191", -- п
Pcy = "\208\159", -- П
percnt = "\37", -- %
period = "\46", -- .
permil = "\226\128\176", -- ‰
perp = "\226\138\165", -- ⊥
pertenk = "\226\128\177", -- ‱
pfr = "\240\157\148\173", -- 𝔭
Pfr = "\240\157\148\147", -- 𝔓
phi = "\207\134", -- φ
Phi = "\206\166", -- Φ
phiv = "\207\149", -- ϕ
phmmat = "\226\132\179", -- ℳ
phone = "\226\152\142", -- ☎
pi = "\207\128", -- π
Pi = "\206\160", -- Π
pitchfork = "\226\139\148", -- ⋔
piv = "\207\150", -- ϖ
planck = "\226\132\143", -- ℏ
planckh = "\226\132\142", -- ℎ
plankv = "\226\132\143", -- ℏ
plus = "\43", -- +
plusacir = "\226\168\163", -- ⨣
plusb = "\226\138\158", -- ⊞
pluscir = "\226\168\162", -- ⨢
plusdo = "\226\136\148", -- ∔
plusdu = "\226\168\165", -- ⨥
pluse = "\226\169\178", -- ⩲
PlusMinus = "\194\177", -- ±
plusmn = "\194\177", -- ±
plussim = "\226\168\166", -- ⨦
plustwo = "\226\168\167", -- ⨧
pm = "\194\177", -- ±
Poincareplane = "\226\132\140", -- ℌ
pointint = "\226\168\149", -- ⨕
popf = "\240\157\149\161", -- 𝕡
Popf = "\226\132\153", -- ℙ
pound = "\194\163", -- £
pr = "\226\137\186", -- ≺
Pr = "\226\170\187", -- ⪻
prap = "\226\170\183", -- ⪷
prcue = "\226\137\188", -- ≼
pre = "\226\170\175", -- ⪯
prE = "\226\170\179", -- ⪳
prec = "\226\137\186", -- ≺
precapprox = "\226\170\183", -- ⪷
preccurlyeq = "\226\137\188", -- ≼
Precedes = "\226\137\186", -- ≺
PrecedesEqual = "\226\170\175", -- ⪯
PrecedesSlantEqual = "\226\137\188", -- ≼
PrecedesTilde = "\226\137\190", -- ≾
preceq = "\226\170\175", -- ⪯
precnapprox = "\226\170\185", -- ⪹
precneqq = "\226\170\181", -- ⪵
precnsim = "\226\139\168", -- ⋨
precsim = "\226\137\190", -- ≾
prime = "\226\128\178", -- ′
Prime = "\226\128\179", -- ″
primes = "\226\132\153", -- ℙ
prnap = "\226\170\185", -- ⪹
prnE = "\226\170\181", -- ⪵
prnsim = "\226\139\168", -- ⋨
prod = "\226\136\143", -- ∏
Product = "\226\136\143", -- ∏
profalar = "\226\140\174", -- ⌮
profline = "\226\140\146", -- ⌒
profsurf = "\226\140\147", -- ⌓
prop = "\226\136\157", -- ∝
Proportion = "\226\136\183", -- ∷
Proportional = "\226\136\157", -- ∝
propto = "\226\136\157", -- ∝
prsim = "\226\137\190", -- ≾
prurel = "\226\138\176", -- ⊰
pscr = "\240\157\147\133", -- 𝓅
Pscr = "\240\157\146\171", -- 𝒫
psi = "\207\136", -- ψ
Psi = "\206\168", -- Ψ
puncsp = "\226\128\136", -- [punctuation space]
qfr = "\240\157\148\174", -- 𝔮
Qfr = "\240\157\148\148", -- 𝔔
qint = "\226\168\140", -- ⨌
qopf = "\240\157\149\162", -- 𝕢
Qopf = "\226\132\154", -- ℚ
qprime = "\226\129\151", -- ⁗
qscr = "\240\157\147\134", -- 𝓆
Qscr = "\240\157\146\172", -- 𝒬
quaternions = "\226\132\141", -- ℍ
quatint = "\226\168\150", -- ⨖
quest = "\63", -- ?
questeq = "\226\137\159", -- ≟
quot = "\34", -- "
QUOT = "\34", -- "
rAarr = "\226\135\155", -- ⇛
race = "\226\136\189\204\177", -- ∽̱
racute = "\197\149", -- ŕ
Racute = "\197\148", -- Ŕ
radic = "\226\136\154", -- √
raemptyv = "\226\166\179", -- ⦳
rang = "\226\159\169", -- ⟩
Rang = "\226\159\171", -- ⟫
rangd = "\226\166\146", -- ⦒
range = "\226\166\165", -- ⦥
rangle = "\226\159\169", -- ⟩
raquo = "\194\187", -- »
rarr = "\226\134\146", -- →
rArr = "\226\135\146", -- ⇒
Rarr = "\226\134\160", -- ↠
rarrap = "\226\165\181", -- ⥵
rarrb = "\226\135\165", -- ⇥
rarrbfs = "\226\164\160", -- ⤠
rarrc = "\226\164\179", -- ⤳
rarrfs = "\226\164\158", -- ⤞
rarrhk = "\226\134\170", -- ↪
rarrlp = "\226\134\172", -- ↬
rarrpl = "\226\165\133", -- ⥅
rarrsim = "\226\165\180", -- ⥴
rarrtl = "\226\134\163", -- ↣
Rarrtl = "\226\164\150", -- ⤖
rarrw = "\226\134\157", -- ↝
ratail = "\226\164\154", -- ⤚
rAtail = "\226\164\156", -- ⤜
ratio = "\226\136\182", -- ∶
rationals = "\226\132\154", -- ℚ
rbarr = "\226\164\141", -- ⤍
rBarr = "\226\164\143", -- ⤏
RBarr = "\226\164\144", -- ⤐
rbbrk = "\226\157\179", -- ❳
rbrace = "\125", -- }
rbrack = "\93", -- ]
rbrke = "\226\166\140", -- ⦌
rbrksld = "\226\166\142", -- ⦎
rbrkslu = "\226\166\144", -- ⦐
rcaron = "\197\153", -- ř
Rcaron = "\197\152", -- Ř
rcedil = "\197\151", -- ŗ
Rcedil = "\197\150", -- Ŗ
rceil = "\226\140\137", -- ⌉
rcub = "\125", -- }
rcy = "\209\128", -- р
Rcy = "\208\160", -- Р
rdca = "\226\164\183", -- ⤷
rdldhar = "\226\165\169", -- ⥩
rdquo = "\226\128\157", -- ”
rdquor = "\226\128\157", -- ”
rdsh = "\226\134\179", -- ↳
Re = "\226\132\156", -- ℜ
real = "\226\132\156", -- ℜ
realine = "\226\132\155", -- ℛ
realpart = "\226\132\156", -- ℜ
reals = "\226\132\157", -- ℝ
rect = "\226\150\173", -- ▭
reg = "\194\174", -- ®
REG = "\194\174", -- ®
ReverseElement = "\226\136\139", -- ∋
ReverseEquilibrium = "\226\135\139", -- ⇋
ReverseUpEquilibrium = "\226\165\175", -- ⥯
rfisht = "\226\165\189", -- ⥽
rfloor = "\226\140\139", -- ⌋
rfr = "\240\157\148\175", -- 𝔯
Rfr = "\226\132\156", -- ℜ
rHar = "\226\165\164", -- ⥤
rhard = "\226\135\129", -- ⇁
rharu = "\226\135\128", -- ⇀
rharul = "\226\165\172", -- ⥬
rho = "\207\129", -- ρ
Rho = "\206\161", -- Ρ
rhov = "\207\177", -- ϱ
RightAngleBracket = "\226\159\169", -- ⟩
rightarrow = "\226\134\146", -- →
Rightarrow = "\226\135\146", -- ⇒
RightArrow = "\226\134\146", -- →
RightArrowBar = "\226\135\165", -- ⇥
RightArrowLeftArrow = "\226\135\132", -- ⇄
rightarrowtail = "\226\134\163", -- ↣
RightCeiling = "\226\140\137", -- ⌉
RightDoubleBracket = "\226\159\167", -- ⟧
RightDownTeeVector = "\226\165\157", -- ⥝
RightDownVector = "\226\135\130", -- ⇂
RightDownVectorBar = "\226\165\149", -- ⥕
RightFloor = "\226\140\139", -- ⌋
rightharpoondown = "\226\135\129", -- ⇁
rightharpoonup = "\226\135\128", -- ⇀
rightleftarrows = "\226\135\132", -- ⇄
rightleftharpoons = "\226\135\140", -- ⇌
rightrightarrows = "\226\135\137", -- ⇉
rightsquigarrow = "\226\134\157", -- ↝
RightTee = "\226\138\162", -- ⊢
RightTeeArrow = "\226\134\166", -- ↦
RightTeeVector = "\226\165\155", -- ⥛
rightthreetimes = "\226\139\140", -- ⋌
RightTriangle = "\226\138\179", -- ⊳
RightTriangleBar = "\226\167\144", -- ⧐
RightTriangleEqual = "\226\138\181", -- ⊵
RightUpDownVector = "\226\165\143", -- ⥏
RightUpTeeVector = "\226\165\156", -- ⥜
RightUpVector = "\226\134\190", -- ↾
RightUpVectorBar = "\226\165\148", -- ⥔
RightVector = "\226\135\128", -- ⇀
RightVectorBar = "\226\165\147", -- ⥓
ring = "\203\154", -- ˚
risingdotseq = "\226\137\147", -- ≓
rlarr = "\226\135\132", -- ⇄
rlhar = "\226\135\140", -- ⇌
rlm = "\226\128\143", -- [right-to-left mark]
rmoust = "\226\142\177", -- ⎱
rmoustache = "\226\142\177", -- ⎱
rnmid = "\226\171\174", -- ⫮
roang = "\226\159\173", -- ⟭
roarr = "\226\135\190", -- ⇾
robrk = "\226\159\167", -- ⟧
ropar = "\226\166\134", -- ⦆
ropf = "\240\157\149\163", -- 𝕣
Ropf = "\226\132\157", -- ℝ
roplus = "\226\168\174", -- ⨮
rotimes = "\226\168\181", -- ⨵
RoundImplies = "\226\165\176", -- ⥰
rpar = "\41", -- )
rpargt = "\226\166\148", -- ⦔
rppolint = "\226\168\146", -- ⨒
rrarr = "\226\135\137", -- ⇉
Rrightarrow = "\226\135\155", -- ⇛
rsaquo = "\226\128\186", -- ›
rscr = "\240\157\147\135", -- 𝓇
Rscr = "\226\132\155", -- ℛ
rsh = "\226\134\177", -- ↱
Rsh = "\226\134\177", -- ↱
rsqb = "\93", -- ]
rsquo = "\226\128\153", -- ’
rsquor = "\226\128\153", -- ’
rthree = "\226\139\140", -- ⋌
rtimes = "\226\139\138", -- ⋊
rtri = "\226\150\185", -- ▹
rtrie = "\226\138\181", -- ⊵
rtrif = "\226\150\184", -- ▸
rtriltri = "\226\167\142", -- ⧎
RuleDelayed = "\226\167\180", -- ⧴
ruluhar = "\226\165\168", -- ⥨
rx = "\226\132\158", -- ℞
sacute = "\197\155", -- ś
Sacute = "\197\154", -- Ś
sbquo = "\226\128\154", -- ‚
sc = "\226\137\187", -- ≻
Sc = "\226\170\188", -- ⪼
scap = "\226\170\184", -- ⪸
scaron = "\197\161", -- š
Scaron = "\197\160", -- Š
sccue = "\226\137\189", -- ≽
sce = "\226\170\176", -- ⪰
scE = "\226\170\180", -- ⪴
scedil = "\197\159", -- ş
Scedil = "\197\158", -- Ş
scirc = "\197\157", -- ŝ
Scirc = "\197\156", -- Ŝ
scnap = "\226\170\186", -- ⪺
scnE = "\226\170\182", -- ⪶
scnsim = "\226\139\169", -- ⋩
scpolint = "\226\168\147", -- ⨓
scsim = "\226\137\191", -- ≿
scy = "\209\129", -- с
Scy = "\208\161", -- С
sdot = "\226\139\133", -- ⋅
sdotb = "\226\138\161", -- ⊡
sdote = "\226\169\166", -- ⩦
searhk = "\226\164\165", -- ⤥
searr = "\226\134\152", -- ↘
seArr = "\226\135\152", -- ⇘
searrow = "\226\134\152", -- ↘
sect = "\194\167", -- §
semi = "\59", -- ;
seswar = "\226\164\169", -- ⤩
setminus = "\226\136\150", -- ∖
setmn = "\226\136\150", -- ∖
sext = "\226\156\182", -- ✶
sfr = "\240\157\148\176", -- 𝔰
Sfr = "\240\157\148\150", -- 𝔖
sfrown = "\226\140\162", -- ⌢
sharp = "\226\153\175", -- ♯
shchcy = "\209\137", -- щ
SHCHcy = "\208\169", -- Щ
shcy = "\209\136", -- ш
SHcy = "\208\168", -- Ш
ShortDownArrow = "\226\134\147", -- ↓
ShortLeftArrow = "\226\134\144", -- ←
shortmid = "\226\136\163", -- ∣
shortparallel = "\226\136\165", -- ∥
ShortRightArrow = "\226\134\146", -- →
ShortUpArrow = "\226\134\145", -- ↑
shy = "\194\173", -- [soft hyphen]
sigma = "\207\131", -- σ
Sigma = "\206\163", -- Σ
sigmaf = "\207\130", -- ς
sigmav = "\207\130", -- ς
sim = "\226\136\188", -- ∼
simdot = "\226\169\170", -- ⩪
sime = "\226\137\131", -- ≃
simeq = "\226\137\131", -- ≃
simg = "\226\170\158", -- ⪞
simgE = "\226\170\160", -- ⪠
siml = "\226\170\157", -- ⪝
simlE = "\226\170\159", -- ⪟
simne = "\226\137\134", -- ≆
simplus = "\226\168\164", -- ⨤
simrarr = "\226\165\178", -- ⥲
slarr = "\226\134\144", -- ←
SmallCircle = "\226\136\152", -- ∘
smallsetminus = "\226\136\150", -- ∖
smashp = "\226\168\179", -- ⨳
smeparsl = "\226\167\164", -- ⧤
smid = "\226\136\163", -- ∣
smile = "\226\140\163", -- ⌣
smt = "\226\170\170", -- ⪪
smte = "\226\170\172", -- ⪬
smtes = "\226\170\172\239\184\128", -- ⪬︀
softcy = "\209\140", -- ь
SOFTcy = "\208\172", -- Ь
sol = "\47", -- /
solb = "\226\167\132", -- ⧄
solbar = "\226\140\191", -- ⌿
sopf = "\240\157\149\164", -- 𝕤
Sopf = "\240\157\149\138", -- 𝕊
spades = "\226\153\160", -- ♠
spadesuit = "\226\153\160", -- ♠
spar = "\226\136\165", -- ∥
sqcap = "\226\138\147", -- ⊓
sqcaps = "\226\138\147\239\184\128", -- ⊓︀
sqcup = "\226\138\148", -- ⊔
sqcups = "\226\138\148\239\184\128", -- ⊔︀
Sqrt = "\226\136\154", -- √
sqsub = "\226\138\143", -- ⊏
sqsube = "\226\138\145", -- ⊑
sqsubset = "\226\138\143", -- ⊏
sqsubseteq = "\226\138\145", -- ⊑
sqsup = "\226\138\144", -- ⊐
sqsupe = "\226\138\146", -- ⊒
sqsupset = "\226\138\144", -- ⊐
sqsupseteq = "\226\138\146", -- ⊒
squ = "\226\150\161", -- □
square = "\226\150\161", -- □
Square = "\226\150\161", -- □
SquareIntersection = "\226\138\147", -- ⊓
SquareSubset = "\226\138\143", -- ⊏
SquareSubsetEqual = "\226\138\145", -- ⊑
SquareSuperset = "\226\138\144", -- ⊐
SquareSupersetEqual = "\226\138\146", -- ⊒
SquareUnion = "\226\138\148", -- ⊔
squarf = "\226\150\170", -- ▪
squf = "\226\150\170", -- ▪
srarr = "\226\134\146", -- →
sscr = "\240\157\147\136", -- 𝓈
Sscr = "\240\157\146\174", -- 𝒮
ssetmn = "\226\136\150", -- ∖
ssmile = "\226\140\163", -- ⌣
sstarf = "\226\139\134", -- ⋆
star = "\226\152\134", -- ☆
Star = "\226\139\134", -- ⋆
starf = "\226\152\133", -- ★
straightepsilon = "\207\181", -- ϵ
straightphi = "\207\149", -- ϕ
strns = "\194\175", -- ¯
sub = "\226\138\130", -- ⊂
Sub = "\226\139\144", -- ⋐
subdot = "\226\170\189", -- ⪽
sube = "\226\138\134", -- ⊆
subE = "\226\171\133", -- ⫅
subedot = "\226\171\131", -- ⫃
submult = "\226\171\129", -- ⫁
subne = "\226\138\138", -- ⊊
subnE = "\226\171\139", -- ⫋
subplus = "\226\170\191", -- ⪿
subrarr = "\226\165\185", -- ⥹
subset = "\226\138\130", -- ⊂
Subset = "\226\139\144", -- ⋐
subseteq = "\226\138\134", -- ⊆
subseteqq = "\226\171\133", -- ⫅
SubsetEqual = "\226\138\134", -- ⊆
subsetneq = "\226\138\138", -- ⊊
subsetneqq = "\226\171\139", -- ⫋
subsim = "\226\171\135", -- ⫇
subsub = "\226\171\149", -- ⫕
subsup = "\226\171\147", -- ⫓
succ = "\226\137\187", -- ≻
succapprox = "\226\170\184", -- ⪸
succcurlyeq = "\226\137\189", -- ≽
Succeeds = "\226\137\187", -- ≻
SucceedsEqual = "\226\170\176", -- ⪰
SucceedsSlantEqual = "\226\137\189", -- ≽
SucceedsTilde = "\226\137\191", -- ≿
succeq = "\226\170\176", -- ⪰
succnapprox = "\226\170\186", -- ⪺
succneqq = "\226\170\182", -- ⪶
succnsim = "\226\139\169", -- ⋩
succsim = "\226\137\191", -- ≿
SuchThat = "\226\136\139", -- ∋
sum = "\226\136\145", -- ∑
Sum = "\226\136\145", -- ∑
sung = "\226\153\170", -- ♪
sup = "\226\138\131", -- ⊃
Sup = "\226\139\145", -- ⋑
sup1 = "\194\185", -- ¹
sup2 = "\194\178", -- ²
sup3 = "\194\179", -- ³
supdot = "\226\170\190", -- ⪾
supdsub = "\226\171\152", -- ⫘
supe = "\226\138\135", -- ⊇
supE = "\226\171\134", -- ⫆
supedot = "\226\171\132", -- ⫄
Superset = "\226\138\131", -- ⊃
SupersetEqual = "\226\138\135", -- ⊇
suphsol = "\226\159\137", -- ⟉
suphsub = "\226\171\151", -- ⫗
suplarr = "\226\165\187", -- ⥻
supmult = "\226\171\130", -- ⫂
supne = "\226\138\139", -- ⊋
supnE = "\226\171\140", -- ⫌
supplus = "\226\171\128", -- ⫀
supset = "\226\138\131", -- ⊃
Supset = "\226\139\145", -- ⋑
supseteq = "\226\138\135", -- ⊇
supseteqq = "\226\171\134", -- ⫆
supsetneq = "\226\138\139", -- ⊋
supsetneqq = "\226\171\140", -- ⫌
supsim = "\226\171\136", -- ⫈
supsub = "\226\171\148", -- ⫔
supsup = "\226\171\150", -- ⫖
swarhk = "\226\164\166", -- ⤦
swarr = "\226\134\153", -- ↙
swArr = "\226\135\153", -- ⇙
swarrow = "\226\134\153", -- ↙
swnwar = "\226\164\170", -- ⤪
szlig = "\195\159", -- ß
Tab = "\t", -- [tab]
target = "\226\140\150", -- ⌖
tau = "\207\132", -- τ
Tau = "\206\164", -- Τ
tbrk = "\226\142\180", -- ⎴
tcaron = "\197\165", -- ť
Tcaron = "\197\164", -- Ť
tcedil = "\197\163", -- ţ
Tcedil = "\197\162", -- Ţ
tcy = "\209\130", -- т
Tcy = "\208\162", -- Т
tdot = "\226\131\155", -- ⃛
telrec = "\226\140\149", -- ⌕
tfr = "\240\157\148\177", -- 𝔱
Tfr = "\240\157\148\151", -- 𝔗
there4 = "\226\136\180", -- ∴
therefore = "\226\136\180", -- ∴
Therefore = "\226\136\180", -- ∴
theta = "\206\184", -- θ
Theta = "\206\152", -- Θ
thetasym = "\207\145", -- ϑ
thetav = "\207\145", -- ϑ
thickapprox = "\226\137\136", -- ≈
thicksim = "\226\136\188", -- ∼
ThickSpace = "\226\129\159\226\128\138", -- [medium mathematical space] + [hair space]
thinsp = "\226\128\137", -- [thin space]
ThinSpace = "\226\128\137", -- [thin space]
thkap = "\226\137\136", -- ≈
thksim = "\226\136\188", -- ∼
thorn = "\195\190", -- þ
THORN = "\195\158", -- Þ
tilde = "\203\156", -- ˜
Tilde = "\226\136\188", -- ∼
TildeEqual = "\226\137\131", -- ≃
TildeFullEqual = "\226\137\133", -- ≅
TildeTilde = "\226\137\136", -- ≈
times = "\195\151", -- ×
timesb = "\226\138\160", -- ⊠
timesbar = "\226\168\177", -- ⨱
timesd = "\226\168\176", -- ⨰
tint = "\226\136\173", -- ∭
toea = "\226\164\168", -- ⤨
top = "\226\138\164", -- ⊤
topbot = "\226\140\182", -- ⌶
topcir = "\226\171\177", -- ⫱
topf = "\240\157\149\165", -- 𝕥
Topf = "\240\157\149\139", -- 𝕋
topfork = "\226\171\154", -- ⫚
tosa = "\226\164\169", -- ⤩
tprime = "\226\128\180", -- ‴
trade = "\226\132\162", -- ™
TRADE = "\226\132\162", -- ™
triangle = "\226\150\181", -- ▵
triangledown = "\226\150\191", -- ▿
triangleleft = "\226\151\131", -- ◃
trianglelefteq = "\226\138\180", -- ⊴
triangleq = "\226\137\156", -- ≜
triangleright = "\226\150\185", -- ▹
trianglerighteq = "\226\138\181", -- ⊵
tridot = "\226\151\172", -- ◬
trie = "\226\137\156", -- ≜
triminus = "\226\168\186", -- ⨺
TripleDot = "\226\131\155", -- ⃛
triplus = "\226\168\185", -- ⨹
trisb = "\226\167\141", -- ⧍
tritime = "\226\168\187", -- ⨻
trpezium = "\226\143\162", -- ⏢
tscr = "\240\157\147\137", -- 𝓉
Tscr = "\240\157\146\175", -- 𝒯
tscy = "\209\134", -- ц
TScy = "\208\166", -- Ц
tshcy = "\209\155", -- ћ
TSHcy = "\208\139", -- Ћ
tstrok = "\197\167", -- ŧ
Tstrok = "\197\166", -- Ŧ
twixt = "\226\137\172", -- ≬
twoheadleftarrow = "\226\134\158", -- ↞
twoheadrightarrow = "\226\134\160", -- ↠
uacute = "\195\186", -- ú
Uacute = "\195\154", -- Ú
uarr = "\226\134\145", -- ↑
uArr = "\226\135\145", -- ⇑
Uarr = "\226\134\159", -- ↟
Uarrocir = "\226\165\137", -- ⥉
ubrcy = "\209\158", -- ў
Ubrcy = "\208\142", -- Ў
ubreve = "\197\173", -- ŭ
Ubreve = "\197\172", -- Ŭ
ucirc = "\195\187", -- û
Ucirc = "\195\155", -- Û
ucy = "\209\131", -- у
Ucy = "\208\163", -- У
udarr = "\226\135\133", -- ⇅
udblac = "\197\177", -- ű
Udblac = "\197\176", -- Ű
udhar = "\226\165\174", -- ⥮
ufisht = "\226\165\190", -- ⥾
ufr = "\240\157\148\178", -- 𝔲
Ufr = "\240\157\148\152", -- 𝔘
ugrave = "\195\185", -- ù
Ugrave = "\195\153", -- Ù
uHar = "\226\165\163", -- ⥣
uharl = "\226\134\191", -- ↿
uharr = "\226\134\190", -- ↾
uhblk = "\226\150\128", -- ▀
ulcorn = "\226\140\156", -- ⌜
ulcorner = "\226\140\156", -- ⌜
ulcrop = "\226\140\143", -- ⌏
ultri = "\226\151\184", -- ◸
umacr = "\197\171", -- ū
Umacr = "\197\170", -- Ū
uml = "\194\168", -- ¨
UnderBar = "\95", -- _
UnderBrace = "\226\143\159", -- ⏟
UnderBracket = "\226\142\181", -- ⎵
UnderParenthesis = "\226\143\157", -- ⏝
Union = "\226\139\131", -- ⋃
UnionPlus = "\226\138\142", -- ⊎
uogon = "\197\179", -- ų
Uogon = "\197\178", -- Ų
uopf = "\240\157\149\166", -- 𝕦
Uopf = "\240\157\149\140", -- 𝕌
uparrow = "\226\134\145", -- ↑
Uparrow = "\226\135\145", -- ⇑
UpArrow = "\226\134\145", -- ↑
UpArrowBar = "\226\164\146", -- ⤒
UpArrowDownArrow = "\226\135\133", -- ⇅
updownarrow = "\226\134\149", -- ↕
Updownarrow = "\226\135\149", -- ⇕
UpDownArrow = "\226\134\149", -- ↕
UpEquilibrium = "\226\165\174", -- ⥮
upharpoonleft = "\226\134\191", -- ↿
upharpoonright = "\226\134\190", -- ↾
uplus = "\226\138\142", -- ⊎
UpperLeftArrow = "\226\134\150", -- ↖
UpperRightArrow = "\226\134\151", -- ↗
upsi = "\207\133", -- υ
Upsi = "\207\146", -- ϒ
upsih = "\207\146", -- ϒ
upsilon = "\207\133", -- υ
Upsilon = "\206\165", -- Υ
UpTee = "\226\138\165", -- ⊥
UpTeeArrow = "\226\134\165", -- ↥
upuparrows = "\226\135\136", -- ⇈
urcorn = "\226\140\157", -- ⌝
urcorner = "\226\140\157", -- ⌝
urcrop = "\226\140\142", -- ⌎
uring = "\197\175", -- ů
Uring = "\197\174", -- Ů
urtri = "\226\151\185", -- ◹
uscr = "\240\157\147\138", -- 𝓊
Uscr = "\240\157\146\176", -- 𝒰
utdot = "\226\139\176", -- ⋰
utilde = "\197\169", -- ũ
Utilde = "\197\168", -- Ũ
utri = "\226\150\181", -- ▵
utrif = "\226\150\180", -- ▴
uuarr = "\226\135\136", -- ⇈
uuml = "\195\188", -- ü
Uuml = "\195\156", -- Ü
uwangle = "\226\166\167", -- ⦧
vangrt = "\226\166\156", -- ⦜
varepsilon = "\207\181", -- ϵ
varkappa = "\207\176", -- ϰ
varnothing = "\226\136\133", -- ∅
varphi = "\207\149", -- ϕ
varpi = "\207\150", -- ϖ
varpropto = "\226\136\157", -- ∝
varr = "\226\134\149", -- ↕
vArr = "\226\135\149", -- ⇕
varrho = "\207\177", -- ϱ
varsigma = "\207\130", -- ς
varsubsetneq = "\226\138\138\239\184\128", -- ⊊︀
varsubsetneqq = "\226\171\139\239\184\128", -- ⫋︀
varsupsetneq = "\226\138\139\239\184\128", -- ⊋︀
varsupsetneqq = "\226\171\140\239\184\128", -- ⫌︀
vartheta = "\207\145", -- ϑ
vartriangleleft = "\226\138\178", -- ⊲
vartriangleright = "\226\138\179", -- ⊳
vBar = "\226\171\168", -- ⫨
Vbar = "\226\171\171", -- ⫫
vBarv = "\226\171\169", -- ⫩
vcy = "\208\178", -- в
Vcy = "\208\146", -- В
vdash = "\226\138\162", -- ⊢
vDash = "\226\138\168", -- ⊨
Vdash = "\226\138\169", -- ⊩
VDash = "\226\138\171", -- ⊫
Vdashl = "\226\171\166", -- ⫦
vee = "\226\136\168", -- ∨
Vee = "\226\139\129", -- ⋁
veebar = "\226\138\187", -- ⊻
veeeq = "\226\137\154", -- ≚
vellip = "\226\139\174", -- ⋮
verbar = "\124", -- |
Verbar = "\226\128\150", -- ‖
vert = "\124", -- |
Vert = "\226\128\150", -- ‖
VerticalBar = "\226\136\163", -- ∣
VerticalLine = "\124", -- |
VerticalSeparator = "\226\157\152", -- ❘
VerticalTilde = "\226\137\128", -- ≀
VeryThinSpace = "\226\128\138", -- [hair space]
vfr = "\240\157\148\179", -- 𝔳
Vfr = "\240\157\148\153", -- 𝔙
vltri = "\226\138\178", -- ⊲
vnsub = "\226\138\130\226\131\146", -- ⊂⃒
vnsup = "\226\138\131\226\131\146", -- ⊃⃒
vopf = "\240\157\149\167", -- 𝕧
Vopf = "\240\157\149\141", -- 𝕍
vprop = "\226\136\157", -- ∝
vrtri = "\226\138\179", -- ⊳
vscr = "\240\157\147\139", -- 𝓋
Vscr = "\240\157\146\177", -- 𝒱
vsubne = "\226\138\138\239\184\128", -- ⊊︀
vsubnE = "\226\171\139\239\184\128", -- ⫋︀
vsupne = "\226\138\139\239\184\128", -- ⊋︀
vsupnE = "\226\171\140\239\184\128", -- ⫌︀
Vvdash = "\226\138\170", -- ⊪
vzigzag = "\226\166\154", -- ⦚
wcirc = "\197\181", -- ŵ
Wcirc = "\197\180", -- Ŵ
wedbar = "\226\169\159", -- ⩟
wedge = "\226\136\167", -- ∧
Wedge = "\226\139\128", -- ⋀
wedgeq = "\226\137\153", -- ≙
weierp = "\226\132\152", -- ℘
wfr = "\240\157\148\180", -- 𝔴
Wfr = "\240\157\148\154", -- 𝔚
wopf = "\240\157\149\168", -- 𝕨
Wopf = "\240\157\149\142", -- 𝕎
wp = "\226\132\152", -- ℘
wr = "\226\137\128", -- ≀
wreath = "\226\137\128", -- ≀
wscr = "\240\157\147\140", -- 𝓌
Wscr = "\240\157\146\178", -- 𝒲
xcap = "\226\139\130", -- ⋂
xcirc = "\226\151\175", -- ◯
xcup = "\226\139\131", -- ⋃
xdtri = "\226\150\189", -- ▽
xfr = "\240\157\148\181", -- 𝔵
Xfr = "\240\157\148\155", -- 𝔛
xharr = "\226\159\183", -- ⟷
xhArr = "\226\159\186", -- ⟺
xi = "\206\190", -- ξ
Xi = "\206\158", -- Ξ
xlarr = "\226\159\181", -- ⟵
xlArr = "\226\159\184", -- ⟸
xmap = "\226\159\188", -- ⟼
xnis = "\226\139\187", -- ⋻
xodot = "\226\168\128", -- ⨀
xopf = "\240\157\149\169", -- 𝕩
Xopf = "\240\157\149\143", -- 𝕏
xoplus = "\226\168\129", -- ⨁
xotime = "\226\168\130", -- ⨂
xrarr = "\226\159\182", -- ⟶
xrArr = "\226\159\185", -- ⟹
xscr = "\240\157\147\141", -- 𝓍
Xscr = "\240\157\146\179", -- 𝒳
xsqcup = "\226\168\134", -- ⨆
xuplus = "\226\168\132", -- ⨄
xutri = "\226\150\179", -- △
xvee = "\226\139\129", -- ⋁
xwedge = "\226\139\128", -- ⋀
yacute = "\195\189", -- ý
Yacute = "\195\157", -- Ý
yacy = "\209\143", -- я
YAcy = "\208\175", -- Я
ycirc = "\197\183", -- ŷ
Ycirc = "\197\182", -- Ŷ
ycy = "\209\139", -- ы
Ycy = "\208\171", -- Ы
yen = "\194\165", -- ¥
yfr = "\240\157\148\182", -- 𝔶
Yfr = "\240\157\148\156", -- 𝔜
yicy = "\209\151", -- ї
YIcy = "\208\135", -- Ї
yopf = "\240\157\149\170", -- 𝕪
Yopf = "\240\157\149\144", -- 𝕐
yscr = "\240\157\147\142", -- 𝓎
Yscr = "\240\157\146\180", -- 𝒴
yucy = "\209\142", -- ю
YUcy = "\208\174", -- Ю
yuml = "\195\191", -- ÿ
Yuml = "\197\184", -- Ÿ
zacute = "\197\186", -- ź
Zacute = "\197\185", -- Ź
zcaron = "\197\190", -- ž
Zcaron = "\197\189", -- Ž
zcy = "\208\183", -- з
Zcy = "\208\151", -- З
zdot = "\197\188", -- ż
Zdot = "\197\187", -- Ż
zeetrf = "\226\132\168", -- ℨ
ZeroWidthSpace = "\226\128\139", -- [zero width space]
zeta = "\206\182", -- ζ
Zeta = "\206\150", -- Ζ
zfr = "\240\157\148\183", -- 𝔷
Zfr = "\226\132\168", -- ℨ
zhcy = "\208\182", -- ж
ZHcy = "\208\150", -- Ж
zigrarr = "\226\135\157", -- ⇝
zopf = "\240\157\149\171", -- 𝕫
Zopf = "\226\132\164", -- ℤ
zscr = "\240\157\147\143", -- 𝓏
Zscr = "\240\157\146\181", -- 𝒵
zwj = "\226\128\141", -- [zero width joiner]
zwnj = "\226\128\140", -- [zero width non-joiner]
-- Nonstandard, but accepted by MediaWiki.
["רלמ"] = "\226\128\143", -- [right-to-left mark]
["رلم"] = "\226\128\143", -- [right-to-left mark]
}
8o4sqdodbkfwk9xmp2f1xlrb7zei3p7
Mòideal:pages/templates
828
16867
86414
2026-07-23T11:52:00Z
Altronic
4137
Copy from English Wiktionary
86414
Scribunto
text/plain
-- Prevent substitution.
if mw.isSubsting() then
return require("Module:unsubst")
end
local export = {}
local en_utilities_module = "Module:en-utilities"
local headword_data_module = "Module:headword/data"
local headword_page_module = "Module:headword/page"
local languages_module = "Module:languages"
local scripts_module = "Module:scripts"
local links_module = "Module:links"
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
--[==[
Implementation of {{tl|pagename}}.
]==]
function export.pagename_t(frame)
local args = require(parameters_module).process(frame:getParent().args, {
["title"] = true,
})
local title = args.title
if not title then
return mw.loadData(headword_data_module).pagename
end
return require(headword_page_module).process_page(title, "no_fetch_content").pagename
end
--[==[
Implementation of {{tl|pagetype}}.
]==]
function export.pagetype_t(frame)
local args = require(parameters_module).process(frame:getParent().args, {
["article"] = {type = "boolean"},
["pagename"] = {demo = true},
})
local pagename = args.pagename
local pagetype = require(pages_module).get_pagetype(
pagename == nil and mw.title.getCurrentTitle() or
mw.title.new(pagename) or
error(("%s is not a valid page name"):format(mw.dumpObject(pagename)))
)
return args.article and (
pagetype:match("^user%f[%W]") and "a " .. pagetype or -- avoids "an user"
require(en_utilities_module).add_indefinite_article(pagetype)
) or pagetype
end
--[==[
Implementation of {{tl|page is large}}.
]==]
function export.page_is_large_t(frame)
local args = require(parameters_module).process(frame:getParent().args, {
[1] = true,
})
local pagename = args[1] or mw.loadData(headword_data_module).pagename
return require(headword_data_module).large_pages[pagename] and "true" or ""
end
--[==[
Implementation of {{tl|page exists}}.
]==]
function export.page_exists_t(frame)
local args = require(parameters_module).process(frame:getParent().args, {
[1] = {required = true, template_default = "a"},
use_exists = {type = "boolean"},
})
-- Here, we convert logical to physical not directly by calling logicalToPhysical(), which will not handle
-- non-mainspace pages correctly, but get_link_page(), which will do the same handling as full_link() does.
-- This will strip italics, bold, HTML comments, strip markers and soft hyphens (FIXME: this may or may not
-- be what we want), and normally will do diacritic stripping, but we turn this off by specifying Translingual
-- with script None. Specifying Translingual also has the effect that mammoth pages return the base page rather
-- than one of the splits.
local mul = require(languages_module).getByCode("mul", true)
local None = require(scripts_module).getByCode("None", true)
local physical_page = require(links_module).get_link_page(args[1], mul, None)
if not physical_page then
-- weird cases like a triple-brace parameter in the pagename
return ""
end
local title = mw.title.new(physical_page)
return title and (args.use_exists and title.exists or title:getContent()) and "true" or ""
end
--[==[
Adapted from [[Module:ugly hacks]], which will be going away. Meant to be invoked directly.
Returns the string {"valid"} if the page name in {{para|1}} is a valid pagename, otherwise a blank string.
]==]
function export.is_valid_pagename(frame)
local iargs = require(parameters_module).process(frame.args, {
[1] = true,
})
return require(pages_module).is_valid_page_name(iargs[1]) and "valid" or ""
end
--[==[
Alternative entry point for {{cd|is_valid_pagename}}.
]==]
function export.is_valid_page_name(frame)
return export.is_valid_pagename(frame)
end
return export
6d98vkd0tevo098gptnbvy7put65ui8