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;" | &nbsp; |- | width=48% style="border-top: 1px dashed #AAAAAA;" | &nbsp; |- |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;" | &nbsp; |- | width=48% style="border-top: 1px dashed #AAAAAA;" | &nbsp; |- |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;" | &nbsp; |- | width=48% style="border-top: 1px dashed #AAAAAA;" | &nbsp; |- |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 &ndash;by the international Wikimedia Commons community&ndash; 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>&mdash;&nbsp;[[User:Tulsi Bhagat|<font color="black">'''Tulsi Bhagat'''</font>]] <small>([[Special:Contributions/Tulsi Bhagat|<font color="black">contribs</font>]] &#124; [[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&nbsp;March&nbsp;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>&amp;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|&nbsp;%1&nbsp;]]}} * [[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|&nbsp;%1&nbsp;]]}} * [[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("|", "&#124;")))) 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("|", "&#124;")))) 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 (&#39; → '), -- as they contain #, which causes the numeric character reference to be -- misparsed (wa'a → wa&#39;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 = "&#x5D;" .. link.display .. "&#x5B;" 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, "&nbsp;" .. 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 &lt; -- and &gt; 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), ["<"] = "&lt;", [">"] = "&gt;", } 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%;\">&nbsp;/ </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> &rarr; <code><nowiki>displayed text</nowiki></code> * <code><nowiki>[[page and displayed text]]</nowiki></code> &rarr; <code><nowiki>page and displayed text</nowiki></code> * <code><nowiki>[[Category:English lemmas|WORD]]</nowiki></code> &rarr; ''(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 .. " §&nbsp;" .. 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 &gt; 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("&gt;", ""):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("&gt;", ""):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>&lt;</code>" with "<code>&amp;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>&lt;includeonly>…&lt;/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&nbsp; | <kbd>#ECFCF4</kbd> || 150&deg;, 6%, 99% | style="background:#ECFCF4" | &nbsp; | Sample || Current documentation background |- | B | <kbd>#00FF80</kbd> | style="font-size:90%;" | {{Nowrap|1=Hue=150&deg; <small>(41.7%; 106/255<small>dec</small>)</small> 100%, 100%}} | style="background:#00FF80" | &nbsp; | Basic hue || What we'd call ''the color'' |- | |- | 1 | <kbd>#A3BFB1</kbd> || 150&deg;, 15%, 75% | style="background:#A3BFB1" | &nbsp; | Header border only || |- | 2 | <kbd>#CEF2E0</kbd> || 150&deg;, 15%, 95% | style="background:#CEF2E0" | &nbsp; | Main&nbsp;border; header&nbsp;background || |- | 3 | <kbd>#E6FFF2</kbd> || 150&deg;, 10%, 100% | style="background:#E6FFF2" | &nbsp; | 2nd header, accent colour || |- | 4 | <kbd>#F5FFFA</kbd> || 150&deg;, 4%, 100% | style="background:#F5FFFA" | &nbsp; | 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&nbsp; | <kbd>#ECFCF4</kbd> || 150&deg;, 6%, 99% | style="background:#ECFCF4" | &nbsp; | Sample || Current documentation background |- | B | <kbd>#00FF80</kbd> | style="font-size:90%;" | {{Nowrap|1=Hue=150&deg; <small>(41.7%; 106/255<small>dec</small>)</small> 100%, 100%}} | style="background:#00FF80" | &nbsp; | Basic hue || What we'd call ''the color'' |- | |- | 1 | <kbd>#A3BFB1</kbd> || 150&deg;, 15%, 75% | style="background:#A3BFB1" | &nbsp; | Header border only || |- | 2 | <kbd>#CEF2E0</kbd> || 150&deg;, 15%, 95% | style="background:#CEF2E0" | &nbsp; | Main&nbsp;border; header&nbsp;background || |- | 3 | <kbd>#E6FFF2</kbd> || 150&deg;, 10%, 100% | style="background:#E6FFF2" | &nbsp; | 2nd header, accent colour || |- | 4 | <kbd>#F5FFFA</kbd> || 150&deg;, 4%, 100% | style="background:#F5FFFA" | &nbsp; | 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] &#124; [{{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}} = &#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this module]]. | {{ns:Template}} = &#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this template]]. | #default = &#32;[[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] &#124; [{{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}} = &#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this module]]. | {{ns:Template}} = &#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this template]]. | #default = &#32;[[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}}} | &#91;[[{{{docpage|{{FULLPAGENAME}}/doc}}}|view]]&#93; [[{{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>:&#32;" 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;>&#32;' .. 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 .. "&nbsp;" .. 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, "&nbsp;") 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`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&#32; 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 = "&#33;" end elseif ch == ":" then if sub(_str, loc + 1, loc + 2) == "//" then return "&#58;" 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 "&#58;" 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 "&#45;" 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 = "&#95;" end elseif ch == "~" then if sub(_str, loc + 1, loc + 2) == "~~" then esc_next, esc_next2 = false, "&#126;" 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, '&nbsp;') .. '</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("&nbsp;", "")) 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, ",&nbsp;") .. "'')") -- 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